webForumDet fria alternativet

Förhindra Sql Injection - msSql vs. mySql

PHPur PHP

2 svar · 442 visningar · startad av whip3

Medlem sedan dec. 20013 inlägg
Frågan#1

Jag är ganska ny på php och jag vill vara säker på att jag gör detta rätt. Obs detta exempel gäller bara strängar, jag vet att man måste validera tal på annat sätt.

Koden nedan antar att MagicQuotes är avstängt.

$sName = $_POST["sName"];

if ( $bMySql )
{
  // mySql

  $sSql = "INSERT INTO test (name) VALUES('" . addslashes($sName) . "')";
}
else
{
  // msSql

  $sSql = "INSERT INTO test (name) VALUES('" . str_replace("'", "''", $sName) . "')";
}

Är detta korrekt eller behöver man göra något mer?

/ .mikael

Medlem sedan maj 20002 993 inlägg
#2

Gammal tråd men jag började fundera på samma sak. Satt och trixade med min gästbok men lyckades inte utföra några sql queries. Behöver man använda addslashes och kolla tecken med php + mySQL? :q

Medlem sedan aug. 20002 975 inlägg
#3

Normalt sett så är magic_quotes_gpc satt och då behöver du inte köra addslashes, eftersom PHP redan gjort det åt dig. Kolla upp hur det är på din server.

Sen kan det finnas anledning att att köra det du ska visa på sidan genom htmlentities eller liknande för att inte din HTML-kod ska sabbas. Detta gör du när du visar t.ex meddelande (använd det dock mot alla postfält där besökaren fyller i)

$row['message'] = htmlentities($row['message'], ENT_QUOTES);

Sen när du skriver ut kan det vara idé att se till att besökaren inte skrivit in ett för långt ord som kan förstöra din layout:

echo wordwrap($row['message'], 40, "\n", 1);
136 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)