SQL Injection/Insertion, Jak zapobiec włamaniu na stronę. |
SQL Injection/Insertion, Jak zapobiec włamaniu na stronę. |
30.05.2009, 13:10:33
Post
#241
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
Cytat Czy to było niebezpieczne? Jeśli nie filtrujesz danych wejściowych, to jest niebezpieczne. Jeśli filtrujesz, nie przejmuj się; chyba każdą stronę skanują boty poszukujące dziur. ;] -------------------- ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
30.05.2009, 17:06:09
Post
#242
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 19.03.2009 Skąd: Warszawa Ostrzeżenie: (0%) |
Co sądzicie o tym: http://hacking.pl/5845
Czy coś takiego wystarczy? |
|
|
30.05.2009, 20:46:50
Post
#243
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
A chociaż przeczytałeś ten wątek od początku...?
-------------------- ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
14.06.2009, 15:08:58
Post
#244
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 27.12.2006 Ostrzeżenie: (0%) |
ostatnich kilka dni przesiedziałem na szukaniu dobrego i skutecznego sposobu zabezpieczenia się przed SQL injection, jednak nic na prawdę konkretnego nie znalazłem;/
pewnie ameryki nie odkryłem, do optymalnych sposobów to nie należy, ale po połączeniu pomysłów z kilku stron oraz fragmentów kodów z tego forum powstało coś takiego:
osobiście widzę w tym jeden plus, bo po pierwszej próbie włamania dany użytkownik/bot jest banowany, komunikat o tym jest wysyłany do mnie, a w razie gdyby zaszła pomyłka mogę zdjąć bana z danego użytkownika. Cała strona którą teraz piszę jest dostępna dopiero po zalogowaniu więc goście nie będą mogli nic nabroić(teoretycznie). geniuszem nie jestem jeśli chodzi o php, dopiero zaczynam w tym zabawę, ale pytanie: czy ten kod jest dość bezpieczny? ciężko będzie to obejść? Pozdrawiam Fantome:) |
|
|
15.06.2009, 10:02:52
Post
#245
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
Cytat ostatnich kilka dni przesiedziałem na szukaniu dobrego i skutecznego sposobu zabezpieczenia się przed SQL injection, jednak nic na prawdę konkretnego nie znalazłem;/ A chociaż przeczytałeś cały ten wątek...? -------------------- ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
15.06.2009, 11:01:05
Post
#246
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 27.12.2006 Ostrzeżenie: (0%) |
żeby tylko ten... ze 2 dni temu to czytałem i postanowiłem szukać dalej... jest sporo pomysłów i rozwiązań w tym temacie, ale nikt nie potwierdził, że któreś z podanych zabezpiecza stronę w 100%...
|
|
|
15.06.2009, 11:11:28
Post
#247
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
A wiesz o tym, że na nic nie ma 100% zabezpieczenia?
-------------------- ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
15.06.2009, 11:20:18
Post
#248
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 27.12.2006 Ostrzeżenie: (0%) |
zdaję sobie z tego sprawę jednak staram się wyeliminować jak najwięcej dziur w tym co piszę
pozdrawiam Fantome |
|
|
15.06.2009, 11:28:11
Post
#249
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
Jeśli wprowadzisz to, o czym mowa w tym wątku, nie powinno być problemu.
Zresztą, od tego są beta-testy, aby wyeliminować błędy. [; -------------------- ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
20.06.2009, 09:05:08
Post
#250
|
|
Grupa: Zarejestrowani Postów: 405 Pomógł: 6 Dołączył: 12.01.2007 Ostrzeżenie: (0%) |
Fantome nie banuj po IP - w ten sposób podczas szukania czegoś w google odkryłem już dwa fora internetowe, na których jestem zbanowany po IP a w życiu się tam nie rejestrowałem :/
|
|
|
20.06.2009, 11:17:48
Post
#251
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
To raczej nie wina forum, a tego, że IP trafiło prawdopodobnie do kogoś, kto ma PC-zombie.
A z tego, co pamiętam, to TP wykupiła kiedyś pulę IP dla neozdrady, która była wcześniej intensywnie wykorzystywana do włamów. [; -------------------- ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
27.06.2009, 20:22:27
Post
#252
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
Tak się zastanawiam...
jeśli strona ma geta np id=1, jeśli dopiszemy mu 1' sql /* to nie zareaguje, ale jeśli mu dam id=aaa to wypluje warning ... czy taka strona jest podatna na sql injection ? Pytam bo widzę taką stronkę i zastanawiam się czy zawracać gitarę adminowi , dodatkowo ciekawość |
|
|
27.06.2009, 21:39:56
Post
#253
|
|
Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) |
ale jeśli mu dam id=aaa to wypluje warning ... czy taka strona jest podatna na sql injection ? Tak. Jeśli dla stringa wypluwa warninga to wielce prawdopodobne jest, że zapytanie jest zbudowane tak:
Integery nie muszą być w cudzysłowiach, natomiast stringi tak. A np. zapytanie
nie wywołuję błędu bo po stronie php są wykrywane pewne niebezpieczne ciągi np. sekwencja "/*" i zmienna jest ignorowana etc. Jednoznacznie nie da się określić czy taka strona jest podatna na jakiś atak z grupy SQLI. Ja sprawdziłbym ataki typu DoS z grupy SQLI. Sprawdzałbym inne wejścia bo raczej podane przez Ciebie jest popularne. Taka wskazówka, każdy atak SQLI zaczyna się od wydedukowania zapytania. -------------------- Moja gra - scraby.io
|
|
|
-lukasamd- |
28.06.2009, 13:59:21
Post
#254
|
Goście |
Mam pewne pytanie, odnośnie wypowiedzi erixa dotyczącej mysql_escape_string:
Cytat Ta funkcja może Ci rozwalić znaki przy korzystaniu z wielobajtowych kodowań Kiedy może się coś takiego stać? Powiedzmy że przez $_POST idzie ciąg, po którym szukam czegoś w bazie w polu typu varchar. Ciąg z założenia powinien być obrobiony tzn. bez znaków diaktrycznych itp. więc nie muszę się martwić o problemy z nimi. Chodzi o to, że mysql_real_escape_string działa znacznie wolniej niż wersja bez sprawdzania charsetu. |
|
|
28.06.2009, 21:26:21
Post
#255
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
Np. przy korzystaniu z UTF-8.
Wszystko jest przecież napisane: Cytat does not take a connection argument and does not respect the current charset setting. A tak poza tym, dla mysql_escape_string" title="Zobacz w manualu PHP" target="_manual: Cytat This function is deprecated.
-------------------- ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
14.07.2009, 16:05:12
Post
#256
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 6.05.2008 Ostrzeżenie: (0%) |
A wiesz o tym, że na nic nie ma 100% zabezpieczenia? Hej, Już raz wspominałem o zastosowaniu zmiennych związanych, ale jakoś widzę wątek dalej rozwija się w stronę doktoryzacji nad zupełnie prostym problemem. W telegraficznym skrócie: Zmienne związane mają 2 główne zastosowania: 1) optymalizacja działania aplikacji poprzez jednokrotną interpretację zapytania, a w każdym następnym jego uruchomieniu tylko podmienianie samych danych. MySQL optymalizuje sobie niestety takie zapytanie tylko w obrębie sesji. Inne bazy takie jak ORACLE przechowują plan wykonania zapytania. 2) Oddzielenie treści zapytania od parametrów załatwia przy okazji właśnie problem MySQL Injection. W zasadzie w 100% ponieważ dane nie wpływają na treść zapytania, która już wcześniej została sparsowana. Przykład SQLa:
takie zapytanie parsuje sobie baza, a dopiero potem przekazujemy (bindujemy) wartość zmiennej "parametr". Jeszcze raz link do manuala PHP: PDO::prepare oraz jak kto woli: mysqli_prepare Oczywiście warunkiem jest PHP5 oraz MySQL 4.1, ale to chyba już w tej chwili standard. |
|
|
25.11.2009, 13:07:53
Post
#257
|
|
Grupa: Zarejestrowani Postów: 141 Pomógł: 1 Dołączył: 2.12.2008 Ostrzeżenie: (0%) |
Z tego co zauważyłem to ile osób tyle rozwiązań przed tego typu atakami. A jeżeli ktoś opracuje jakiś uniwersalny kod - to posypie się sporo wypowiedzi negatywnych. Wiec z tego nasuwa się jeden wniosek, jakie zabezpieczenie by nie było i tak nie jest dobre.
Z tego co czytałem ten wątek i jemu podobne w sieci. To nasuneły mi sę takie spostrzeżenia: Przed atakami XSS najlepiej się bronić stosując htmlspecialchars lub htmlentities - dla danych wyświetlanych (np z BD). Natomiast przed SQL Injecton, to albo zapoznać się z jakimś interfejsem np PDO i konstruować zapytania w stylu prepare, execute. Ale jeżeli ktoś chce zostać przy standardowym konstruowaniu zapytań do BD (np nie chce mu się przebudowywać istniejącego serwisu pod PDO), to czy nie wystarczy dane (zewnętrzne) czy to z POST czy GET poddawać najpierw np htmlentities potem zastosować sprawdzanie wyrażeniami regularnymi (lub stosować funkcje ctype, is_numeric itp.), a na końcu w zapytaniu do BD zastosować mysql_real_escape_string Jest wiele opini na temat czy to htmlentities, addslashes, strip_tags. Ale które nalepsze? strip_tags - wycina(eliminuje) znaczniki HTML, - nie warty zachodu, jeżeli dane które mają być przetworzone, zapisane w BD a potem wyświetlane w serwisie (stracą formatowanie). - jednak są sytuacje w których może się przydać. addslashes - Dodaje znak ucieczki przed znakami niebezpiecznymi jak: apostrof, cudzysłów, backslash i NUL htmlentities - konwertuje wszystkie znaki HTML na encje, gdzie htmlspecialchars tylko znaki specjalne. Wiec jeżęli ciag zostanie przeformatowany przez htmlentities - to spokonie można sprawdzić np wyrażeniami regularnymi czy zawiera to co powinnien i odpowiednią długość znaków, a następnie przekazać do bazy danych. Ale czy warto wtedy stosować mysql_real_escape_string? - moim zdaniem warto na wypadek gdy wyrażenia regularne nie będą zbyt ścliśle określone i przepuszczą coś w stylu UNION, SELECT ... Wówczas jeżeli dobrze rozumie powyższa komenda to wyeliminuje. Ale nie jestem specem w tej dziedzinie i miło mi będzie jeżeli ktoś to sprostuje. |
|
|
25.11.2009, 13:42:16
Post
#258
|
|
Grupa: Zarejestrowani Postów: 300 Pomógł: 32 Dołączył: 31.07.2006 Ostrzeżenie: (0%) |
Wszystkie pytania o SQL Injection powinny się kończyć jednym zdaniem: "Używaj prepared statements, lub jeśli uważasz, że nigdy nie zapomnisz tego zrobić, dodawaj znaki ucieczki odpowiednie dla twojej bazy". Koniec, kropka. Podobnie XSS - "usuwasz cały html albo escape podczas wyświetlania".
Tymczasem w tym wątku co chwila pojawiają się jakieś dziwne pomysły, które co najwyżej wprowadzają zamieszanie i w sumie nie wiem czemu ten wątek ma służyć. Może lepiej przyciąć to do jednego postu z informacją co i jak i tylko go zostawić przypiętym? |
|
|
30.12.2009, 21:58:11
Post
#259
|
|
Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) |
Zgadzam się. Jak czytam niektóre z tych wymysłów to aż głowa boli. Potem się przyszła ekipa źle nauczy.
|
|
|
30.12.2009, 22:32:03
Post
#260
|
|
Grupa: Zarejestrowani Postów: 690 Pomógł: 81 Dołączył: 6.04.2005 Skąd: Szczecin Ostrzeżenie: (0%) |
Wszystkie pytania o SQL Injection powinny się kończyć jednym zdaniem: "Używaj prepared statements" ja bym dodał świadomie bo korzystając z PS też można dać ciała -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 17:29 |