E Emil W Medlem sedan mars 2009 512 inlägg Frågan 6 juli 2009 09:42 #1 Hur säker är min kod nu när jag har ändrat ?
<?php
$con = @mysql_connect("******","******","********");
if(!$con)
{
die('Databasfel' . mysql_error());
}
mysql_select_db("***********", $con);
$id = mysql_real_escape_string($_GET['id']);
$resultt = ("SELECT kommentarid,namn,datum,kommentar,id,privat FROM ********** WHERE kommentarid='$id'");
if(mysql_num_rows($resultt) == 0)
{
echo "Ingen har kommenterat detta inlägg :(";
}
while($row = mysql_fetch_array($resultt))
if($row['privat'] == 1)
{
echo "<div style=\"background:#FFFFFF; border:1px solid #000000; padding:5px; margin-top:10px;\">";
echo '- Denna kommentar är endast till för Emil Wiklund - ';
echo "</div>";
}
else
{
echo "<div style=\"background:#FFFFFF; border:1px solid #000000; padding:5px; margin-top:10px;\">";
echo "<font size=\"2\">Kommentaren skriven av ".$row['namn']." klockan ".$row['datum']."</font>";
echo "<hr>";
echo $row['kommentar'];
echo "</div>";
}
mysql_close($con);
?>
SQL-koden är nu säkrad. Men det går däremot fortfarande att skriva in HTML-kod i kommentaren, inklusive Javascript-kod. Någon elaking skulle till exempel kunna skicka dig vidare till vad som ser ut att vara en exakt kopia av din sida, men som sparar lösenordet man skriver om man försöker logga in till admin-interfacet.
Du kan lösa detta genom att anropa htmlspecialchars för varje sak som skrivs ut, som en användare har skrivit in.
Både htmlspecialchars($row['kommentar']) och htmlspecialchars($row['namn']) allltså.
(Bra) säkerhet handlar inte om att bara täppa igen hål som man hittar utan att känna till sina programmeringsspråk väl och se till att varje rad man skriver är säker och inte skapar några nya luckor.
E Emil W Medlem sedan mars 2009 512 inlägg Jag får detta felmeddelade
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\provar.php on line 15
AndersN Medlem sedan nov. 2000 146 inlägg Posta gärna koden med som du skrivit den, lite lättare att felsöka då :bire
E Emil W Medlem sedan mars 2009 512 inlägg <?php
$con = @mysql_connect("**********","*******","*********");
if(!$con)
{
die('Databasfel' . mysql_error());
}
mysql_select_db("**********", $con);
$id = mysql_real_escape_string($_GET['id']);
$resultt = ("SELECT kommentarid,namn,datum,kommentar,id,privat FROM ********* WHERE kommentarid='$id'");
while($row = mysql_fetch_array($resultt))
if($row['privat'] == 1)
{
echo "<div style=\"background:#FFFFFF; border:1px solid #000000; padding:5px; margin-top:10px;\">";
echo '- Denna kommentar är endast till för Emil Wiklund - ';
echo "</div>";
}
else
{
echo "<div style=\"background:#FFFFFF; border:1px solid #000000; padding:5px; margin-top:10px;\">";
echo "<font size=\"2\">Kommentaren skriven av ".$row['namn']." klockan ".$row['datum']."</font>";
echo "<hr>";
echo htmlspecialchars($row['kommentar']);
echo "</div>";
}
mysql_close($con);
?>
AndersN Medlem sedan nov. 2000 146 inlägg Skall du inte ha { direkt efter din while?
while($row = mysql_fetch_array($resultt))
{
if($row['privat'] == 1)
Självklart måste du ha en avslutande } med.
E Emil W Medlem sedan mars 2009 512 inlägg jag får fortfarande
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\provar.php on line 15
AndersN Medlem sedan nov. 2000 146 inlägg Ändra
$resultt = ("SELECT kommentarid,namn,datum,kommentar,id,privat FROM ********* WHERE kommentarid='$id'");
Till
$resultt = mysql_query("SELECT kommentarid,namn,datum,kommentar,id,privat FROM ********* WHERE kommentarid='$id'");
E Emil W Medlem sedan mars 2009 512 inlägg Nu funkar allt det var mysql_query som fattades
Meeeeen, nu glömde du ju htmlspecialchars för namnet. Nu kan jag bara skriva elak javascript-kod i namn-fältet men inte meddelandefältet...
E Emil W Medlem sedan mars 2009 512 inlägg Jag har fixat för både namn och meddelande
men det är inte med här i koden
J jme Medlem sedan maj 2001 2 237 inlägg Lite OT men jag skulle kika på PDO.