SQL Injection/Insertion, Jak zapobiec włamaniu na stronę. |
SQL Injection/Insertion, Jak zapobiec włamaniu na stronę. |
23.02.2006, 02:40:09
Post
#81
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 26.08.2003 Ostrzeżenie: (0%) |
i po sprawie, nikt nie podskoczy (mozna jeszcze trimowac, ale preg_replace nie przpusci chyba zero byte?) -------------------- ..::tHe FoE::..
|
|
|
26.02.2006, 19:46:34
Post
#82
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 9.11.2005 Ostrzeżenie: (0%) |
Witam,
Czytałem posty na temat zabezpieczeń na stronie i zebrałem wszystko do kupy i wyszło mi coś takiego:
funkcja logs wyrzuca do pliku bardzo przydatne informacje o gościu który próbuje cos namieszać. W postaci np: "18:21:38 26-02-2006 ip: 127.0.0.1 proxy: plik: http://localhost/~www/zabezpieczenia.php url: http://localhost/~www/zabezpieczenia.php atak na zmienną: $akcja" Co tu jest niepotrzebne? a co źle!! Dodam ze metoda ma pobierac z linku dwie zmienne $akcja i $id dla późniejszego użycia zapytania SQL. $akcja ma zawierać tylko ciąg małych literek a $id tylko liczbe. Pozdrawiam. |
|
|
28.02.2006, 14:33:07
Post
#83
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 28.02.2006 Skąd: 127.0.0.1 :) => Ukraine Ostrzeżenie: (0%) |
Sorry that not Polish,
but your functions are so funny e.g. Why do you make global $_SERVER??
I can`t explane it.
AND Kod UNI/**/ON OOPS
Have you ever here about $_REQUEST? No? Ten post edytował vedeney 28.02.2006, 14:34:10 -------------------- My blog: vedeney.org.ua
|
|
|
28.02.2006, 22:08:23
Post
#84
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 9.11.2005 Ostrzeżenie: (0%) |
hej vedeney. funkcja logs, jest przepisana. Global mozna wyrzucic. Ale czemu nie rozumiesz zastosowania tego kodu:
chcialem żeby nie mozna bylo użyć polecenia UNION.
wyciągania wszystkich tabel. |
|
|
28.02.2006, 23:28:36
Post
#85
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) |
i to tyle, zadne pregi, bo po co gdy pod $age wstawisz "UNION .....blalba.... --" $intAge == 0 gdy pod $name wstawisz "UNION .....blalba.... --" sql wyglada tak
bylo to juz wspominane na poczatku (lub dalej ) tego watka ale zginelo w masie postow probujacych to uzyskac. -------------------- Nie lubię jednorożców.
|
|
|
1.03.2006, 08:53:31
Post
#86
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 28.02.2006 Skąd: 127.0.0.1 :) => Ukraine Ostrzeżenie: (0%) |
Ok! I`ve understand you, But your code didn`t prevent such hack as
Kod http://mojastron.php?id=10 UN/**/ION SEL/**/ECT bla bla bla.... Which will be executed without any problems; or Kod http://mojastron.php?id=BENCHMARK(1000000,MD5(NOW())) or Kod http://mojastron.php?id=BENCHMARK(1000000,BENCHMARK(1000000,BENCHMARK(1000000,MD5(NOW())))) It`s DOS through MySql-injection -------------------- My blog: vedeney.org.ua
|
|
|
2.03.2006, 19:35:09
Post
#87
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 26.08.2003 Ostrzeżenie: (0%) |
Cytat(vedeney @ 2006-02-28 14:33:07)
Have you ever here about $_REQUEST? No? Yes, I've heard about $_REQUEST. But it's another stupid thing like register_globals on is. Let the manual speak: Cytat $_REQUEST Variables provided to the script via the GET, POST, and COOKIE input mechanisms, and which therefore cannot be trusted. The presence and order of variable inclusion in this array is defined according to the php variables_order configuration directive. This array has no direct analogue in versions of php prior to 4.1.0. See also import_request_variables(). Ain't simple? if you use _REQUEST, as foreach source, you won't be able to set cookie, set GET, set POST with the same string name! You will be forced to remember about it all time. Additionaly, here's no problem with my code, you can use _REQUEST in spite of. If you realy like it. -------------------- ..::tHe FoE::..
|
|
|
5.04.2006, 17:53:33
Post
#88
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 0 Dołączył: 27.03.2006 Ostrzeżenie: (0%) |
Cytat zabezpieczenie w stylu: to jak juz powiedziano zadne zabezpieczenie a pozatym zmnijsza wydajnosc zapytania, umieszczanie wartosci liczbowych w momiedzy " " powiduje iz MySQL mysli ze ma do czynienia ze znakami (stringami) i niepotzrebnie musi konwertowac typy. Bzdura. Zapisz taki jest jak najbardziej szybszy, bo kod nie jest parsowany (bo jest w ' '), a zapisując zmienną w cudzysłowiach w kodzie ("coś tam $zmienna") powoduje parsowanie kodu i dłuższe sprawdzanie zmiennych. Nie wprowadzajcie ludzi w błąd. Cytat przyklad:
wywołanie normalne: Kod news.php?id=1 news.php?id=25 itd wywołanie zmodyfikowane przez kogostam np. Kod news.php?id=1;DROP%20TABLE%20news; Ee tam, zonwu zonk, przecież mysql_query pozwala na wysłanie tylko jednego zapytania, więc to co pokazałeś nic nie da. Więcej tematu czytać mi się nie chciało, ale mam nadzieję, że nie ma tam dalej więcej bzdur |
|
|
5.04.2006, 22:36:28
Post
#89
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 5.04.2006 Ostrzeżenie: (0%) |
A takie rozwiazanie:
XSS-y wykluczone, ' i " zamieniane na bezpieczne da sie to obejsc? Ten post edytował Pawel86 6.04.2006, 07:51:35 |
|
|
16.04.2006, 17:47:42
Post
#90
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 24.04.2005 Ostrzeżenie: (0%) |
Mam taki problem:
Jesli uzyje mysql_real_escape_string i jesli jest wlaczone magic quotes to otrzymam przykladowo ze stringu jakis'wyraz, string jakis///'wyraz. Moglbym zrobic tak:
tylko, że wtedy, jeśli jest wlaczone magic_quotes to stosowanie tej funkcji jest bezsensu - gdy uzyje addslashes wyjdzie na to samo. jak mozna rozwiazac ten problem?? Moze poprostu zostac przy addslashes ? Ten post edytował Janek111 17.04.2006, 10:54:39 |
|
|
29.05.2006, 22:28:55
Post
#91
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) |
Dorzucę się do tego wątku i powiem, że moim zdaniem najlepszym zabezpieczeniem jest: 1. ustawienie w php.ini opcji get_magic_quotes_gpc na ON 2. stosowana równolegle z powyższym funkcja czyszcząca otrzymane dane - od razu uprzedzam, że wbrew nazwie nie dotyczy ona tylko danych przesyłanych metodą POST:
3. Funkcja zapewniająca dodatkowe filtrowanie dla identyfikatorów, przekazywanych w URL'u:
Zastosowanie:
Jakieś uwagi? Pozdrawiam, K Hmm.. Do czego jest właściwie to UNION? Może ktoś poda przykład? Bo ja się nie zetknąłem z takim zapytaniem -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
29.05.2006, 22:36:35
Post
#92
|
|
Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) |
A szukac to nie potrafisz?
czyli sklejanie dwoch zapytan do bazy -------------------- eh, co polska wódka to polska wódka
|
|
|
29.05.2006, 22:52:27
Post
#93
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) |
Próbując podsumować dyskusję, możnaby powiedzieć, że aby zabezpieczyć się przed SQL Injection trzeba filtrować każdą zmienną przychodzącą, czyli:
1. Jeśli spodziewamy się liczby to każdą zmienną traktujemy
2. Jeśli spodziewamy się ciągu to stosujemy
Czy to wystarczy? A co w takim przypadku. Mamy spis użytkowników w systemie, który załóżmy że wygląda tak. Przy każdym użytkowniku jest link z opcją usunięcia konta. Z tym linkiem, przesyłany jest numer ID danego klienta, żeby wiedzieć, którego klienta usunąć z bazy (ID jest kluczem głównym). Teraz ktoś może zmodyfikować URL, np zamiast usunąć konto 2 (http://jakasstrona/usun.php&id=2) może wpisać dowolny inny numer, np (http://jakasstrona/usun.php&id=1) i skasuje konto admina. Jak się przed tym zabezpieczyć? Stosuję w każdym skrypcie funkcję weryfikującą, któa sprawdza czy użytkownik jest zalogowany i czy ma odpowiednie prawa. Ale wiem, że to nie wystarczy. Ten post edytował J4r0d 30.05.2006, 07:24:43 -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
3.06.2006, 19:58:56
Post
#94
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 11.06.2005 Skąd: Gostyń Ostrzeżenie: (0%) |
Wówczas zawsze należy robić dodatkowe confirmy - formularze typu "Czy na pewno chcesz.... [ TAK ] [ NIE ]"
-------------------- @nospor: trzymajcie się. Wszystko będzie dobrze!
|
|
|
4.06.2006, 17:53:17
Post
#95
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) |
Wówczas zawsze należy robić dodatkowe confirmy - formularze typu "Czy na pewno chcesz.... [ TAK ] [ NIE ]" Stosuję.. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
28.07.2006, 16:32:02
Post
#96
|
|
Grupa: Zarejestrowani Postów: 504 Pomógł: 2 Dołączył: 31.03.2006 Skąd: Londyn Ostrzeżenie: (0%) |
Wedlug mnie mozesz jedynie sprawdzic czy Id nie jest elementem wyznaczonego przez Ciebie a niedozwolonego zbioru.
Zostaja jedynie confirmy, tutaj wszystko wydaje sie kwestia dostepu. Jesli dasz dostep do tego panelu, to po co meczyc sie ze zmiana URLa skoro wystarczy kliknac No chyba ze kazdy uzytkownik ma inne prawa i innych uzytkownikow ktorych moze edytowac (taka relacja su/admin/sub-admin wtedy wspommniany przezemnie zbior nalezalo by uzaleznic od uzytkowanika. -------------------- "Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"
|
|
|
2.08.2006, 00:19:08
Post
#97
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) |
@J4r0d Bardzo prosto się można zabezpieczyć
Zastosuj sume kontrolną. jakasstrona/usun.php&id=2&checksum=f3sxSdf32vx3sGx Napisz własny wzór generowania sumy kontrolnej oraz jej sprawdzania. Np.
Ten post edytował eai 2.08.2006, 00:20:53 |
|
|
2.08.2006, 08:37:09
Post
#98
|
|
Grupa: Zarejestrowani Postów: 800 Pomógł: 0 Dołączył: 26.11.2005 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
Zgadzam się z Eai. Ja stosuje sumy plus sesje oraz grupy uprawnień. Jeśli użytkownik nie ma odpowiedniego levela odrazu acces denied w głównym pliku administracyjnym. Nie pozwalam nawet dojść do uruchomienia reszty .
Co do tego usuwania adminów to banał jest. Dodajemy do filtrowania requestów :
i gotowe . Czyż nie trudne ? Po za tym thornag używaj głównego pliku administracyjnego przez który jest jedyna możliwość użycia funkcji ACP etc. . To dodatkowe zabezpieczenie i trochę utrudnia życie, ale warto. Dodatkowa bariera dla włamywacza... -------------------- Jah Music Is On My Mind !
|
|
|
2.08.2006, 15:12:09
Post
#99
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) |
@J4r0d Bardzo prosto się można zabezpieczyć Zastosuj sume kontrolną. jakasstrona/usun.php&id=2&checksum=f3sxSdf32vx3sGx Napisz własny wzór generowania sumy kontrolnej oraz jej sprawdzania. Np.
Generujesz - ok. A w jaki sposób chcesz przetrzymywać tą sume i gdzie? -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
2.08.2006, 22:40:56
Post
#100
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) |
@J4r0d Przecież to jest jeszcze prostsze
Przykład: checksum.php
admin.php
Prościej się wytłumaczyć nie da |
|
|
Wersja Lo-Fi | Aktualny czas: 26.09.2024 - 06:49 |