Skocz do zawartości
DiJo

[php] Zabezpieczenie Przed Mysql Injection?

Rekomendowane odpowiedzi

witam :)

Projektuje stronke w php i mysql. Słyszałem że dość dużo jest błędów typu "mysql injection". Jak sie przed tym zabezpieczyć? Wystarczy takie coś?

$eid=$_REQUEST['eid'];settype($eid, "integer");mysql_query("UPDATE `egzemplarze` SET `reserved` = 1 WHERE `id` = " . $eid);

 

 

pozdr.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

witam :)

Projektuje stronke w php i mysql. Słyszałem że dość dużo jest błędów typu "mysql injection". Jak sie przed tym zabezpieczyć? Wystarczy takie coś?

$eid=$_REQUEST['eid'];settype($eid, "integer");mysql_query("UPDATE `egzemplarze` SET `reserved` = 1 WHERE `id` = " . $eid);
pozdr.
1)$_REQUEST ? wiesz że teraz gość może porobić z twoją bazą co chce :

$_REQUESTmoże pobrać wartość z tabeli $_GET czyli urla ;)

2)SQL injection następuje przy wykorzystaniu instrukcji SELECT .

SQL_Injection

Edytowane przez Haquim

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

yyyy czyli jak? Bo w tej chwili działa to tak, że wchodze na adres /plik.php?eid=12

i ten skrypt uaktualnia baze danych (jeden wpis). No i eid ma być zawsze liczbą. Możesz dać jakiś przykład jak to ominąć? :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

yyyy czyli jak? Bo w tej chwili działa to tak, że wchodze na adres /plik.php?eid=12

i ten skrypt uaktualnia baze danych (jeden wpis). No i eid ma być zawsze liczbą. Możesz dać jakiś przykład jak to ominąć? :)

To tak jakbyś mnie pytał jak ominąć szeroko otwarte drzwi przy włamaniu, gdy właściciel zakratował okna :).

Zauważ że jeśli ktokolwiek miałby dostęp do strony w taki sposób że mógłby wklepać url z parametrem get np. id=1%20OR%201=1. I próbować ataku SQLinjection:

Oczekiwana przez włamywacza interpretacja po stronie serwera:

mysql_query("UPDATE `egzemplarze` SET `reserved` = 1 WHERE `id` = 1 OR 1=1");
rzeczywiście twoje zabezpieczenie by zadziałało (próba włamania przez zakratowane okno).

 

Ale po co ??? Skoro drzwi są otwarte :

wystarczy teraz uruchomić prosty programik w javie służący li tylko do zamówienia wszystkich egzemplarzy (kod został ocenzurowany :) )):

public class Wlan(){	public static void main(String[] args)	{	   for(int i=0;i<1000;i++)	   {			URLConnection urlconn = new URLConnection(new URL(args[0]+'?id='+i));			...			urlconn.open();		   .....			InputStream is = new InputStream(urlconn);					OutpustStream os = new OutputStream(urlconn);			.....		   is.close();			os.close();	   }	}}
Edytowane przez Haquim

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

settype() zamienia 1%20OR%201=1 na liczbę 1 :|

 

$eid=$_REQUEST['eid'];settype($eid, "integer");print("UPDATE `egzemplarze` SET `reserved` = '".time()."' WHERE `id` = ".$eid." LIMIT 1");
zapytanie wyglada to tak:

UPDATE `egzemplarze` SET `reserved` = '1157104783' WHERE `id` = 1 LIMIT 1
czyli jeśli dam zamiast print mysql_query to treść zapytania sie chyba nie zmieni :> Juz niewiem jak to mam zrobić :]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

settype() zamienia 1%20OR%201=1 na liczbę 1 :|

 

$eid=$_REQUEST['eid'];settype($eid, "integer");print("UPDATE `egzemplarze` SET `reserved` = '".time()."' WHERE `id` = ".$eid." LIMIT 1");
zapytanie wyglada to tak:

UPDATE `egzemplarze` SET `reserved` = '1157104783' WHERE `id` = 1 LIMIT 1
czyli jeśli dam zamiast print mysql_query to treść zapytania sie chyba nie zmieni :> Juz niewiem jak to mam zrobić :]
Oczywiście tylko - Po co ? Po co pisać jak można nie pisać (palce się męczą ;) ), chyba że projektujesz stronę

idiotodporną.

Edytowane przez Haquim

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...