![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 11.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Napisałem skrypt ale nie potrafie go zabezpieczyć. Jest to skrypt rejestracji wprowadzający login i hasło do bazy MSSQL
czy funkcja addslashes wystarczy? jeśli możecie to pomóżcie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Temat: SQL Injection Insertion albo http://www.google.pl/search?hl=pl&q=sql+injection
Żeby się porządnie zabezpieczyć przed SQL Injection musisz mieć jakieś pojęcie o PHP i SQL. Po pierwsze zapamiętaj, że po stronie PHP układanie jest tylko zapytanie (napis), które wysyłane jest to serwera baz danych. Złośliwy użytkownik może w formularzu podać takie dane, które zmienią działanie zapytania, i przed tym trzeba się zabezpieczać. Przykład:
Jeśli użytkownik poda w formularzu: login: admin hasło: iskierka To zapytanie będzie wyglądało tak: SELECT * FROM uzytkownicy WHERE ( login = 'admin' ) AND ( haslo = 'iskierka' ) Jeśli urzytkownik poda w formularzu: login: admin' ) -- hasło: cokolwiek To zapytanie będzie wyglądało tak: SELECT * FROM uzytkownicy WHERE ( login = 'admin' ) -- ') AND ( haslo = 'cokolwiek' ) Wszystko co znajduje się po "--" jest traktowane jako komentarz, serwer baz danych tego nie widzi. Czyli lekko preparując wysyłane dane możemy pobrać informacje o adminie nie znając jego hasła. Żeby MSSQL rozpoznał apostrof jako "apostrof", a nie jako koniec napisu, stosuje się tzw. znaki ucieczki. Dla MSSQL jest to drugi apostrof. Więc jeśli zmienne $login i $haslo przepuścisz przez funkcję, którą podałem wyżej, to nie uda się wykonać ataku SQL Injection:
Po zastosowaniu funkcji secure() zapytanie będzie miało postać: SELECT * FROM uzytkownicy WHERE ( login = 'admin'') -- ' ) AND ( haslo = 'cokolwiek' ) i nie zwróci ono nic, bo w bazie danych najprawdopodobniej nie będzie nikogo z loginem: "admin') -- " ;] Trochę inaczej należy patrzeć na zabezpieczenie danych, które nie są umieszczane w apostrofach, np:
W takim przypadku trzeba stosować intval" title="Zobacz w manualu PHP" target="_manual, ctype_digit" title="Zobacz w manualu PHP" target="_manual czy inne techniki, o których mi się nie chce pisać, a które znajdziesz pod linkami które podałem powyżej. Ten post edytował Kicok 14.07.2007, 20:45:26 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 27.09.2025 - 06:40 |