Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

22 Stron V  « < 17 18 19 20 21 > »   
Reply to this topicStart new topic
> SQL Injection/Insertion, Jak zapobiec włamaniu na stronę.
kuba32
post
Post #361





Grupa: Zarejestrowani
Postów: 26
Pomógł: 2
Dołączył: 8.09.2010

Ostrzeżenie: (0%)
-----


Witam, chciałbym się dowiedzieć czy mając włączone magic_quotes na serwerze i zapytanie sformułowane w taki sposób: "SELECT * FROM tabela WHERE id='$id'" jest możliwość wstrzyknięcia niechcianego zapytania (brak jakiejkolwiek filtracji danych)? Jeżeli tak (a zapewne tak jest) to w jaki sposób atakujący może tego dokonać?

Pozdrawiam
Go to the top of the page
+Quote Post
drozdii07
post
Post #362





Grupa: Zarejestrowani
Postów: 254
Pomógł: 39
Dołączył: 6.12.2010
Skąd: localhost

Ostrzeżenie: (0%)
-----


magic_quotes to najgorsze co może być.. Wyłącz to i napisz swoją walidację a nie jakieś cuda (IMG:style_emoticons/default/smile.gif) Nie jestem pewien ale chyba da się bez problemów włamać nawet z magic_ - Jeśli się mylę, poprawcie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kuba32
post
Post #363





Grupa: Zarejestrowani
Postów: 26
Pomógł: 2
Dołączył: 8.09.2010

Ostrzeżenie: (0%)
-----


No właśnie niby mówi się, że magic_quotes jest ble i fuj, ale szukałem sposobów na jego obejście no i jakoś nie znalazłem (być może źle po prostu szukałem), więc jak na razie jedyne zagrożenie które dostrzegam w jego użytkowaniu to po prostu problemy kiedy swoją aplikacje będziemy musieli przenieś na serwer na którym magic_quotes jest wyłączone.

Pozdrawiam, mam nadzieję że ktoś będzie potrafił mnie uświadomić dlaczego magic_quotes to zło
Go to the top of the page
+Quote Post
erix
post
Post #364





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
kiedy swoją aplikacje będziemy musieli przenieś na serwer na którym magic_quotes jest wyłączone.

Albo gdy będziesz płakać, gdy w końcu z PHP to wyrzucą (bo obiło mi się o uszy, że są takie plany).

Cytat
Pozdrawiam, mam nadzieję że ktoś będzie potrafił mnie uświadomić dlaczego magic_quotes to zło

http://en.wikipedia.org/wiki/Magic_quotes

Mam nadzieję, że ludzie kiedyś nauczą się korzystać z wyszukiwarek i tego, co mają pod nosem.
Go to the top of the page
+Quote Post
henio
post
Post #365





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Chciałbym dowiedzieć się czy używanie PDO i metod prepare(), execute() jest bezpieczne z punktu widzenia SQL Injection? Czy mimo to warto używać add/stripslashes
Go to the top of the page
+Quote Post
fr33d0m
post
Post #366





Grupa: Zarejestrowani
Postów: 132
Pomógł: 4
Dołączył: 22.10.2010

Ostrzeżenie: (0%)
-----


Przeczytałem cały temat i zastanawia mnie dlaczego nie pojawiło się filtrowanie $_GET, $_POST etc. przy pomocy array_map funkcją htmlspecialchars, trim i mysql_real_escape_string. Takie filtrowanie jest bardzo skuteczne i nawet jeśli zapytanie do bazy jest źle skonstruowane i nie filtrowane, takie jak poniżej to potencjalny hacker nic nie zdziała.
  1. $sql = mysql_query(SELECT * FROM news WHERE id=$_GET['id']);



Oczywiście dla pewności należy przy tym pamiętać o poprawnych typach kolumn w SQL i mimo wszystko rzutowaniu na (int), sprawdzaniu długości (substr) i dla szerszej ochrony wykrywanie przedwcześnie zalogowanych kont, które szukają dziur.

Poza tematem via msg, to chętnie wymienię się informacją jak ominąć filtr mysql_real_escape_string za ominięcie is_numeric - wiem że się da.
Go to the top of the page
+Quote Post
SHiP
post
Post #367





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


O ile w normalnych warunkach wszystko jest ok to jeżeli sprzedajemy aplikację chinczykowi to może być już problem. Zróbcie sobie bazę z kodowaniem i sprawdzcie taki kodzik:

  1. <?php
  2. date_default_timezone_set('Europe/Warsaw');
  3. if(!empty($_GET))
  4. {
  5. $db = new mysqli('localhost', 'uzytkownik', 'haslo', 'nazwa_bazy');
  6. $db -> set_charset('big5'); // kodowanie bazy big5!!
  7.  
  8. $login = addslashes($_GET['login']);
  9. $password = addslashes($_GET['password']);
  10.  
  11. $result = $db->query('SELECT * FROM users WHERE login="'.$login.'" AND password=MD5("'.$password.'")');
  12.  
  13. if($row = $result->fetch_assoc())
  14. {
  15. print_r($row);
  16. }
  17. }
  18. ?>


Teraz w adresie wystarczy podać np.

Kod
http://localhost/testsql.php?login=admin%f4%22+OR+1=1+--&password=qwerty


Efekt:
  1. SELECT * FROM users WHERE login="admin?" OR 1=1 --" AND password=MD5("qwerty")


Sytuacja wygląda analogicznie z mysql_real_escape_string() - w koncu to prawie identyczna funkcja jak addslashes

@fr33d0m: jeślichcesz, to mogę wysłać Ci przez msg listę kodowań i wytłumaczenie dlaczego jest tak a nie inaczej.

Pozdro

Ten post edytował SHiP 13.10.2011, 12:15:47
Go to the top of the page
+Quote Post
fr33d0m
post
Post #368





Grupa: Zarejestrowani
Postów: 132
Pomógł: 4
Dołączył: 22.10.2010

Ostrzeżenie: (0%)
-----


Nie zagłębiam się aż tak w inne kodowanie niż europejskie bo jest mi to nie potrzebne. Aby zapobiec i zrozumieć SQL Injection/Insertion trzeba zawężyć krąg kodowań do naszych rodzimych, które są często używane bo nowym userom przez przykład kodowania z Chin można tylko w głowie zamieszać.



---edit:
@SHiP
Wierzę na słowo, że przy zabezpieczeniu kodowań wszystkich znaków świata trzeba mieć głowę na karku. (IMG:style_emoticons/default/smile.gif)
Potrafię pominąć mysql_real_escape_string. A swoją drogą to z matematyki miałem 5 więc doskonale wiem dlaczego jest tak, jak jest w kodowaniu Chińskim. (IMG:style_emoticons/default/wink.gif)

Ten post edytował fr33d0m 13.10.2011, 12:40:22
Go to the top of the page
+Quote Post
SHiP
post
Post #369





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Chodziło mi o przedstawienie przykładu, który pokaże, że używanie metod typu addshasles() to pomyłka. Problem chińskiego kodowania nie jest trywialny. Pisząc dużą aplikację(np. taki wordpress) należy wziąć pod uwagę, że będą z niej korzystać Azjaci z kodowaniami bogatymi w różne fajne znaczki.

PS: co do Twojej propozycji. Umiesz złamać mysql_real_escape_string() czy is_numeric() ? Bo nie wiem co, za co chcesz się wymieniać
Go to the top of the page
+Quote Post
pyro
post
Post #370





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(SHiP @ 13.10.2011, 12:11:06 ) *
Sytuacja wygląda analogicznie z mysql_real_escape_string() - w koncu to prawie identyczna funkcja jak addslashes


A to akurat nieprawda, bo mysql_real_escape_string() zwraca uwagę na kodowanie
Go to the top of the page
+Quote Post
cudny
post
Post #371





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Cytat(pyro @ 4.11.2011, 17:46:58 ) *
A to akurat nieprawda, bo mysql_real_escape_string() zwraca uwagę na kodowanie

A tu też nie do końca jest pięknie z tym kodowaniem mysql_real_escape_string(); (IMG:style_emoticons/default/biggrin.gif)

http://forum.php.pl/index.php?s=&showt...st&p=911748
Go to the top of the page
+Quote Post
pyro
post
Post #372





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(cudny @ 5.11.2011, 12:00:35 ) *
A tu też nie do końca jest pięknie z tym kodowaniem mysql_real_escape_string(); (IMG:style_emoticons/default/biggrin.gif)

http://forum.php.pl/index.php?s=&showt...st&p=911748


No akurat jest, bo na MySQL5 (chyba 5.0.23, nie szukałem) to już nie działa. A jak ktoś ma zamiar korzystać z MySQL4 to nie ma po co się babrać z omijaniem filtrów bo jest kilka innych exploitów na tak starą wersję pozwalającą na zdalne wykonanie kodu.

Ten post edytował pyro 5.11.2011, 20:49:06
Go to the top of the page
+Quote Post
ficiek
post
Post #373





Grupa: Zarejestrowani
Postów: 28
Pomógł: 1
Dołączył: 9.09.2011
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Jest prosty sposób na szybkie wyczyszczenie danych w razie włączonych magic_quotes (w wypadku gdy nie możemy go wyłączyć).

  1. <?php
  2. function stripslashes_gpc(&$value)
  3. {
  4. $value = stripslashes($value);
  5. }
  6. array_walk_recursive($_GET, 'stripslashes_gpc');
  7. array_walk_recursive($_POST, 'stripslashes_gpc');
  8. array_walk_recursive($_COOKIE, 'stripslashes_gpc');
  9. array_walk_recursive($_REQUEST, 'stripslashes_gpc');
  10. }
  11. ?>
Go to the top of the page
+Quote Post
cudny
post
Post #374





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Cytat(pyro @ 5.11.2011, 20:48:46 ) *
No akurat jest, bo na MySQL5 (chyba 5.0.23, nie szukałem) to już nie działa. A jak ktoś ma zamiar korzystać z MySQL4 to nie ma po co się babrać z omijaniem filtrów bo jest kilka innych exploitów na tak starą wersję pozwalającą na zdalne wykonanie kodu.


Nie chcę tutaj polemizować na ten temat bo nie mogę znaleźć info. na ten temat. Masz jakieś linki ?
Go to the top of the page
+Quote Post
pyro
post
Post #375





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(cudny @ 7.11.2011, 23:45:47 ) *
Nie chcę tutaj polemizować na ten temat bo nie mogę znaleźć info. na ten temat. Masz jakieś linki ?


Linki do czego? Mam 3 wersje MySQL5+ i na żadnym z nich nie działa to co opisał tamten użytkownik na blogu.
Go to the top of the page
+Quote Post
fernet
post
Post #376





Grupa: Zarejestrowani
Postów: 91
Pomógł: 1
Dołączył: 22.03.2007

Ostrzeżenie: (0%)
-----


Temt SQL Injection/Insertion nigdy mnie nie dotyczyl ale jesli nad tym sie zastanowic to porzadna kontrola tresci zalatwia sprawe w 70% a jak to komus to nie wystarcza to tak jak na ssl kazda strona ma swoj super tajny klucz to niech i akcja na bazie bedzie miala swoj super tajny klucz. Przed akcja z baza jakies autorskie fikumiku na tresci a podczas odczytywania mikufiku i pozamiatane. Wtedy nawet przegladanie phpMyAdmin nikomu nic nie da co prawda bedze mogl w ramach akcji protestu skasowac cala baze danych ale od czego jest backup.
Go to the top of the page
+Quote Post
sebekzosw
post
Post #377





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


takie pytanie - dane filtrować mysql_real_escape_string przed dodaniem do bazy czy zaraz po odebrania formularza? chodzi oto, że między tymi akcjami mam jeszcze sprawdzanie czy coś zostało podane, weryfikacja np meila i inne weryfikacje. stąd to pytanie.

bo ocenie robię to po odebraniu formularza:
  1. $title= isset($_POST['title']) ? $sql->html($_POST['title']) : '';
  2.  
  3. if(empty($title))
  4. $form['info'] .= 'Wpisz tytuł podstrony'."\n";
  5.  
  6. //zapytanie dodajace wpis do bazy

Go to the top of the page
+Quote Post
nospor
post
Post #378





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przeczytaj do czego służy mysql_real_escape_string a poznasz odpowiedź na swoje pytanie.
Go to the top of the page
+Quote Post
szymon1215
post
Post #379





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 22.09.2011

Ostrzeżenie: (0%)
-----


Użycie PDO w następujący sposób
  1. $pdo = new PDO("mysql:host=localhost;dbanme=xxx", "root", "");
  2. $zap = $pdo->prepare("INSERT INTO `uzytkownicy` (`login`, `haslo`, `email`) VALUES(:login, :haslo, :email)");
  3. $zap->bindValue(":login", $_POST['login'], PDO::PARAM_STR);
  4. $zap->bindValue(":haslo", $_POST['haslo'], PDO::PARAM_STR);
  5. $zap->bindValue(":email", $_POST['email'], PDO::PARAM_STR);
  6. $zap->execute();
  7. $zap->closeCursor();

jest wystarczającym zabezpieczeniem?
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #380





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


Tak.
Go to the top of the page
+Quote Post

22 Stron V  « < 17 18 19 20 21 > » 
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 23:21