ugrás a tartalomhoz

Szerver-oldali Form validálás

Creative · 2010. Ápr. 8. (Cs), 13.54
Üdv

Eme cikk a formos kérdésem folytatása. A kliens-oldali ellenőrzés rendben, ám adódott gond frissítés után a szerver-oldalon is. Sajnos.... a lényeg, elején deklarálok egy változót, ami itt még üres, de hiba esetén ehhez adódik a 3 hiba egyike. A gondom kétoldali.

Első gondom : Ellenőrzéskor, nem tudom úgy elelnőrízni, hogy létezik-e a változó (tehát adódott-e hozzá a 3-ból már vmelyik), mivel alapból létrehoztam egy üres értékkel. Így akárhogy ellenőrzöm, mégha helyes is, hibás értékkel tér vissza.
Itt van hozzá az érintett kódrészlet, összevágva:

if(isset($_POST['Submit'])) {
  $hiba = '';  
  $nev     = ($_POST['name']);  
  $mail    = ($_POST['email']);
  $comment = ($_POST['comment']);

function checkName($nev) {  
	if(strlen($nev) < 3) {	// elég hosszú a név mező értéke?
		return false;	
	}
	else { return true; }
	if(strlen($nev) > 20) {	// nem túl hosszú a név mező értéke?
		return false;	
	}
	else { return true; }  
}
function checkMail($mail) { 
  if($mail == (eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$", $mail))) {
// az e-mail mező értéke szabványos?
    return false;  
  }
	else { return true;} 
}
function checkComment($comment) {  
	if(strlen($comment) < 6) {	// elég hosszú az üzenet?
		return false;	
	}
	else { return true; }	
	if(strlen($comment) > 280) {	// nem túl hosszú az üzenet?
		return false;	
	}
	else { return true; }	
}

if(!checkName($_POST['name'])) {
	$hiba .= '<li>Hiba a névvel!</li>';
}
if(!checkMail($_POST['email'])) {
	$hiba .= '<li>Hiba az e-maillel!</li>';
}
if(!checkComment($_POST['comment'])) {
	$hiba .= '<li>Hiba az üzenettel!</li>';
}

if(!isset($hiba) || count($hiba) <1) {	// nincs hiba, feldolgozás behívása
	echo("Gratula ;)");
}
else {	// hiba esetén kilistázza a hibákat
 echo '
 <div id="thx_frame">
	<div id="thx_input">
	 <div>
	 <H2>Hiba!</H2>
	 A hozzászólása nem került mentésre !<br />
	 Ennek lehetséges okai:<br /><br /><ul>
	 <color=#a43b35>'.$hiba.'</color>
	 </ul><br />
	 Kérem próbálja újra.<br />
	 </div><br />	
	 <div>
	 >> <a href="'.$_SERVER['HTTP_REFERER'].'">Vissza a vendégkönyvhöz</a> <<
	 </div>
	</div>		
 </div> 
 ';
}
}
Második gondom: Igyekeztem normális e-mail ellenőrzést összehozni, de ahogy olvastam is néhány oldalon, egyetemes elelnőrzőt összehozni szinte lehetetlen. Próbálkoztam wordpress-szerű elelnőrzéssel is, és végülis erre jutottam(lejjebb). A gondom, hogy erre unexpected-et ír egy { -re. Hátha valaki meglátja a hibát benne, amit én nem veszek észre...

function checkMail($mail) { 
 if($mail == (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $mail)) {
  return false;  
 }
  else { return true;} 
}
C.
 
1

probald igy

jepisti · 2010. Ápr. 8. (Cs), 15.27
Szia!

if(!isset($hiba) || count($hiba) <1) {

helyett

if ($hiba===''){
2

Zárójelek

bugadani · 2010. Ápr. 8. (Cs), 15.48
Az e-mail ellenőrzős kódrészlet 2. sorában kimaradt az ifet záró zárójeled. Vagy épp van egy fölösleges, ahogyan tetszik...

function checkMail($mail) {   
    if($mail == eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $mail)) {  
        return false;    
    }  
    else { return true;}   
}
PHP 5.2 vagy afölött viszont ajánlom a filter_var használatát, kicsit kevésbé körülményes elrontani

function checkMail($mail){
    return (filter_var($mail, FILTER_VALIDATE_EMAIL) !== false);
}
3

Remélem nem gond, ha nem

mahoo · 2010. Ápr. 8. (Cs), 16.19
Remélem nem gond, ha nem nyitok új témát, mert a kérdésem ide is beillene. Amit már szerintem nagyon sokszor megvitattak, mégsem vagyok biztos a dolgomban.
Azt szeretném tudni, hogy adatbazásiba mentés előtt elég e ennyit tenni a voltozóval:

function safe($value)
{
$this->db_connect();
$value = trim($value);
if(get_magic_quotes_gpc()) $value = stripslashes($value);
$value = mysql_real_escape_string($value);
return $value;
}

Jelenleg én ezt használom, de megannyi topik szól arról, hogy szükséges a htmlentities, htmlspecialchars is. Illetve arról is hogy nem, mert ezek kimeneti szűrők és tehát használatuk az SQL-injection ellen nem véd (sőt!), ezért kiolvasás után kell hasznalni őket XSS ellen!

Nem véletlenül kérdezem, mert mint mondtam 1000 helyen hol cáfolják, hol erősítik ezt az állítást.

Ha mysql_real_escape_string-et (mres) használok, kell a trim is, egyébként?

Találtam egy osztályt a phpclasses.org-on és ha jól értelmeztem, ott is csak mres van és strip ha szükséges.

Kiváncsi lennék a tapasztalt programozók véleményere (is).
4

^^

Creative · 2010. Ápr. 8. (Cs), 17.43
Hálás köszönetem a gyors váalszért jepisti és bugadani. A feltételnél tényleg megoldódott a gondom. Az e-mail checknél tényleg összefolytak a zárójelek a szemem előtt... Most már mind a szerver-oldalon, mind a kliens-oldalon frankóón működik a rendszer. Sajnos a tárhelyet, amit bérlek, egy régebbi php-motor fut, uh maradok a hajtépős kódnál :)
Mahoo, én bár nem vagyok tapasztalt programozó még, és ezt a biztonságot se igen használom, lévén hogy nem hatalmas adatbázisokkal s portálokkal dolgozom, de azért hozzászólok énis, ha nem gond :) Én ezt utoljára a diplomamunkámban használtam, kicsit más formában. Ott minden változókkal való művelethez odarendeltem az én kis kódom, ami be kell valljam, még a tiedénél is rövidebb volt :)

if(get_magic_quotes_gpc())
 {$ertek = stripslashes($ertek);}
if(!is_numeric($ertek) && $ertek!='null')
 {$ertek = '"' . mysql_real_escape_string($ertek) . '"';} 
Enélkül voltak érdekes bejegyzéseim az adatbázisban... De mint mondtam ,azóta nem használtam még máshol, s nem adódtak gondok. Remélem nem gond, hogy hozzászóltam azért ehhez is :)

C.
5

Nem!! Sőt! Látom, hogy

mahoo · 2010. Ápr. 8. (Cs), 20.01
Nem!! Sőt! Látom, hogy mindketten szinte ua-t használtuk.
Bár részemről a htmlspecial és a htmlentities még mindig kérdéses!

Sok sikert a magunkfajta, még gyakorló php-seknek! :)
6

Nem a méret a lényeg

Poetro · 2010. Ápr. 8. (Cs), 20.26
Amennyiben sikerül találni egy lyukat a rendszeredben azt a rosszindulatú cracker saját céljaira tudja felhasználni, például spam leveleket küld, vagy más illegális tevékenységhez, vírusok terjesztésére, phising oldalakra tudja használni azt a tárhelyet, amiről te azt hiszed jelentéktelen.