Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czy addslashes i htmlspecialchars wystarczy?
Utilaft
post 21.02.2013, 18:48:42
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

Ostrzeżenie: (10%)
X----


Witam. Get filtruje mysql escape string, a formularze addslashes i htmlspecialchars

Czy to wystarczy? i czy to jest dobre rozwiązanie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
sajegib
post 21.02.2013, 20:52:10
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

Ostrzeżenie: (0%)
-----


dobrze użyć regexów i preg_match
Go to the top of the page
+Quote Post
cudny
post 22.02.2013, 00:29:32
Post #3





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Jeśli dokładnie wiesz co ma się znajdować w otrzymanych danych ( float, int, długość znaków, itp ) to przefiltruj to pod tym kontem.
mysql real escape string wystarczy - ale co ma znaczenie czy dajesz to na _GET czy _POST ?
Na wszystko dawaj mysql real escape string !

Do tego nie wiem czy htmlspecialchars() jest Ci do czegoś potrzebne, jeśli nie wyświetlasz tego potem na stronie - no chyba, że chcesz wyświetlić, ale to bardziej pomyślał bym o przefiltrowaniu tego przez DOM'a, ewentualnie dał strip_tags()

Validacja to podstawa


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
Sephirus
post 22.02.2013, 09:00:29
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Popieram przedmówców ale należy odróżnić dwie rzeczy - walidację od filtrowania. Ogólnie zasady walidacji są takie:

- Jeśli parametr ma mieć określoną wartość lub jedną z tablicy wartości to sprawdzaj dla niego poprzez == i in_array czy tak właśnie jest. Nie ma sensu dodawać tu inne walidacje.

  1. // parametr status powinien mieć wartości 0 lub 1
  2.  
  3. if(!in_array($_GET['status'], array(0,1)) {
  4. die('Niepoprawna wartość statusu!');
  5. }
  6.  
  7. // ...


- Podobnie jeśli parametr jest numeryczny i powinien należeć do jakiegoś dużego zakresu to sprawdzaj go w taki sposób:

  1. // parametr wiek powinien mieć wartości od 18 do 99
  2.  
  3. if(!is_numeric($_GET['wiek'] || $wiek < 18 || $wiek > 99) {
  4. die('Niepoprawna wartość parametru wiek');
  5. }
  6.  
  7. // ...


- Ogólne dane liczbowe sprawdzaj poprzez odpowiednie funkcje typu is_int, is_float itp.

- Takie dane jak na przykład daty musisz odpowiednio walidować wykorzystując do tego na przykład obiekt klasę DateTime z odpowiednim formatowaniem - będzie krzyczała jak data jest niepoprawna

- Ciągi znaków różnego rodzaju powinny być sprawdzane pod kątem ataków XSS (wstrzyknięty kod HTML tam gdzie go być nie powinno itp), możesz tu użyć różnych metod, wyrażeń regularnych by sprawdzić czy ciąg zawiera wyłącznie dozwolone znaki, sprawdzać długość itd. Dodatkowo możesz dla konkretnych ciągów (adres e-mail, adres http itp) używać PHPowego filter_var.

Filtrowanie z kolei to zabieg mający na celu zabezpieczyć dane przed wrzuceniem do bazy danych. W tym celu stosuje się addslashes (przestarzale), mysql_real_escape_string i podobne - wszystkie mają na celu to aby zabezpieczyć bazę. Jeśli przykładowo w danym parametrze mogą występowac prawie dowolne znaki, html, cudzysłowy itd to przymusem jest je filtrować.

Strip_tags czyści z ciągu tagi html (usuwa je) - jest to przydatne na ataki XSS.


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 1.07.2025 - 14:32