mysql_real_escape_string - Gör jag rätt?
Hej!
Jag är TOTALT värdelös på att programmera, men har lyckats att knåpa ihop ett PHP-formulär för registrering av användare där jag vill implementera mysql_real_escape_string för att undvika SQL-injection. Har jag gjort rätt? Hur kan jag testa att det fungerar? Kod:
<?php |
Du bör köra en regex så att man inte kan skriva in html taggar i username,
Kod:
preg_match('/^[a-z\d_]{5,20}$/i', $username) |
Låter ju vettigt. Vart placerar jag in detta?
|
För att få ned koden några rader och slippa dubbellagra alla variabler som redan ligger i POST så kan du direkt efter anslutningen till databasen köra
Kod:
foreach($_POST as $key=>$val) Sen efter det kan du jobba direkt med $_POST[..] och behöver inte lagra om variablerna på nytt, vilket jag kan tycka är helt onödigt i det här fallet. Sen är det vanligt förekommande såväl bland nybörjare som bland mer erfarna programmerare att man helt struntar i att följa en vedertagen kodkonvention. Googla på något i stil med "coding convention php" eller "coding standards php". Vänj dig heller inte vid att skriva variabel/funktionsnamn på svenska. Annars så är du ju på gång, bara att forsätta knacka! :) |
Tycker du fått bra svar hittils och koden ser bra ut. Men en sak jag tycker du bör göra är att lägga till lite sha1 salt på md5-hashet. dvs:
PHP-kod:
|
md5 och sha1 är ingen kryptering, det är hashfunktioner (kan uppenbarligen aldrig upprepas tillräckligt många gånger).
Sen ser jag ingen anledning till att inte använda MySQLi och "prepared statements" istället. Att köra strip_tags(), htmlspecialchars(), trim(), etc, etc på data är ytterligare en åtgärd. |
Använd PDO, för böfvelen! Då blir koden vattentät mot injektionsförsök.
http://php.net/manual/en/book.pdo.php Fördelar: Säkerhet från injektioner. Bra struktur på kod. Återanvändbar kod. Ser lite bökigt ut till en början, men man vänjer sig fort. Passar utmärkt om man vill jobba vidare mot en mer objektorienterad kodning. |
Citat:
Jag tycker dessutom man skall använda Mysqlnd i PHP och då går PDO mig veterligen bort. |
Citat:
for ($i=0; $i < 1000; $i++) $hash .= $pass.$salt; $hash=SHA1($hash); |
Citat:
|
Alla tider är GMT +2. Klockan är nu 05:49. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson