SQL Injection/Insertion, Jak zapobiec włamaniu na stronę. |
SQL Injection/Insertion, Jak zapobiec włamaniu na stronę. |
3.03.2005, 18:08:48
Post
#21
|
|
Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) |
To o czym piszesz sprawdza sie przy liczbach, natomiast do ciagow znakow trzeba juz inaczej do tego podchodzic.
|
|
|
3.03.2005, 20:40:59
Post
#22
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 3.10.2004 Ostrzeżenie: (0%) |
@krzemian:
Cytat Ostatnio zrobiłem coś takiego na zmiennej $id z GET'a i nawet jeśli dałem id=3fk5 to jeśli zrzutowałem to na (int) otrzymywałem 35. Chyba o to wam chodzi, nie? Ciekawe co piszesz - sprawdź co zwróci skrypt...
A teraz popróbuj:
Pozdrawiam Marcin Staniszczak |
|
|
3.03.2005, 21:23:10
Post
#23
|
|
Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) |
Moze ktos napisze klase, lub zbiór funkcji, alby uniknąc tego typu problemów, tylko ze... tu problem nie polega na tym, co zrobic zeby sprawdzic jaki typ danych user wpisze, tylko raczej na tym jak mądrze napisac zapytanie.
|
|
|
3.03.2005, 23:18:12
Post
#24
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 3.10.2004 Ostrzeżenie: (0%) |
Ja używam czegoś takiego (ma już swoje latka - dodałem tylko public;-):
A plik email.inc.php:
Dalej validuje już w odpowiednich funkcjach - inaczej chyba ciężko;-) Pozdrawiam Marcin Staniszczak Ten post edytował MStaniszczak 3.03.2005, 23:18:45 |
|
|
4.03.2005, 00:18:29
Post
#25
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 2 Dołączył: 21.11.2003 Skąd: Kraków Ostrzeżenie: (0%) |
no to i moje 3 grosze. primo: nie ma to jak szczyt lenistwa:
Kod foreach($_REQUEST as $key => $item) $$key = addslashes($item); mam nadzieje, ze sie podoba oczywiscie nie wszedzie uzyteczne, niekoniecznie optymalne i nie zawsze dzialamy tylko na $_REQUEST. ale mniej wiecej juz znacie geneze mozliwe modyfikacje oczywiscie: Kod foreach($_POST as $key => $item) $_POST[$key] = addslashes($item); itd... zamiast addslashes mozna dac intvalue, albo i obydwa.. jesli nie frunie duzo danych to i tak nie bedzie roznicy w czasie wykonywania skryptu - a nie trzeba z dokladnoscia ksiegowego sprawdzac czy o czyms (czyt. ktorejs zmiennej) nie zapomnielismy pierwsza metoda (dla nei wiedzacych) symuluje niejako Register Globals na On, czyli zamiast odwolywac sie do strval($_REQUEST['zmienna']) mozemy po wykonaniu tamtego odwolac sie po prostu do $zmienna, ktora juz jest sparsowana pod kategm 'nieporzadanej' zawartosci EDIT: dziala oczywiscie i w druga strone. jesli do $rekord zczytamy sobie jakies dane z bazy danych to mozna sobie leniwie wrzucic: Kod foreach($rekord as $key => $item) $rekord[$key] = stripslashes($item); tylko nalezy pamietac, aby czytac dane za pomcoa mysql_fetch_assoc lub row - nie mysql_fetch_array, gdyz wtedy mamy podwojne klucze w tablicy i wiadomo co sie stanie Ten post edytował docent 4.03.2005, 00:21:06 -------------------- "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
(Przydatne zapytania MySQL) |
|
|
4.03.2005, 19:04:20
Post
#26
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) |
@docent: szczerze to zadna nowosc
---- Przez chwilke pomyslalem, ze mozna by zmienne przekazyawc przez: www.site.com?int[postID]=4&string[mode]=showAll&bool[save]=true I robic odpowiednie petle na tablicach, stosujac odpowiednie funkcje -------------------- |
|
|
4.03.2005, 19:08:24
Post
#27
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 3.10.2004 Ostrzeżenie: (0%) |
Cytat Przez chwilke pomyslalem, ze mozna by zmienne przekazyawc przez: www.site.com?int[postID]=4&string[mode]=showAll&bool[save]=true I robic odpowiednie petle na tablicach, stosujac odpowiednie funkcje smile.gif I otrzymali byśmy w GET coś takiego:-) Więc bardzo miło;-) Kod Array ( [int] => Array ( [postID] => 4 ) [string] => Array ( [mode] => showAll ) [bool] => Array ( [save] => true ) ) Pozdrawiam Marcin Staniszczak |
|
|
4.03.2005, 23:48:57
Post
#28
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 2 Dołączył: 21.11.2003 Skąd: Kraków Ostrzeżenie: (0%) |
Cytat(Vengeance @ 2005-03-04 20:04:20) @docent: szczerze to zadna nowosc ---- Przez chwilke pomyslalem, ze mozna by zmienne przekazyawc przez: www.site.com?int[postID]=4&string[mode]=showAll&bool[save]=true I robic odpowiednie petle na tablicach, stosujac odpowiednie funkcje heihei ja nie mowie, ze nowowsc - ale informacja dla tych, ktorzy nie znaja a istotnie - jest pomocna :] bardziej mnie interesowalo zdanie innych na ten temat - sposob w zasadzie sam sobie stwrozylem (choc pewnie kazdy na to wpadl we wlasnym zakresie) i interesowalo mnie tylko zdanie innych w tej kwestii -------------------- "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
(Przydatne zapytania MySQL) |
|
|
2.04.2005, 17:32:31
Post
#29
|
|
Grupa: Zarejestrowani Postów: 147 Pomógł: 0 Dołączył: 3.03.2004 Skąd: śląsk Ostrzeżenie: (0%) |
w sumei można też tak, np. dla newsów:
To blokuje wysiwetlanie newsa np. 9999 jak i tekstu. w zmiennej id. Ten post edytował tara 2.04.2005, 17:33:28 -------------------- MySQL 4.0.15 | PHP 4.3.3 | Apache 1.3.28 | Kwrite | phpMyAdmin 2.5.6-rc1 | Linux MDK 10.1 pp
|
|
|
11.04.2005, 21:05:08
Post
#30
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 13.03.2004 Skąd: Siemianowice Śl. Ostrzeżenie: (0%) |
Cytat To blokuje wysiwetlanie newsa np. 9999 jak i tekstu. w zmiennej id. no dobra, ale to niewiele ma do zabiezpieczenia przed SQL Injection...akurat wyswietlenie newsa nr 99999 nie wprowadza zadej nowej mozliwosci ataku.... wracając do tematu.... http://www.phpsolmag.org/pl/modules/wmpdow...php?cid=1&lid=6 tutaj jest darmowy artykuł z magazynu php solutions -------------------- karczmarczyk.com
|
|
|
11.04.2005, 21:06:48
Post
#31
|
|
Grupa: Zarejestrowani Postów: 147 Pomógł: 0 Dołączył: 3.03.2004 Skąd: śląsk Ostrzeżenie: (0%) |
heh no ale jak ktoś wprawdzi DROP TABLE itp. to też zablokuje
-------------------- MySQL 4.0.15 | PHP 4.3.3 | Apache 1.3.28 | Kwrite | phpMyAdmin 2.5.6-rc1 | Linux MDK 10.1 pp
|
|
|
11.04.2005, 21:33:24
Post
#32
|
|
Grupa: Zarejestrowani Postów: 193 Pomógł: 0 Dołączył: 14.09.2003 Skąd: Brodnica (koło Torunia) Ostrzeżenie: (0%) |
Cytat(MStaniszczak @ 2005-02-28 04:21:48) Hmmm.... wykonanie ereg zajmuje nieco czasu (jak to wyrażeń regularnych). [...] Szczerze mówiąc, to wolę stracić tą sekundę w czasie wykonywania skryptu niż stracić na bezpieczeństwie. I mniejszy bałagan w kodzie - jedna funkcja zamiast szeregu IF. A wyrażenie regularne można w razie czego łatwo zmodyfikować jeśli się znajdzie błąd. -------------------- |
|
|
29.04.2005, 07:47:36
Post
#33
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 29.04.2005 Ostrzeżenie: (0%) |
IMHO dosc wygodna i bezpieczne rozwiazanie:
a potem definiujemy swoje funckje sprawdzajace
a wykoanie zapytania np tak:
I w ten sposob nawet przy braku magic quotes czy tez mozliwosci wielu zapytan w jednemy poleceniu, nikt nie przepcha zadnego zlosliwego kodu. Ten post edytował tarlandil 29.04.2005, 07:50:11 |
|
|
8.05.2005, 17:11:33
Post
#34
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) |
Cytat(Vengeance @ 2005-02-27 13:44:07) przez mysql_query() nie. ale funckje postgreSQL już to dopuszczają :/ Dlatego userzy tego drugiego mają większy problem. Co do zabezpieczenia, nie wiem czym się tak przejmujecie? ;] Ja stosuje jedynie addslashes() oraz usuwam slowo 'UNION' ze zmiennych Cytat przez mysql_query() nie. ale funckje postgreSQL już to dopuszczają :/ Dlatego userzy tego drugiego mają większy problem. A jak go rozwiązać? Cytat Co do zabezpieczenia, nie wiem czym się tak przejmujecie? ;] Ja stosuje jedynie addslashes() oraz usuwam slowo 'UNION' ze zmiennych Przecież addslashes() to tosamo co mysql_escape_string() -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
8.05.2005, 17:35:35
Post
#35
|
|
Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) |
Cytat(J4r0d @ 2005-05-08 17:11:33) Cytat(Vengeance @ 2005-02-27 13:44:07) przez mysql_query() nie. ale funckje postgreSQL już to dopuszczają :/ Dlatego userzy tego drugiego mają większy problem. Co do zabezpieczenia, nie wiem czym się tak przejmujecie? ;] Ja stosuje jedynie addslashes() oraz usuwam slowo 'UNION' ze zmiennych Cytat przez mysql_query() nie. ale funckje postgreSQL już to dopuszczają :/ Dlatego userzy tego drugiego mają większy problem. A jak go rozwiązać? Cytat Co do zabezpieczenia, nie wiem czym się tak przejmujecie? ;] Ja stosuje jedynie addslashes() oraz usuwam slowo 'UNION' ze zmiennych Przecież addslashes() to tosamo co mysql_escape_string() 1. np. mozna przefiltrowac ciag wyrzucajac wszelkie sredniki 2. funkcja nie sa sobie rownoznaczne mysql_real_escape_string() calls MySQL's library function mysql_escape_string, which prepends backslashes to the following characters: NULL, \x00, \n, \r, \, ', " and \x1a. addslashes() : Returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte). -------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
8.05.2005, 17:46:29
Post
#36
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 2 Dołączył: 3.12.2004 Ostrzeżenie: (0%) |
Cytat(J4r0d @ 2005-05-08 16:40:02) Więc, które rozwiązanie bezpieczniejsze? Stosować addslashes() ? Nie rozumiem o co Wam chodzi z tym addslashes(). Czy chodzi o podwójne stosowanie addslashes()? Raz przecież robi to samo php. Otrzymując dane z formularzy dostajemy postać: To jest \"smaczny deser\" Czy trzeba to jeszcze raz potraktować addslashes() i otrzymać: To jest \\\"smaczny deser\\\" i dopiero wtedy wrzucać do bazy? Już od dawna mnie frapuje ten problem czy może ktoś to wyjaśnić? |
|
|
8.05.2005, 17:48:08
Post
#37
|
|
Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) |
addslashes() (jeden raz!!!) powinno w zupelnosci wystarczyc. przy sotsowaniu mysql_escape_string moze sie pojawic porblem przy wyciganiu danych z bazy i stosowaniu stripslashes()
-------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
8.05.2005, 17:49:40
Post
#38
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 7.05.2005 Ostrzeżenie: (0%) |
Smieszne sa te wasze rozwazania, nie szkoda czasu?
Przypomina mi to wiare w zabobony. Addslashes zalatwia calkowice sprawe, sprobujcie sie wlamac bez mozliwosci uzycia apostrofu. Mozecie wpisywac UNION, srednik i co tylko chcecie, ale to nic nie da, bo i tak co najwyzej zostanie wciagniete do bazy jako czesc stringa. Do liczb is_numeric i wystarczy. |
|
|
8.05.2005, 17:56:50
Post
#39
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) |
Cytat Nie rozumiem o co Wam chodzi z tym addslashes(). Czy chodzi o podwójne stosowanie addslashes()? Chodzi o to, że slash dodawany jest jeżeli włączona jest jakaś opcja (już nie pamiętam o jaką chodziło - szukaj na pierwszej stronie tego topicu). A jak dodadsz addslashes() to nawet jak dodawanie slasha jest wyłączone to ty massz pewność. Cytat Smieszne sa te wasze rozwazania, nie szkoda czasu? Przypomina mi to wiare w zabobony. Bezpieczeństwo - szkoda czasu? Nie dla mnie :roll2: Cytat Addslashes zalatwia calkowice sprawe, sprobujcie sie wlamac bez mozliwosci uzycia apostrofu. Mozecie wpisywac UNION, srednik i co tylko chcecie, ale to nic nie da, bo i tak co najwyzej zostanie wciagniete do bazy jako czesc stringa. Do liczb is_numeric i wystarczy. Skoro tak mówisz to będę tak robił. Jaby co to wiemy do kogo z pretensjami Dziękuje za odpowiedź i pozdrawiam -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
8.05.2005, 18:43:03
Post
#40
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 7.05.2005 Ostrzeżenie: (0%) |
Cytat(J4r0d @ 2005-05-08 16:56:50) Bezpieczeństwo - szkoda czasu? Nie dla mnie :roll2: A co z bezpieczenstwem ma wspolnego kasowanie ciagow typu UNION ze zmiennej, w ktorej i tak kazdy apostrof zostanie wysleszowany? Nic. addslash lub magic quote zalatwia calkowicie sprawe sql injection, oczywiscie pozostaje sprawdzenie czy nadeslane dane mieszcza sie w dozwolonym zakresie, ale to juz inna historia. Ten post edytował Peter Riley 8.05.2005, 18:45:39 |
|
|
Wersja Lo-Fi | Aktualny czas: 27.09.2024 - 07:34 |