Wiadomości

Automatyczne zabezpieczanie kodu PHP

18 czerwca 2010 16:33,
Paweł Krawczyk

Trójka pracowników naukowych z Uniwersytetu Illinois stworzyła narzędzie, które automatycznie konwertuje kod źródłowy w PHP używający "sklejanych" zapytań SQL na znacznie bezpieczniejsze zapytania używające wyrażeń prekompilowanych (prepared statement). Wszystko po to, by chronić aplikacje przed atakami SQL Injection.

Autorzy nie obiecują cudów, ale program TAPS (Tool for Automatically Preparing SQL queries) daje sobie całkiem nieźle - zaletą jest fakt, że na wejściu przyjmuje bezpośrednio kod PHP z osadzonymi zapytaniami SQL.

Na przykład weźmy taki kod napisany z użyciem "sklejanego" SQL:

function test1()
{
$a = $_GET['user'];
$query = "delete from test1 where u = '".$a."'";
@mysql_query($query);
}

Dostępne na stronie TAPS przekonwertuje go na następujące PHP z wyrażeniami prekompilowanymi:

function test1()
{
$a = $_GET['user'];
$query__args = $a ;
$query = "delete from test1 where u = ?" ;
executePS( query , query__args );
}

Powyższy kod co prawda chroni przed SQL injection w scenariuszach testowych ale nie należy go traktować jako wyroczni co najmniej z dwóch powodów.

Po pierwsze, użycie wyrażeń prekompilowanych znacznie utrudnia ale nie zawsze ochroni przed SQL injection w szczególnie złożonych przypadkach.

Po drugie, zaprezentowany powyżej kod to wręcz zaproszenie do ataku Cross-Site Scripting (XSS), którego autorzy w danej implementacji w ogóle nie biorą pod uwagę.

Biorąc powyższe pod uwagę w żadnym wypadku nie należy rezygnować z bogatej biblioteki funkcji filtrujących dostępnej w PHP. Opis ich użycia można znaleźć w artykule Jak bezpiecznie pisać aplikacje webowe. O innych atakach można przeczytać w artykule Kto zagraża bazom danych?.

Szczegóły implementacji TAPS opisane są w artykule autorów zatytułowanym Automatically Preparing Safe SQL Queries.
Oryginalny tekst został opublikowany na www.securitystandard.pl
Ocena:
Twoja ocena:

Komentarze (4)

~Paweł Krawczyk

20-06-2010 20:38

Oryginalnie w artykule był jeden z ostatnich przykładów TAPS, który zapisywał dane do bazy i brał dane bezpośrednio z _GET. W tej sytuacji byłby to doskonały wektor do stored XSS. Później zmieniłem przykład na prostszy z DELETE więc faktycznie straciło to sens.

~Gość

19-06-2010 15:43

A znacznie ważniejsza może być obrona przed specyficznym atakiem czyli Antyforgery. Pozatym php, nawewt tworzone pod kompletnym Zend, to niestety nie ten świat, bo wystarcza tylko dla produktów nieodpowiedzialnych - inaczej za duży wysiłek w walkę z językiem i zaszłościami.

~vii

19-06-2010 11:14

jeszcze by się przydało autorowi poznać co to XSS, bo coś chyba nie bardzo to kuma... co za żenada

~qwerty

18-06-2010 20:32

tralala... muszę napisać artykuł, a zaraz mecz... co by tu skrobnąć na szybko...

Polecane

Przełomowy rok... znowu

Lektura firmowych informacji prasowych i prognoz firm analitycznych nie pozostawia wątpliwości - każdego roku...


Spokój i luz administratora

Wymagania wobec pracowników działów IT rosną proporcjonalnie do stopnia rozwoju teleinformatyki. Oczekuje się, że...


04-204 Warszawa ul. Jordanowska 12
tel.: (+48 22) 321 78 00 fax: (+48 22) 321 78 88
© copyright 2011 IDG Poland SA