Hej!
Håller på att bygga en webshop. Har lite frågor om detta. Har en php-fil som heter listaprod.php som lista alla produkter.
1. Den får delar av SQL-satsen i en querystring hur osäkert/säkert är det igentligen?
2. Jag använder funktionen QueryCode och QueryDecode, ngn som har ngt tips om ett bättre sätt att lösa problemet med = och '?
utdrag ur koden:
Function QueryDecode($str)
{
$str = str_replace("xlikax", "=", $str);
$str = str_replace("xsnuffx", "'", $str);
return($str);
}
Function QueryCode($str)
{
$str = str_replace("=", "xlikax", $str);
$str = str_replace("'", "xsnuffx", $str);
return($str);
}
// $urval kan till exempel vara "kategorixlikax10" el
// "namn like xsnuffx%apa%xsnuffx"
// $sort kan vara tex "namn" el "namn DESC"
$SQL = "SELECT artnr,namn,webbpris FROM produkt WHERE " . QueryDecode($urval) . " ORDER BY " . $sort . ";";
* Se till så att PHP kör addslashes() automatiskt på dina variabler, vilket är default.
* Validera dina (numeriska) värden innan de skickas till sql-frågan.
register_globals ska vara avstängd och du ska/bör använda:
$_GET['var']
$_POST['var']
$_SESSION['var']
osv
istället för bara $var
Men det har mer med funktionalitet att göra.
Angående addslashes() så handlar det om att köra escapesekvenser automatiskt när så behövs. Detta ställs in i php.ini enligt följade (men kan även ställas in med ini_set()):
php.ini skrev:
Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On
Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
Use Sybase-style magic quotes (escape ' with '' instead of ').
magic_quotes_sybase = Off
Missade en sak, isnumeric() validerar inte numeriska värden helt och hållet. Den godkänner lite avvikelser. Istället bör du använda exempelvis följande pattern: