Przejdź do głównej zawartości

Konkatenacja w zapytaniach SQL a bindowanie przez "?"

Ostatnio w kodzie pewnego programisty znalazłem dosyć ciekawy błąd. Wynikał on z różnego sposobu podpinania parametrów do zapytania UPDATE (SQL). Wartości pól po "SET" były bowiem konkatenowane, natomiast część po słowie kluczowym "WHERE" bindowana przez znaki zapytania. Mniej więcej wyglądało to tak (pół-pseudokod):
 
<?php
$set = ' user_id ='.escape($user_id).' '; (...) if(isset($_POST['comment'])) { $set .= ', comment="'.escape($_POST['comment']).'"'; } query('UPDATE `tabela` SET '. $set . ' WHERE id=? ' , $id);
?>
Cały szkopuł polegał na tym, że w momencie, kiedy w którejkolwiek wartości podpiętej w zmiennej $set pojawił się znak zapytania (bo użytkownik np. chciał zadać pytanie), to do tego znaku zapytania została zbindowana zmienna $id i finalne zapytanie wyglądało np. tak :
UPDATE `tabela`
SET `user_id`=5, `comment`="Co slychac345"
WHERE id=? ;
Gdzie "345" to np. klucz główny tabeli z komentarzami do czegokolwiek. Jak wiadomo, taka składnia jest błędna i zapytanie się nie wykona. Celem naprawienia błędu wystarczy zmienić linijkę odpowiedzialną za wykonanie zapytania na taką:
<?php
query('UPDATE `tabela` SET '. $set . ' WHERE id= '.escape($id));
?>
Na pierwszy rzut oka błąd jest praktycznie niewidoczny i wykryłem go dopiero po użyciu debuggera. Taka lekcja uczy, by nie mieszać konkatenacji stringów do zapytania z bindowaniem poprzez znaki zapytania :-).

Artykuł udostępniany na licencji CC-BY-SA-3.0

Komentarze

Popularne posty z tego bloga

WordPress -> SQL Injection poprzez plugin Webdorado SpiderCalendar

W zeszłym roku sprawdziłem jakość kodu oraz poprawność przetwarzania danych wejściowych przez plugin „Form Maker” przygotowany przez wydawcę Webdorado. Tym razem postanowiłem sprawdzić czy autor poprawił jakoś kodu swoich produktów. Należy tutaj nadmienić, że poza wersjami darmowymi opartymi na licencji GNU/GPLv2 oferuje on również wersję płatne z dodatkowymi szablonami. Tym razem postaram się opisać wszelkie przeszkody, które musiałem pokonać aby n apisać działającego exploita. Zacząłem zabawę tak, że program był dla mnie black-boxem, ale niestety skończyło się na przejrzeniu kodu. Zapraszam do lektury. Poniżej można zobaczyć jeden z widoków częściowych kalendarza, który domyślnie jest wywoływany z JavaScriptu jako XHR, można jednak go z powodzeniem otworzyć w przeglądarce jako widok główny: http://localhost:8888/wp/wp-admin/admin-ajax.php?action=spiderbigcalendar_month&theme_id=13&calendar=1&select=month,list,week,day,&date=2015-02&many_sp_calend...

Całkowanie numeryczne

Wprowadzenie Całkowanie numeryczne można porównać do podziału powierzchni całkowanej funkcji na przedziały (im dokładniejszy wynik chcemy uzyskać, tym więcej przedziałów). W zależności od wybranej metody całkowania będziemy liczyć pole w przedziałach dla prostokąta, trapezu lub paraboli. Do wyboru pozostaje nam również wybór czy ewentualny będziemy całkować pole figury pod całkowaną funkcją (z niedomiarem - wtedy uzyskany wynik może być mniejszy niż oczekiwany) lub nad funkcją (z nadmiarem - wtedy oczekiwany wynik może być większy niż oczekiwany). Pod koniec działania programu musimy zsumować pola wszystkich figur z pod przedziałów, które policzyliśmy tak, by uzyskać wynik. Graficzne przedstawienie problemu Całkowanie tak prostej funkcji jakmetodą prostokątów może dać duży błąd. Parametry wielkości przedziałów (ich liczność w całkowanym przedziale) należy dobrać odpowiednio tak, by błąd był jak najmniejszy. Całkowanie funkcji w przedziale od 0 do 8 z podziałem na 4 pod przedziały...

Inkscape - Opisywanie tekstu na ścieżce

Chcąc stworzyć np. efektowny logotyp w formacie SVG w kształcie koła warto wiedzieć jak opisywać napisy na ścieżkach, gdyż może nam to być przydatne, a dobrze wykonane opisanie napisu na kole może być całkiem efektowne. Przyda się również eksport tekstu do ścieżki celem poprawnego wyświetlania napisu w formacie SVG, tak więc do dzieła. Pierwszym krokiem będzie stworzenie krzywej (czynimy to przy użyciu odpowiedniego narzędzia - jeśli nie wiesz o czym mowa - przeczytaj poprzednie rozdziały), oraz jakiegokolwiek napisu, który będziemy chcieli edytować. Narzędzie do opisywania tekstu na ścieżkach domyślnie działa w ten sposób, że rozpoczyna opisywanie tekstu od strony lewej ścieżki, która będzie będzie służyła do opisania. Całość należy dobrać proporcjonalnie tak, żeby tekst opisał się na całej ścieżce - no chyba, że chcemy inaczej. Kolejnym etapem naszej pracy będzie zaznaczenie całości projektu (tj. napisu oraz ścieżki) oraz wybranie menu Tekst -> Wstaw na ścieżkę . Na tym etapie pra...