Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg i zabezpieczeia
Forum PHP.pl > Forum > PHP
virtualman
Piszę skrypt i postanowiłem go zabezpieczyć, ale mam pytanie i jeden błąd...
Najpierw zaprezentuję wam błąd:
[phpl]Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 6 in C:\xampp\htdocs\include\register.php on line 65[/phpl]

A teraz myślę, że te linijki kodu:
  1. f($pass!=$pass1 || !preg_match('/^([A-Za-z0-9\_\-\@]{2,12})$/Diu', $nick) || !preg_match('/^{6,12}$/', $pass) || !preg_match('/^[a-zA-Z\.\-\_]+\@[a-zA-Z0-9\.\-\_]+\.[a-z]{2,4}$/D', $mail) || empty($regulamin) ) echo '<div id="blad" style="height="200px;"">W formularzu znaleziono błędy. Popraw je!<div>';
  2. // jeśli jest ok...
  3. else
  4. {
  5. $nick = mysql_real_escape_string($nick);
  6. $nick = mysql_real_escape_string($mail);

I tu 2 pytania:
Co jest nie tak - czemu wywala error, a po 2 czy takie zabezpieczenia będą dobre?
Crozin
1.
Kod
/^{6,12}$/
Co może wystąpić od 6 do 12 razy? Nic. Stąd ten błąd.
2. Od sprawdzenia poprawności maila masz filter_var, a długości strlen.
wookieb
Czekam na PW z poprawną nazwą tematu
// Otwieram
virtualman
Okej wszystko śmiga... teraz tylko pozostaje pytanie co sądzicie o takim zabezpieczeniu? Sprawdzi się? Aktualny kod wygląda tak:
  1. // sprawdzamy poprawność formularza
  2. if($pass!=$pass1 || !preg_match('/^([A-Za-z0-9\_\-\@]{2,12})$/Diu', $nick) || strlen($pass)<6 || strlen($pass)>12 || !filter_var($mail, FILTER_VALIDATE_EMAIL) || empty($regulamin) ) echo '<div id="blad" style="height="200px;"">W formularzu znaleziono błędy. Popraw je!<div>';
  3. // jeśli jest ok...
  4. else
  5. {
  6. $nick = mysql_real_escape_string($nick);
  7. $mail = mysql_real_escape_string($mail);

A przy większym formularzu tak:
Fifi209
Usuń tego preg_matcha w ogóle, samo filter_var wystarczy + strlen
virtualman
a jak sprawdzić czy nie ma jakichś niedozwolonych znaków w nicku? I czy to mnie obroni przed SQL Injection. oraz XSS
A to od razu pytanie do sprawdzania url'a tym filter_var < na jakiej zasadzie to działa? czy jeśli mam przesyłanie metodą GET w postaci profil.php?nick=$nick to zabezpieczy to trochę?
Fifi209
To jest właściwie jak gotowe wyrażenia regularne. Co do samego zabezpieczenia i tak radzę filtrować dodatkowo przed dodaniem do bazy.
virtualman
A jaki filtr wybrać do nicku i co on będzie dokładnie robił. 2 -> z sprawdzaniem URLu przepuści " www.strona.pl/profil.php?nick=$nick" ? to co? Mam powtórzyć to sprawdzanie jeszcze przed samym dodaniem do bazy?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.