![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 869 Pomógł: 53 Dołączył: 20.10.2003 Skąd: Przeworsk Ostrzeżenie: (0%) ![]() ![]() |
Cześć! (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Piszę aktualnie nowe jądro i chcę przy użyciu jeden funkcji przefiltrować dane pod wieloma względami (html, mysql itp.). Poczytałem trochę na w internecie o filtrowaniu danych, nawet znalazłem bardzo prosty i zrozumiały wykres: link w .pdf. Napisałem funkcję filter i wygląda ona tak:
Przykładowe zastosowanie funkcji to:
Spis zastosowanych funkcji do przefiltrowania zmiennej (w kolejności zastosowania): stripslashes, escapeshellcmd, strip_tags, htmlspecialchars, mysql_real_escape_string, urlencode. Jak myślicie, czy ten skrypt jest poprawny? Zmienić szereg wykonywanych funkcji, może jakąś dodać, lub usunąć? Ten post edytował Kildyt 4.10.2008, 15:34:51 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
nie jestem sobie w stanie wyobrazić powodu dla którego potrzebowałbym zastosować taką funkcję...
każda funkcja którą użyłeś w łańcuchu jest przeznaczona do innego celu chyba że masz zamiar pobrany z adresu ciąg wrzucić do bazy danych przetwarzając niebezpieczne znaki (względem XSS) na encje usuwając tagi (których nie będzie na skutek działania poprzedniej funkcji) uruchomić polecenie z konsoli wyrzucając przy okazji escape'owanie które dodałeś... w skrócie ta funkcja nie ma sensu... no chyba że czegoś nie wiem... co ostatnio często się zdarza... każdą z funkcji z łańcucha używasz w innym celu... jedną(z reguły) gdy chcesz usunąć znaki ucieczki dodane automatycznie przy odpowiednich ustawieniach PHP, drugą gdy chcesz coś odpalić z konsoli, dwie kolejne przeciw atakom XSS, piątą przeciw atakom na bazę danych, a szóstą aby adresy url były odpowiednio zakodowane to że je sobie wszystkie połączysz nie znaczy że Twoja aplikacja będzie bezpieczna..., znaczy tylko że nie wiesz co napisałeś... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 869 Pomógł: 53 Dołączył: 20.10.2003 Skąd: Przeworsk Ostrzeżenie: (0%) ![]() ![]() |
Chciałem napisać jedną funkcję dzięki, której będę filtrował dane pochodzące od użytkownika. Np. formularz rejestracji, wyszukiwanie itp. itd.
Nie mogę Cię trochę zrozumieć. Przecież dane pochodzące od użytkownika trzeba przefiltrować, a to, że dodałem wszystko do jednej funkcji to dla mnie oszczędzanie czasu, a w razie problemów zmienię tylko funkcję, a nie cały kod. Niestety, ale kilka miesięcy temu miałem problem z atakiem XSS. Całe szczęście, że został dodany tylko kod javascript do kodu strony, ale i tak musiałem przefiltrować bazę danych. Od tego czasu wolę się ubezpieczyć i filtrować dane pod każdym względem. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
może opisowo
w skrócie... nie ubezpieczasz domu od "kradzieży samochodu", ani samochodu "od katastrof budowlanych" każda z funkcji którą użyłeś w łańcuchu swoich funkcji służy do innych operacji co już napisałem jak chcesz wykorzystać dane w zapytaniach do bazy to bierzesz mysql_real_escape_string (i z reguły tylko tą!) a jak chcesz użyć z polecenia exec, system etc. to używasz escapeshellcmd (i z reguły tylko tą!) choć jestem sobie w stanie wyobrazić jak tego mógłbym użyć razem to nie ma to większego sensu "ubezpieczasz" dane w swoim skrypcie od tego od czego są narażone..., a nie od wszystkiego niezależnie czym są i jak używasz... Jeśli nadal nie rozumiesz to przeczytaj dokumentacje wszystkich funkcji które użyłeś... potem jeszcze raz moje odpowiedzi a potem ew. przetestuj działanie kodu:
i wyciągnij wnioski Ten post edytował zimi 5.10.2008, 13:32:31 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 109 Pomógł: 9 Dołączył: 12.03.2007 Skąd: kraków/tarnobrzeg/baranów/suchorzów Ostrzeżenie: (0%) ![]() ![]() |
Ja bym proponował inną funkcję. Przy założeniu że dane zapisane są w kodowaniu utf-8 i jeśli się trzymamy tego kodowania to warto było by sprawdzić czy tekst jest poprawnie zakodowany. Jakiś robot mógłby dodać syf do bazy bądź w czymś tam.
Funkcja którą proponuje sprawdza wpierw sekwencję utf-8 a w przypadku błędnej sekwencji podmienia ją na znak '?' Entecje zamieniane są na znaki w odpowiednim kodowaniu natomiast tylko kilka znaków zawsze jest pozostawianych w postaci entecji. Oczywiści chodzi o znaki które pozostawione same sobie chciały by wejść w interakcję z naszym kodem.
tam gdzie jest --- (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) --- powinny być dwa znaki : x D Ten post edytował szagi3891 7.10.2008, 08:56:17 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.09.2025 - 23:00 |