Gå til innhold

Hjelp med Gjestebok script


Anbefalte innlegg

Hallo folkens

 

Jeg sitter her nå og fikser meg en god gjestebok til siden min og har fått til gjesteboka så den printer ut resultat og alt det der.

 

Men når det gjelder sikkerheten så er det dårlig også med feltene som skal fylles ut.

 

Sikkerheten: Jeg skulle ha fått gjort sånn at brukerene ikke kan bruke html eller sql injeksjoner.

 

Feltene: Skulle ha fått gjort slik at feltene som skal fylles ut, ikke skal være tomme når en bruker skriver sin melding. At det kommer en feilmelding hvis han ikke fyller ut alle.

 

Her er koden til den siden der feltene skal fylles ut:

<body>
<table width="400" border="0" align="center" cellpadding="3" cellspacing="0">
<tr>
<td><strong>Skriv i Gjesteboka </strong></td>
</tr>
</table>
<table border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC" style="width: 532px">
<tr>
<form id="form1" name="form1" method="post" action="skrivgjestebok.php">
<td>
<table border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF" style="width: 526px">
<tr>
<td style="width: 222px">Ditt Navn</td>
<td width="14">:</td>
<td width="357"><input name="navn" type="text" id="name" size="40" /></td>
</tr>
<tr>
<td style="width: 222px">E-Post Addresse</td>
<td>:</td>
<td><input name="epost" type="text" id="email" size="40" /></td>
</tr>
<tr>
<td valign="top" style="width: 222px">Din Kommentar</td>
<td valign="top">:</td>
<td><textarea name="kommentar" cols="40" rows="3" id="comment"></textarea></td>
</tr>
<tr>
<td style="width: 222px"> </td>
<td> </td>
<td><input type="submit" name="Submit" value="Skriv i Gjesteboka" /> 
<input type="reset" name="Submit2" value="Nullstill" /></td>
</tr>
</table>
</td>
</form>
</tr>
</table>
<table width="400" border="0" align="center" cellpadding="3" cellspacing="0">
<tr>
<td><a href="index.php">Vis Gjestebok</a></td>
</tr>
</table>

</body>

 

Dette er koden til den siden der scriptet står:

 

$datetime=date("y-m-d h:i:s"); //date time

$sql="INSERT INTO $tbl_name(navn, epost, kommentar, dato)VALUES('$navn', '$epost', '$kommentar', '$dato')";
$result=mysql_query($sql);

//check if query successful
if($result){
echo "Du har nå skrevet din kommentar";
echo "<BR>";
echo "<a href='index.php'>Vis Gjestebok</a>"; // link to view guestbook page
}

else {
echo "Det har oppstått en feil";
}

mysql_close();
?>
<?php include("fot.php"); ?>

 

 

Kan noen hjelpe meg og forbedre scriptene! Vil bli evig takk nemlig!

 

Beklager skrivefeil!

Lenke til kommentar
Videoannonse
Annonse
Sikkerheten: Jeg skulle ha fått gjort sånn at brukerene ikke kan bruke html eller sql injeksjoner.

 

Du kan ta en titt på denne funksjonen: strip_tags

 

Feltene: Skulle ha fått gjort slik at feltene som skal fylles ut, ikke skal være tomme når en bruker skriver sin melding. At det kommer en feilmelding hvis han ikke fyller ut alle.

 

Du kan gjøre en rekke sjekker på hver enkelt felt for å sjekke om inndataen er tom.

 

if(empty($_POST['felt'])){
// return error
}

Lenke til kommentar

For å hjelpe mot SQL injeksjoner i feltene dine: mysql_real_escape_string()

http://no.php.net/manual/en/function.mysql...cape-string.php

Brukerinput må alltid sjekkes for feil, man vet aldri hva de finner på. Ihvertfall på backend men også i frontend (feks ved hjelp av javascript)

 

Alternativt en tryggere måte å bruke mysql på: http://no.php.net/manual/en/ref.mysqli.php

 

Og ja, strip_tags() for å hindre at brukere kan skrive html i gjesteboka er nyttig. alternativt også htmlspecialchars()

 

http://no.php.net/manual/en/function.strip-tags.php

http://no.php.net/manual/en/function.htmlspecialchars.php

 

For eksempel:

 


$sql = sprintf("INSERT INTO $tbl_name(navn, epost, kommentar, dato) VALUES ('%s', '%s', '%s', NOW() )",
                     mysql_real_escape_string($navn),
                     mysql_real_escape_string($epost),
                     mysql_real_escape_string($kommentar));

$result = mysql_query($sql);

 

TIPS: med mindre dato i $tbl_name ikke er en DATE, DATETIME eller hva det skal være, så kan du bruke MySQL funksjonen NOW() for å registrere tiden nå. (så kan det bare hentes ut med en av datoformateringsfunksjonene til mysql eller prosesseres i php)

Endret av LordjOX
Lenke til kommentar

Det gøyeste er å lage ett slikt javascript som slenger opp en liten grønn boks når ett felt har riktig innhold, og en rød boks hvis det er feil.. Legge inn på "onblur" på input'ene... må jo såklart ha ett script til som sjekker før du poster, og hindrer dette, pluss ett på serversiden...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...