Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sql injection
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
fiszol
Witam, całe sql injection to dla mnie nowość, jednak zdażyło mi się już przez to oberwać (a raczej mojej bazie), czy istnieje jakiś skuteczny i prosty sposób któy pozwoli się zabezpieczyć przed tym świństwem ?

korzystam z mssql 2000 enterprise edition i php 4.3 .

z góry dzięki za pomoc.

dodam że w manualu php nie znalazłem czegoś takiego jak mssql_escape_string ;p
Jabol
po 1. Trzeba mądrze pisać kod.
po 2. Jeżeli nie ma takiej funkcji to możesz poczytać dokumentacje, zobaczyć, które znaki są groźne i sam napisać sobię funkcję je osłabiającą.
Adam Boduch
Przede wszystkim nalezy uwazac na dane pochodzace od usera, walidowac informacje pochodzace nawet z ciastka. Np. jezeli odczekujesz iz klucz 'id' z tablicy $_GET ma byc typu int korzystaj z rzutowania - np.

$post_id = (int)$_GET['id'];

albo:

$post_id = intval($_GET['id']);

W razie gdy id bedzie lancuchem rzutowanie przypisze do $post_id - 0.

Jezeli mamy do czynienia z lancuchami, nalezy parsowac dane, usuwajac znaki -- %20 ' "
pauluZ
Taaak....
Podsumowując:

Cytat
Aby zmniejszyć ryzyko ataku typu SQL injection, warto przestrzegać kilku zasad:
  • Dane pochodzące z zewnątrz aplikacji powinny być filtrowane
  • Przy nadawaniu uprawnień należy stosować zasadę najmniejszych przywilejów
  • Precyzyjne określenie funkcji dostępnych użytkownikowi za pośrednictwem interfejsu
  • W środowisku aplikacji nie powinno być żadnych zbędnych do jej działania plików
emitra
Proboje poznac zasade działania sql injection.. dzieki temu latwiej pozniej unikac pewnych bledow.

Mam kod:
xxx.php
  1. <?
  2. include &#092;"otwieracz.php\";//laczymy sie z baza
  3. $query = &#092;"SELECT * from test WHERE (x = '$x') \";
  4. print &#092;"$query<BR>\";
  5. mysql_query ($query); 
  6. ?>


teraz w przegladarce podaje: http://localhost/sqlinjection/xxx.php?x=Imie

no i wszystko ok print wywala mi na stronke:

SELECT * from test WHERE (x = 'Imie')

Teraz chcialem przetestowac jedno z mozliwosci sql injection i zmusic by skrypt skasowal tabele o nazwie "tabela" w tej bazie danych pisze wiec taki adres w przegladarce:
http://localhost/sqlinjection/xxx.php?x=imie'); DELETE FROM tablica;--
http://localhost/sqlinjection/xxx.php?x=imie'); DELETE%20FROM%20tabela;--

w wyniku czego print wywala mi na ekran:

SELECT * from test WHERE (x = 'imie'); DELETE FROM tablica;--')

i wg materialow ktore czytalem powinno to poswodowac skasowanie zawartosci tablicy "tablica" niestety jednak tablica jest niezmieniona...

Gdy to co mi wyswietlil print wykonam recznie w bazie danych w mysqlu to bardzo sie tnie maszyna moja procesora uzycie rosnei znacznie na proces php.exe ;]

Natomiast gdy zastapie -- hashem # w bazie wszystko wykonuej sie jak nalezy.

I teraz pytanie co robie zle bo sadze ze taki prosty skrypt napewno jest podatny na sql injection...

Pozdrawiam cieplutko
Emitra
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.