artykuły

[miniTutorial] Jak obejść słabe RewriteRule

2008-06-11
18:51:00
Avatar
Lukas
Data publikacji:
21:58, 21 February 2008
Witam, Art jest dla tych którzy instynktownie uciekają od stron opartych na ReWrite Rule, czyli na opcji pozwalającej przepisywać adresy do "ładnej" postaci (czy zamiast np. www.jakasstrona.pl/artykul.php?d_id=4&a_id=2 [/code"> pozwala ona przepisać adres do "prostszej" (dla niewprawnego oka) postaci: [code=delphi www.jakasstrona.pl/artykul/4/2/ W rzeczywistości, Ci którzy próbowali stosować tę technikę wiedzą, że często powoduje ona wiecej problemów niż pożytku. Oprócz wyraźnego spowolnienia wydajności serwera, możemy mieć problemy z zapętleniami i nie wczytywaniem elementów osadzonych itp... W każdym razie wszystkich początkujących czeka długa droga do pisania w 100% poprawnych "reguł przepisywania adresów". Będą oni musieli zacząć od... wyrażeń regularnych - bo na tym się cały chwyt opiera. Działa to tak, że w podanym adresie pierwotnym (tym w "ładnej" postaci) odszukiwane są elementy pasujące do wyrażenia regularnego czyli tzw. reguły. W naszym wypadku są to liczby osadzone pomiędzy znakami / i / , czyli w naszym przykładzie tekst 'artykul' oraz liczby 4 i 2. Później, te elementy są przepisywane do adresu "prawdziwego" (tego z parametrami d_id i a_id ) w taki sposób, że odszukane za pomocą wyrażenia regularnego elementy są wstawiane do zdefiniowanego adresu, przykładowo: www.jakasstrona.pl/<element 1>.php?d_id=<element 2>&a_id=<element 3> [/code"> Teraz jaka kwestia jest? Co ciekawe, budowniczy takich systemów (i często jest to powtarzane na forach internetowych) twierdzą, że ReWrite rule skutecznie uniemożliwia ataki typu SQL Injection, ponieważ dane są filtrowane (tzn. w miejscu liczby nie może się znaleźćnic innego, tylko liczba - inaczej element jest odrzucany. Tyle, że bardzo często pisarze takich stron zapominają o tym, że nie zablokowali dostępu do starych adresów ;) czyli adresów typu: [code=delphi www.jakasstrona.pl/artykul.php?d_id=4&a_id=2 Będąc przekonani o tym, że RewriteRule filtruje za nich wszystko, często nie zabezpieczają w ogóle skryptów (!) Pokażę Wam przykład takiej strony: http://www.maryland.com/articles/article.php/a_id/1 [/code"> Niby wszystko ładnie. Ale już na pierwszy rzut oka widać, że "prawdziwy" adres to: [code=delphi http://www.maryland.com/articles/article.php?a_id=1 ... a prawdziwe jego wykorzystanie to: ">http://www.maryland.com/articles/article.php?a_id=1+AND+1=0/* To oczywiście tylko sprawdzenie podatności skryptu na SQL Injection. No ale z wynikiem pozytywnym. Tak więc, podsumowując. Często możemy rozszyfrować zastosowane reguły ReWrite Rule i (o ile) nie zrobiono specjalnych przekierowań i blokad na stare adresy, łatwo idzie się do nich dobrać, zwłaszcza, że twórcy takich systemów myślą często, że wszystko mają ładnie zabezpieczone. A o bezpieczeństwo kodu dbajcie na najniższym poziomie waszego serwisu - najlepiej filtrować dane w każdej funkcji - tak, abyśmy byli pewni, że po podaniu do funkcji złośliwego kodu nie wpuści nam go ona do DBMS.




Zaloguj się aby dodać post.
Dexter