Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]funkcja do pól typu text
wpaski
post
Post #1





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


Czy taka funkcja zabezpiecza dane które mają być zapisywane do bazy danych? Dodatkowo korzystam z PDO.
  1.  
  2. public function allowedcharacters($data) {
  3. $data = filter_var($data, FILTER_SANITIZE_STRING);
  4. if (preg_match("/^[a-z ęóąśłżźćń]+$/", $data) == false) {
  5. return "Niedozwolone znaki";
  6. }
  7. }


Takie jeszcze poboczne pytanie co dokładnie robi flaga FILTER_SANITIZE_STRING bo z tego co wyczytałem, to usuwa znaki html'owskie ale co jeszcze usuwa?

Ten post edytował wpaski 7.10.2012, 13:25:06
Go to the top of the page
+Quote Post
JoShiMa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


A duże litery i znaki przestankowe? Cyfry też wykluczasz?
Go to the top of the page
+Quote Post
wpaski
post
Post #3





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


tak w tym polu akurat tak miało być, w innych gdzie to wymagane to może zrobić takie coś?
  1. str_replace(array('\\','[',']','^','$','.','|','?','*','+','(',')'),array('\\\\','\[','\]','\^','\$','\.','\|','\?','\*','\+','\(','\)'),$data);

czy poprostu dać addslashes?

Ten post edytował wpaski 7.10.2012, 13:56:41
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Hmm, myślę, że nie ma co wymyślać koła na nowo, funkcje których potrzebujesz już są dostępne w PHP, tak jak mówiłeś addslashes, ale także strip_tags chociażby.
Go to the top of the page
+Quote Post
viking
post
Post #5





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


@b4rt3kk: wpaski używa filter_var oraz jak mówił PDO więc zdradź co mają dwie propozycje mu dać?
Jak już to htmlentities oraz http://htmlpurifier.org/
Go to the top of the page
+Quote Post
bostaf
post
Post #6





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


Cytat(wpaski @ 7.10.2012, 14:24:08 ) *
Czy taka funkcja zabezpiecza dane które mają być zapisywane do bazy danych? Dodatkowo korzystam z PDO.
  1.  
  2. public function allowedcharacters($data) {
  3. $data = filter_var($data, FILTER_SANITIZE_STRING);
  4. if (preg_match("/^[a-z ęóąśłżźćń]+$/", $data) == false) {
  5. return "Niedozwolone znaki";
  6. }
  7. }

Zabezpiecza? W sensie przed SQL injection? Nie, nie zabezpiecza. Przed wprowadzeniem do bazy innych niż litery i spacja znaków? Tak. Tzn. sama w sobie nie, ale jeśli będzie odpowiednio użyta z funkcją wywołującą zapytanie to tak. Naprawdę masz konieczność takiego ograniczania znaków?
Jeśli chodzi tylko o ochronę przed SQL injection to PDO::prepare w połączeniu z PDOStatement::bindParam jest absolutnie wystarczające, bo zostało stworzone w celu zabezpieczenia przed takim atakiem. Nie trzeba danych dodatkowo filtrować.
Co masz dokładnie na myśli pisząc o zabezpieczaniu?

Cytat(wpaski @ 7.10.2012, 14:24:08 ) *
Takie jeszcze poboczne pytanie co dokładnie robi flaga FILTER_SANITIZE_STRING bo z tego co wyczytałem, to usuwa znaki html'owskie ale co jeszcze usuwa?

Tu masz opis wszystkich filtrów: http://www.php.net/manual/en/filter.filters.php. FILTER_SANITIZE_STRING cytuję: "Strip tags, optionally strip or encode special characters." czyli czyści tagi, opcjonalnie czyści lub koduje specjalne znaki. Żeby filtrował te opcjonalne znaki, trzeba dodać odpowiednią flagę (z kolumny "flags" na listingu).
Go to the top of the page
+Quote Post
wpaski
post
Post #7





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


dzięki, chodzi o podstawowe ataki, SQL injection i XSS

Cytat
Tzn. sama w sobie nie, ale jeśli będzie odpowiednio użyta z funkcją wywołującą zapytanie to tak.


Tego za bardzo nie rozumiem, przecież nie można wprowadzić innych znaków po za tymi filtrowanymi przez preg_match
Go to the top of the page
+Quote Post
bostaf
post
Post #8





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


Cytat(wpaski @ 7.10.2012, 16:28:10 ) *
dzięki, chodzi o podstawowe ataki, SQL injection i XSS

No to sprawa jest prosta. Do skonstruowania zapytania wykorzystaj PDO::prepare, podepnij dane za pomocą PDOStatement::bindParam i wykonaj zapytanie za pomocą PDOStatement::execute. Nic nie trzeba filtrować ani eskejpować. Wszystkie dane są "podpięte" czyli lecą do servera SQL równolegle z zapytaniem a nie w zapytaniu. W tym cała magia PDO - dane nie mają bezpośredniego kontaktu z zapytaniem.
W manualu PHP, za linkami które podałem, są ładne przykłady bindowania.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 10:14