webForumDet fria alternativet

Gästbok i php.

2 svar · 662 visningar · startad av B22

B22Medlem sedan mars 2004251 inlägg
#1

Hej hej!
Jag har gjort en mycket enkel gärstbok (koden nedan) med php och skulle vilja höra med er om det finns några större säkerhetsrisker i den koden, gärna tips på vad som kan förbättras.
Jag har en fråga också som jag är inte säker på om den hör hit, men jag försöker lägga in utskriften av inläggen i en tabell som formateras med css utan att lyckas med det.

Försökte skriva bara grundtaggarna i xhtml för att ta in css filen, och försökte att baka in php koden med xhtml, men jag ser ingen skillnad när jag visar gästboken, den ser inte allt ut som en tabell.

Kan ni ge mig förslag på hur jag kan göra det?

<?php
session_start();

include("config.php");

//hämtar inläggen från databasen
$getposts = mysql_query("SELECT * FROM Gastbok ORDER BY id DESC LIMIT 10");
echo(mysql_error());

while($r=mysql_fetch_array($getposts)){

echo '<div id="tabell">';
echo   "  <table >
        <tr><td>$r[namn]</td> <td>$r[datum]</td><td><a href='mailto:$r[epost]'>Epost</a> - <a href='$r[hemsida]' onclick='window.open(this.href);return false;'>Hemsida</a></td></tr>
      
       <tr><td> $r[meddelande]</td></tr>
     </table>
    <br />
    </div>";
}

if(!isset($_POST[postmess])){

    echo  "<form method='post' name='mess'>
            Namn:<br /> <input type='text' name='namn' maxlength='50'> <br />
            Hemsida:<br /><input type='text' name='url' value='http://' maxlength='100'><br />
            Epost:<br /> <input type='text' name='epost' value='http://' maxlength='100'><br />
            Meddelande:<br /> <textarea name='content' cols='35' rows='8'></textarea><br />
            <input type='submit' name='postmess' value='Skicka inlägget'>
           </form>"; 
        }

if($_POST[postmess]){

    $namn = $_POST['namn'];
    $url = $_POST['url'];
    $epost = $_POST['epost'];
    $meddelande = $_POST['content'];
    
    if($namn == NULL || $meddelande == NULL){
               print "Vänligen ange ditt namn och ett meddelnde!<br/><br/><input type='button' value='Tillbaka' onClick='history.back()'/>";
        exit;
    }else{
        $sql = mysql_query("INSERT INTO Gastbok (namn, hemsida, epost, meddelande, datum) VALUES ('$namn', '$url', '$epost', '$meddelande', '$date')");
echo(mysql_error());

        echo "<script type=\"text/javascript\">window.location.href=window.location.href;</script>";
        }
    }
?>
stevenetMedlem sedan juni 2000985 inlägg
#2

Hej!

Det går att posta HTML-kod (t.ex. redirect till en annan sida) samt SQL-injections (ta bort, läsa, ändra och skapa data i databasen).

För att skydda dig mot elak HTML-kod (och snäll med för den delen):

byt ut:

while($r=mysql_fetch_array($getposts)){

mot:

while($r=mysql_fetch_array($getposts)){ 
$r[namn] = htmlspecialchars($r[namn]);
$r[epost] = htmlspecialchars($r[epost]);
$r[hemsida] = htmlspecialchars($r[hemsida]);
$r[meddelande] = htmlspecialchars($r[meddelande]);

För att skydda dig mot SQL-injections:
Byt ut:

    $namn = $_POST['namn']; 
    $url = $_POST['url']; 
    $epost = $_POST['epost']; 
    $meddelande = $_POST['content'];

mot:

    $namn = mysql_real_escape_string($_POST['namn']); 
    $url = mysql_real_escape_string($_POST['url']); 
    $epost = mysql_real_escape_string($_POST['epost']); 
    $meddelande = mysql_real_escape_string($_POST['content']);

Läs mer om funktionerna:
http://se.php.net/mysql_real_escape_string
http://se.php.net/htmlspecialchars

B22Medlem sedan mars 2004251 inlägg
#3

Tack för tipsen, nu har jag ändrat som du nämnde.

130 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
123 ms — hämta tråd, inlägg och bilagor (db)