DiJo Opublikowano 30 Sierpnia 2006 Zgłoś Opublikowano 30 Sierpnia 2006 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Haquim Opublikowano 31 Sierpnia 2006 Zgłoś Opublikowano 31 Sierpnia 2006 (edytowane) 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 31 Sierpnia 2006 przez Haquim Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
DiJo Opublikowano 31 Sierpnia 2006 Zgłoś Opublikowano 31 Sierpnia 2006 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ąć? :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Haquim Opublikowano 1 Września 2006 Zgłoś Opublikowano 1 Września 2006 (edytowane) 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 1 Września 2006 przez Haquim Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
DiJo Opublikowano 1 Września 2006 Zgłoś Opublikowano 1 Września 2006 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 1czyli jeśli dam zamiast print mysql_query to treść zapytania sie chyba nie zmieni :> Juz niewiem jak to mam zrobić :] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Haquim Opublikowano 2 Września 2006 Zgłoś Opublikowano 2 Września 2006 (edytowane) 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 1czyli 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 2 Września 2006 przez Haquim Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...