FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Har WN som tidsfördriv
|
Hej!
Jag har en liten kort fråga. Jag har läst rätt mycket om tekniker att STOPPA SQL injections, och har kommit på ett "bra" sätt att stoppa det, TROR jag? Sättet är lätt att infoga i redan existerande kod och är rätt simpelt. Frågan är nu bara om det fungerar i praktiken med? Vanligaste sättet att stoppa sql injections (som jag sett) är genom att köra detta: Kod:
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password)); mysql_query($query); Därför kom jag på ett annat alternativ, eftersom det är variablarna som kommer genom $_POST och $_GET som ska escapas, borde inte detta funka 100ggr bättre? Kod:
// denna funktion placeras i en extern functions.php fil. function e($str) { return mysql_real_escape_string($str) } $user = e($_POST['user']); $pass = e($_POST['pass']); $sql = "SELECT * FROM users WHERE user='$pass' AND password='$user';" mysql_query($sql); Kommer det fungera BRA? och är det tillräckligt säkert? Varför använder alla den andra "tekniken" igentligen? Hjälp mig! mvh Jim |
|||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Mycket flitig postare
|
Dina varianter gör ju samma sak, bara två olika skrivsätt.
|
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Supermoderator
|
Citat:
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Har WN som tidsfördriv
|
Tack för svaren!
Så båda borde alltså fungera lika bra? =) mvh Jim |
|||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Mycket flitig postare
|
Citat:
|
|||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Har WN som tidsfördriv
|
I form av prestanda och belastning då?
mvh Jim |
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Nykomling
|
Ingen skillnad, PHP-interpretern kommer tolka din kod och därmed också praktiskt ersätta (blir ju pekare till slut)varenda e($_POST['variabel']); med mysql_real_escape_string($_POST['variabel']);
Interpretern kommer inte att snurra några extravarv funktionsmässigt, funktionen är mer en estetisk grej för dig som programmerare. |
||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Medlem
|
Båda varianterna blir ju lite jobbiga om det är mer än bara user och password. Går det i PHP att
skriva någon generell funktion som loopar igenom alla POST-variabler och gör om dem? Jag kan inte PHP, men tänkte mig alltså något i stil med... Kod:
function mysql_real_escape_POST() { for_each variable in $_POST { variable = mysql_real_escape_string(variable) return mysql_real_escape_string($str) } där det behövs. Kanske går att konfigurera så att den anropas automatiskt till och med. Någon som kan PHP får gärna rätta till detta exempel. Sen vill man väl i vissa fall ge ett tydligt felmeddelande istället för att exekvera SQL-satsen om någon skickar otillåtna tecken. Detta bör i så fall göras på både serversidan och klientsidan. |
||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Klarade millennium-buggen
|
Ta en titt på MySQLi och Prepared Statements, mycket säkrare.
|
||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Mycket flitig postare
|
Citat:
Kod:
if (get_magic_quotes_gpc()) { $_GET = array_map("stripslashes", $_GET); $_POST = array_map("stripslashes", $_POST); } $_GET = array_map("mysql_real_escape_string", $_GET); $_POST = array_map("mysql_real_escape_string", $_POST); |
||
![]() |
![]() |
Svara |
|
|