TAPS – Narzędzie anti SQL Injection

TAPS (Tool for Automatically Preparing SQL queries) to narzędzie, wymyśłone przez trzech naukowców z Uniwersytetu Illonis.

TAPS ma za zadanie zabezpieczać kod PHP z zapytaniami w języku SQL przed atakami typu SQL Injection. SQL Injection polega na wstrzykiwaniu kodu do zapytania SQL (poprzez parametry) tak, aby zmienić jego działanie na niepożądane z punktu widzenia administratora serwisu czy frontendu.

Przykładowe zapytanie

SELECT * FROM tabela WHERE name = ‘”.$_POST[‘parameter’].”‘

,w przełożeniu na język zrozumiały dla człowieka brzmi:

Wybierz wszystko z tabeli ‘tabela’ gdzie id to…

Jeśłi zły hax0r do tej tablicy wpisze Chris.’ OR 1=1 Może wyjąć wtedy wszystkie dane z tej tabeli – nie tylko ograniczone imieniem Chris (jeśli źłe wstawiłem .’ proszę mnie poprawić).

A co, jeśli zmieni parametry tak, aby zakończyć zapytanie i dokleić formułę kasującą zawartość całej tabeli?

Naturalnie najlepszym sposobem obrony jest stosowanie filtrów wbudowanych w PHP (funkcje przygotowane przez twórców języka, np. mysql_real_escape_string()). Dobrym sposobem jest jednak użwanie tzw. prepared statements.

Prosty kod ze sklejanymi zapytaniami SQL dzięki narzędziu TAPS zamieni się w o wiele bezpieczniejszy. Oto przykład:

function test1()
{
$a = $_GET[‘user’];
$query = “delete from test1 where u = ‘”.$a.”‘”;
@mysql_query($query);
}

Po przetransformowaniu kodu wygląda on następująco:

function test1()
{
$a = $_GET[‘user’];
$query__args = $a ;
$query = “delete from test1 where u = ?” ;
executePS( $query , $query__args );
}

Niestety narzędzie nie chciało zaakceptować mojego kodu i sypało błędami – dziwne, bo pokazywanie publicznie błędów własnej aplikacji nie jest bezpieczne. Twórcy starają nam się wcisnąć narzędzie do pomocy przy zabezpieczaniu własnych aplikacji, nie dbając o to, aby ich była bezpieczna. :)

Warto jednak zapoznać się z TAPSem. Jest to bardzo ciekawa inicjatywa, choć nic nie zastąpi nam “własnego mózgu”.