A mnie jeszcze dręczy możliwożć dodania złożliwego kodu do obrazka.
Czy ktoż wie w ogole jak to ludzie robią?I jak się przed tym zabezpieczyć?
Ostanio gdzież czytałem że tak usunęli baze danych jakiegoż dużego serwisu.
A mnie jeszcze dręczy możliwożć dodania złożliwego kodu do obrazka.
Czy ktoż wie w ogole jak to ludzie robią?I jak się przed tym zabezpieczyć?
Ostanio gdzież czytałem że tak usunęli baze danych jakiegoż dużego serwisu.
sens file_exist jako zabezpieczenie :zaciera: o kant d... potłuc takie zabezpieczenie .A dopisywać rzeczywiżcie mozna .Wystarczy otworzyć grafike w zwykłym Notepadzie++ i na końcu pliku pisać co sie chce , wyżwietlać sie będzie normalnie , nie wiem jak z wykonaniem kodu ale poknuje"Kod dołączono na końcu normalnego pliku graficznego wielkożci 1x1 piksela, który pomyżlnie przeszedł test bezpieczeństwa.
Należy podkreżlić istotę problemu. Język PHP wykorzystuje się najczęsciej do tworzenia dynamicznych serwisów internetowych i w taki też sposób wyżwietlana jest grafika w serwisach przechowujących zdjęcia/obrazki. Jest generowana dynamicznie. Dlatego, gdy "zawirusowany" plik graficzny zacznie się ładować w oknie przeglądarki użytkownika, ukryty kod zostanie wykonany, powodując okreżlone działanie, przewidziane przez autora intruza.. Nie wiem czy grafa ma gdzież w nagłowku pliku zapisana sume kontrolną i porównać z rzeczywistą ale to pewnie też mozna ominąc.
No to jeszcze w prezencie dorzucę (na ładne oczy :jezyk: ) coż o SQL Injection
Tworzymy bazę gra i tabele users według wzoru niżej:
Teraz tworzymy dwóch użytkowników(ranga "1" to admin) zapytaniem sql:Nazwa Typ pola
------- ----------
login Text
haslo Text
ranga INT
Teraz skrypt logowania- plik "login.php"Kod:insert into users (login, haslo, ranga) values (`admin`, `hasloadmina`, `1`); insert into users (login, haslo, ranga) values (`gracz`, `haslogracza`, `0`);
Teraz próbujemy się zalogować podając:Kod:<?php mysql_connect("host", "user", "hasło do bazy") or die ("nie można połączyć się z MySql"); mysql_select_db("gra") or die ("nie można połączyć się z bazą danych"); if($_post['login'] && $_post['haslo']) { $login = $_post['login']; $haslo = $_post['haslo']; $zapytanie=mysql_query(select ranga from users where login = "$login" and haslo = "$haslo"); if ($i = mysql_fetch_array($zapytanie)) { switch ($i[0]) { case 0: print "jesteż zwykłym użytkownikiem"; brak; case 1 print "jesteż administratorem" brak; } } else { print "błąd logowania"; } } else { print "<center><from action=\"login.php\" method=\"post\">\n"; print "Login: <inpunt type=\"text\" name\"login\"><br>\n"; print "Hasło <inpunt type=\"text\" name\"haslo\"><br>\n"; print "</from></center>\n"; } ?>
1. Login: Admin || Hasło: hasloadmina
2. Login: Gracz || Hasło: haslogracza
I 3 próba
Login: Admin" # || Hasło: bzduryfsafa
Co się okazuje że:
1 logujemy się jako admin
2 logujemy się jako gracz
3 I tu zdziwienie, logujemy się jako admin mimo iż podaliżmy błędne hasło
Dlaczego tak jest ano w przypadku 1 i 2 zapytanie wygląda tak:
lub tak:select ranga from users where login = "admin" and haslo = "hasloadmina"
A w 3 przypadku mamy takie zapytanieselect ranga from users where login = "gracz" and haslo = "haslogracza"
Jak widać, skrypt zamknął warunek klauzuli where za pomocą cudzysłowu, który sam przekazałeż/ałaż do skryptu, a następnie za pomocą #, który W bazie MySQL jest znakiem komentarza, anulował resztę zapytania :zaciera: .select ranga from users where login = "admin" # " and haslo = "bzduryfsafa"
Czyli zapytanie było równoznaczne z:
Tak samo można zrobić w grze z poradnika.Kod:select ranga from users where login = "admin"
Metoda zabezpieczenia??
włączenie magic_quotes_gpc lub przepuszczenie zmiennych $login i $hasło przez stripslashes() lub addslashes() .
Na podstawie książki Andrzeja Kierzkowskiego "PHP 5- tworzenie stron WWW"- Zobacz w księgarni Helion
Ps.
Do skutecznego przeprowadzenia tego typu ataku musimy mieć wyłączoną opcje magic_quotes_gpc = off w pliku php.ini bo będzie nam przeszkadzała w ataku dodając \ podobnie jak addslashes().
Ps2. Coż w kodzie może być poknocone nie testowałem go :jezyk: .
Zamiast addslashed() lepiej użyć funkcji mysql_escape_string() bądź mysql_real_escape_string() .
Powrót z zaświatów ? ; )
Tan przykladzik jest identyczny jak w jednej książce.
Helid, ta - podobny, identycznym bym tego nie nazwał, przykład jest podobny ale opis już nie :jezyk: .
Ale cóż nie zaszkodzi dopisać "na podstawie książki Andrzeja Kierzkowskiego "PHP 5- tworzenie stron WWW"" :lapa:
Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)
Zakładki