SQL Injection/Insertion, Jak zapobiec włamaniu na stronę. |
SQL Injection/Insertion, Jak zapobiec włamaniu na stronę. |
3.08.2006, 09:01:53
Post
#101
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) |
@J4r0d Przecież to jest jeszcze prostsze Przykład: checksum.php
admin.php
Prościej się wytłumaczyć nie da Dzięki. Nie zauważyłem, że generujesz go na podstawie Id. Wszystko jasne. Dzięki. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
3.08.2006, 15:09:20
Post
#102
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 13.06.2002 Skąd: mmz Ostrzeżenie: (0%) |
Co do zabezpieczenia przed SQL Injection znalazłem coś takiego
Zastosowanie:
Cały temat pod http://www.hacking.pl oraz bardzo dobry przykład po angielsku ale kod każdy rozumie http://www.unixwiz.net/techtips/sql-injection.html a tu przykład błedów wysyłanych przez formularz http://webcity.pl/webcity/porady.php/t/113 Dobrym też pomysłem są logi jeżeli było jakieś błędne zapytanie, dzięki temu można wyczaić co dany klient kombinuje, i powiedzmy przyblokować w imie dobra jego IP na jakiś czas ewentualnie login, wtedy niezrobimy krzywdy innym userom na tym samym ip. Co do tego usówania to ja jeszcze weryfikuje IP, nazwe sesji, sumę kontrolną, i uprawniemia usera, pozatym nie jest dany wpis wywalany z bazy tylko deaktywowany powiedzmy jakieś pole w DB odpowiada za status, pużniej odpalam co jakiś czas skrypt który usówa wpisy starsze niż 30 dni z bazy danych w celu odciążenia serwera. Myślę że to w miarę bezpieczna metoda jeżeli chodzi o usówania damych z bazy. i jeszczcze na dodatek jak jest kilka osób które zarządzają serwisem. Ten post edytował planet_x 3.08.2006, 15:21:26 |
|
|
21.08.2006, 11:10:02
Post
#103
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 5 Dołączył: 8.11.2004 Skąd: trójmiasto Ostrzeżenie: (0%) |
Mam zapytanie, które jest brzydkie
Czy jak zmienie w taki sposób:
To będzie już ładne ? |
|
|
21.08.2006, 11:25:10
Post
#104
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
a jak ktos ci w miejsce id zamiast powiedzmy 2, wpisze: 2' or 1=1 to usunie ci wszystko z tabeli.... byla mowa na poczatku tego topicu. jesli id to liczba, to rzutuj ja na liczbe: (int)$_GET['id']. jak nie liczba to slashuj
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
21.08.2006, 13:05:04
Post
#105
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 5 Dołączył: 8.11.2004 Skąd: trójmiasto Ostrzeżenie: (0%) |
|
|
|
21.08.2006, 13:08:30
Post
#106
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
W przypadku mysql za bardzo tak ci nic nie skasuja, gdyz mysql_query pozwala na wykonanie tylko jednego zapytania. ale w przypadku innych baz to moglbys sie zzdziwic.
Pozatym w mysql to ci moga wyciagnac inne dane niz w twoim warunku, wystarczy ze za id dadza: 2 or 1=1 i juz poznaja wszystkie rekordy a nie tylko o danym id. Przyjmij wkoncu do wiadomosc. Dane nalezy filtrowac, niezaleznie od tego czy ktos moze zaszkodzic czy nie. Naucz sie wyrabiac w sobie dobre nawyki. Cos ma byc intem: zrzutuj na int. Cos ma byc tekstem: przeslashuj to -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
21.08.2006, 13:25:04
Post
#107
|
|
Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) |
OK. Ale jak mam już zapytanie typu SELECT, np
To rozumiem, że chyba nic złego się nie może stać ? żartujesz czy to jakaś prowokacja? w $_GET['id'] wpisuje OR 1=1 i po sprawie. wlasciwie mozna zrobic tu wszystko teraz. taki przyklad pojawia sie w kazdym kursie, artykule, ksiazce jako calkowity brazk zabezpieczenia. -------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
21.08.2006, 13:45:32
Post
#108
|
|
Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) |
mysql_query pozwala na wykonanie tylko jednego a jesli bedzie cos takiego http://index.php?site=del&id=2 i dopiszesz dalej ';%20$mysql_query%20=%20"%20DELETE%20%20FROM%20USERS"; chodzi o usuwanie to czy cos takiego ma szanse zadzialac w przypadku jak id nie jest filtrowane -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
22.08.2006, 08:23:57
Post
#109
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
Cytat a jesli bedzie cos takiego http://index.php?site=del&id=2 i dopiszesz dalej ';%20$mysql_query%20=%20"%20DELETE%20%20FROM%20USERS"; chodzi o usuwanie to czy cos takiego ma szanse zadzialac w przypadku jak id nie jest filtrowane Czy Twoim zamierzeniem bylo zakonczenie jednej instrukcji php i wywolanie drugiej, w tym przypadku wywolanie ponownie mysql_query? Powodzenia życze. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
23.08.2006, 12:39:00
Post
#110
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 5 Dołączył: 8.11.2004 Skąd: trójmiasto Ostrzeżenie: (0%) |
Kurcze zrobiłem coś takiego:
Probelm jest chyba z mysql_escape_string bo teraz po dodaniu tesktu z cudzysłowem i zapisaniu w bazie, jak robie wyświetlanie wpisanych wartości to mam dodane slashe, Co się w takim przypadku robi? Jest jakaś funkcja na to? Ten post edytował php programmer 23.08.2006, 12:40:32 |
|
|
23.08.2006, 12:41:56
Post
#111
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
no musisz przed wyswietleniem uzyc stripslashes. jest to pewien feler...
Mozesz tez zapisywac do bazy przy pomocy htmlspecialchars z dyrektywa ENT_QUOTES. Zapiszesz wowczas encje i nie bedziesz mial \ -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
23.08.2006, 13:20:47
Post
#112
|
|
Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) |
używaj prepared statements to w wiekszosci przypadkow nie bedziesz musial sie sie przejmowaniem slashowaniem i odslashowaniem. niestety dostepne dopiero od mysqli i pdo
-------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
29.08.2006, 20:33:05
Post
#113
|
|
Grupa: Zarejestrowani Postów: 269 Pomógł: 0 Dołączył: 6.02.2006 Ostrzeżenie: (0%) |
Ja do liczb stosuje najczęściej ereg" title="Zobacz w manualu php" target="_manual (zwłaszcza w UPDATE, w grze MMORPG). Wtedy mam pewność że osoba która wpisze np -1230 nie wyrządzi mi żadnych szkód. A zabezpieczanie skryptów można trenować na wspomnianym przeze mnie wyżej ExoFusion. Jak ktoś go tak zabezpieczy, że nie będzie żadnych (no, może nie żadnych, a prawie żadnych) błędów to będzie się miał czym pochwalić (ja znałem 2 gry na 10 które były w miarę zabezpieczone, ale i tak padły - właśnie przez SQL Injection) Apropo gier: http://sge.laventhar.pl/ Włamałem sie do niej pół roku temu poprzez błąd serwera, w kodzie php odnalazłem pliki *ini a tam hasło :-) i gra była moja. |
|
|
30.08.2006, 06:36:08
Post
#114
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 6 Dołączył: 28.08.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
przyznam szczerze, ze calego topica nie przeczytalem i moze sie juz pojawilo
jesli chcemy zrobic
to najlepiej jest nie przesylac zmiennej bezposrednio GETem, czy POSTem, lecz zrobic tak:
w ten sposob nikt nie jest w stanie pod nasza zmienna podpiac "zlych" warunkow do sqla, bo jesli wpisze cokolwiek innego niz a lub b, to $szukana bedzie defaultowa p.s. co zrobic, zeby forum nie wstawialo mi \ przed "? Ten post edytował Vexator 30.08.2006, 06:46:04 -------------------- Pomogłem? Kliknij "pomógł" ;)
|
|
|
30.08.2006, 08:13:33
Post
#115
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
@Vexator z calym szacunkiem, ale przeczytaj jednak ten topic caly, albo przynajmniej strone na ktorej napisales tego posta...
Przeciez ty dales warunek na ID, w bazie mam powiedzmy 1000 rekordow i co, mam walić na kazdego case? Jak ty to sobie wyobrazasz? poroniony pomysl skoro to ID to wystarczy zrzutowac na int: (int) $_GET['id'] i nikt ci nic nie wrzuci -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
31.08.2006, 11:33:31
Post
#116
|
|
Grupa: Zarejestrowani Postów: 269 Pomógł: 0 Dołączył: 6.02.2006 Ostrzeżenie: (0%) |
Naklepsza ochroną jest stosowanie sesji z prawami dostepu. W swoich skryptach przed wyslaniem zapytanie do SQL spr czy user ma prawa dostepu, jezeli nie skrypt nie puszcza pasozyda.
|
|
|
31.08.2006, 12:02:58
Post
#117
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
@free ale jak to sie ma do topicu w ktorym uraczyles nas tym postem?
W jaki sposob sprawdzasz czy koles ma prawa? Na podstawie pewnie czy zalogowany, a zeby sie zalogowac to musi wpisac login i haslo i juz w tym momencie moze zrobic ci atak. No chyba ze sprawdzasz czy ma prawa do zalogowania sie edit: a nawet jak ma prawa to moze chcacy lub niechcacy zrobic cos "źle" -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
7.09.2006, 12:27:57
Post
#118
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 0 Dołączył: 28.11.2005 Ostrzeżenie: (0%) |
Hmm, mam pytanie, stosuje mod_rewrite w ten sposób :
Adres strony pojawia się w ten sposób : http://strona.net/wartosc1/wartosc2/ Jeśli w żadnym linku nie odwołam się do postaci http://strona.net/index.php?p_zmienna=wart...mienna=wartosc2 . To czy ewentualny atakujący będzię miał możliwość w jakikolwiek sposób zobaczyć nazwę tej zmiennej ? Bo jeśli nie będzie miał możliwości to przy wpisaniu http://strona.net/wartosc1 OR 1=1/ wyskoczy błąd serwera gdyż pusty znak nie jest uwzględniony w [0-9a-z] i SQL Injection się nie powiedzie. Czy się myle ? Ten post edytował Blastereq 7.09.2006, 12:28:57 -------------------- śmieszne filmiki
|
|
|
11.09.2006, 15:36:07
Post
#119
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 24.11.2005 Skąd: Podczerwone Ostrzeżenie: (0%) |
Ja bronię się trochę inaczej:
robię zapytanie typu
Funkcja haszująca MD5 gwarantuje, że treść wysłana w zapytaniu do bazy NIE będzie żadnym poleceniem. Jeżeli hasło istnieje (albo ktoś trafił na ciąg po haszowaniu dajacy jakiśtam rezultat, który jest w bazie), to sprawdzamy login z zapodanym wcześniej. Takie podejście od tyłu Najczęściej wykorzystywane jest pole [login] do takich zabaw jak SQL Injection. A w tym przypadku nie ma na to szans. Proszę o ocenę pod względem bezpieczeństwa... PS> Hasła w bazie są oczywiście shaszowane PS2> w zmiennej $sql nie ma żadnych Backslashy (czyli [\]) -------------------- Podhale naprawa komputerów, strony WWW
|
|
|
11.09.2006, 16:49:54
Post
#120
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 29.05.2006 Skąd: Lublin Ostrzeżenie: (0%) |
Super - sprawdzasz tylko po haśle - więc zakladasz ze kazdy user MUSI miec inne haslo - zle - wybierz po loginie (ktory winien byc unikalny) i potem czy hash hasła = shaszowane wczesniej haslo z bazy.
-------------------- [gg:8166107][jid:mmatheww@jabberpl.org][mail:mat.wojcik[at]gmail.com][www: http://mwojcik.pl]
|
|
|
Wersja Lo-Fi | Aktualny czas: 24.04.2024 - 08:37 |