Teig Skrevet 8. april 2007 Del Skrevet 8. april 2007 Heisann! Jeg har nettopp kodet en gjestebok i PHP (med en god del hjelp). Kan bli funnet her. Nå er det altså noen som synes det er fryktelig morsomt å spamme denne gjesteboken med scripts og diverse html koder som legger til enorme bilder/endrer sideinnholdet osv. Er det noen som kan en kode som ikke tillater dette? Jeg har blokket for bruken av URLs allerede, men dette er ikke nok. Hvis noen også kunne si meg hvordan man logger en ip adresse hadde det vært kjempefint. Lenke til kommentar
Teig Skrevet 8. april 2007 Forfatter Del Skrevet 8. april 2007 (endret) strip_tags() 8332238[/snapback] EDIT: Fant den, måtte bare legge til www. Endret 8. april 2007 av hakhag Lenke til kommentar
Ståle Skrevet 8. april 2007 Del Skrevet 8. april 2007 Funker for meg... og $_SERVER['REMOTE_ADDR'] for IP Lenke til kommentar
Teig Skrevet 8. april 2007 Forfatter Del Skrevet 8. april 2007 (endret) Som sagt, så har jeg funnet en måte å blokkere URLs på, og jeg lurer på om det går an å blokkere html-elementer på samme måte. Under er koden for blokkeringen av URLs. $name = htmlspecialchars(stripslashes($name)); $msn = htmlspecialchars(stripslashes($msn)); $age = htmlspecialchars(stripslashes($age)); $message = htmlspecialchars(stripslashes($message)); if(strstr($message, "www.")) { die("Meldingen kan ikke inneholde slike tegn."); } Endret 8. april 2007 av hakhag Lenke til kommentar
Runar0 Skrevet 8. april 2007 Del Skrevet 8. april 2007 se på funksjonen som ståle posta, det burde kunne brukest Lenke til kommentar
ilpostino Skrevet 8. april 2007 Del Skrevet 8. april 2007 uavhengig av denne tråden har jeg også testet strip_tags. Finnes det noen måte å finne ut om denne funksjonen faktisk har fjernet html-tags fra en tekststreng? (du kan jo selvfølgelig sammenligne tekstsringene etterpå men jeg har lyst på en litt lekrere måte enn det). Lenke til kommentar
Rinox Skrevet 8. april 2007 Del Skrevet 8. april 2007 (endret) Jeg ville brukt htmlentities() hvis det ikke er snakk om noen database... Hvis du har en database som innleggene skrives inn i gjør du det lurt å bruke mysql_real_escape_string(). Begge disse funksjonene kan du lese om på php.net og du kan finne forskjeller mellom den og deres egenskaper her: http://www.designhjelp.com/forum/viewtopic.php?t=139 Der var det noen som spurte om dette Endret 8. april 2007 av Rinox Lenke til kommentar
ilpostino Skrevet 8. april 2007 Del Skrevet 8. april 2007 jeg tok opp endel andre virkemidler for hvordan en skal sikre en gjestebok i denne tråden. trådstarter kan kanskje bruke noe av dette i tilleg til å sjekke for html. Lenke til kommentar
BigJackW Skrevet 8. april 2007 Del Skrevet 8. april 2007 (endret) Bruk quote_smart. <?php function quote_smart($value) { if( is_array($value) ) { return array_map("quote_smart", $value); } else { if( get_magic_quotes_gpc() ) { $value = stripslashes($value); } if( $value == '' ) { $value = 'NULL'; } if( !is_numeric($value) || $value[0] == '0' ) { $value = "'".mysql_real_escape_string($value)."'"; } return $value; } } ?> Endret 8. april 2007 av BigJackW Lenke til kommentar
Teig Skrevet 8. april 2007 Forfatter Del Skrevet 8. april 2007 Takk alle sammen, jeg fikk det til nå Lenke til kommentar
Hayer Skrevet 9. april 2007 Del Skrevet 9. april 2007 eller bare string htmlentities ( string $string [, int $quote_style [, string $charset]] ) This function is identical to htmlspecialchars() in all ways, except with htmlentities(), all characters which have HTML character entity equivalents are translated into these entities. Lenke til kommentar
Teig Skrevet 9. april 2007 Forfatter Del Skrevet 9. april 2007 og $_SERVER['REMOTE_ADDR'] for IP 8332260[/snapback] Men hvor vises da IP adressen til den brukeren? Lenke til kommentar
Ståle Skrevet 9. april 2007 Del Skrevet 9. april 2007 $ip_her = $_SERVER['REMOTE_ADDR']; Lenke til kommentar
Teig Skrevet 10. april 2007 Forfatter Del Skrevet 10. april 2007 Okay, så nå skal det være mulig å blokke en IP adresse, men i gjesteboka kommer denne feilmeldingen opp: Warning: in_array() [function.in-array]: Wrong datatype for second argument Det er ikke noe galt med koden så vidt jeg eller noen andre kan se. Koden: <?php $host = "localhost"; $user = "hakhagn_test"; $pass = "1s5N68x8"; $db = "hakhagn_test"; $conn = mysql_connect("$host","$user","$pass"); mysql_select_db($db) or die('En feil skjedde med oppkobling mot databasen!'); if (isset($_POST['send'])) { $name = $_POST['name']; $msn = $_POST ['msn']; $age = $_POST['age']; $message = $_POST['message']; $time = date('l dS \of F Y h:i:s A'); $ip = $_SERVER['REMOTE_ADDR']; $BannedIPs = array("193.217.79.197"); //html og script $text1 = (strip_tags($_POST['message'])); if (!($text1 == $_POST['message'])) { die("Meldingen kan ikke inneholde html-elementer."); } //linker $name = mysql_real_escape_string(stripslashes($name)); $msn = mysql_real_escape_string(stripslashes($msn)); $age = mysql_real_escape_string(stripslashes($age)); $message = mysql_real_escape_string(stripslashes($message)); if (strstr($message, "www.")) { die("Meldingen kan ikke inneholde linker."); } if (empty($name )) { echo 'Du har ikke skrevet navnet ditt! <br>'; } elseif (empty($age )) { echo 'Du har ikke skrevet hvor gammel du er! <br>'; } elseif (empty($message )) { echo 'Du må skrive inn en melding!!<br>'; } elseif (!in_array($ip, $BannedIPs)) { mysql_query("INSERT INTO gjestebok (time, msn, message, name, age, ip) VALUES ('$time', '$msn', '$message', '$name', '$age', '$ip')"); echo '<b>Ditt innlegg er nå sendt!</b><br><br>'; } else { echo 'Ditt innlegg ble ikke lagret.'; } } else { if (in_array($ip, $BannedIPs)) { echo 'Du kan desverre ikke skrive i gjesteboken, fordi din ip-addresse er bannet.'; } else { echo ' <b> Hvis du har lyst til å legge til en kommentar til siden min, kan du gjøre det her. IP adressen din vil bli logget, så no funny business! </b> <br> <form action="" method="post"> Navn <br> <input type="text" name="name"><br /> <br> Msn-adresse (valgfritt) <br> <input type="text" name="msn"> <br /> <br> Din alder <br> <input type="text" name="age"> <br /> <br> Melding <br> <textarea class="melding" name="message"></textarea> <br> <input type="submit" name="send" value="Send"> <hr v align="left" width="665px"> </form> '; } } // Skrive ut innlegg $get = mysql_query("SELECT * FROM gjestebok"); if (mysql_num_rows($get) == 0) { echo 'Ingen innlegg funnet'; } else { while ($row = mysql_fetch_array($get)) { // Lage en loop forskrive ut alle innleggene echo '<b>Navn:</b> <br>'. htmlspecialchars($row['name']).'<br>'; echo '<b>Tid:</b><br>'. htmlspecialchars($row['time']).'<br>'; echo '<b>MSN:</b>'. htmlspecialchars($row['msn']).'<br>'; echo '<b>Alder:</b><br>'. htmlspecialchars($row['age']).'<br>'; echo '<b>Melding:</b><br>'. htmlspecialchars($row['message']).'<br><br>'; } } ?> Hvordan får jeg fjernet den feilmeldingen? Lenke til kommentar
Gjest Slettet+142 Skrevet 10. april 2007 Del Skrevet 10. april 2007 (endret) ehm.. prøv å sette disse to variablene UTENFOR if-en din. bare legg de inn sammen med database-variablene eller noe sånt. vet ikke om det hjelper.. men. disse to: $ip = $_SERVER['REMOTE_ADDR']; $BannedIPs = array("193.217.79.197"); Endret 10. april 2007 av Slettet+142 Lenke til kommentar
matnorr Skrevet 10. april 2007 Del Skrevet 10. april 2007 (endret) Hei Du kan jo prøve denne, fungerer ikke det skjønner jeg ærlig talt ikke hva som er feil. <?php $host = "localhost"; $user = "hakhagn_test"; $pass = "1s5N68x8"; $db = "hakhagn_test"; $ip = $_SERVER['REMOTE_ADDR']; $BannedIPs = array("192.168.1.100", "10.0.0.1"); $conn = mysql_connect("$host","$user","$pass"); mysql_select_db($db) or die('En feil skjedde med oppkobling mot databasen!'); if (isset($_POST['send'])) { $name = $_POST['name']; $msn = $_POST ['msn']; $age = $_POST['age']; $message = $_POST['message']; $time = date('l dS \of F Y h:i:s A'); //html og script $text1 = (strip_tags($_POST['message'])); if (!($text1 == $_POST['message'])) { die("Meldingen kan ikke inneholde html-elementer."); } //linker $name = mysql_real_escape_string(stripslashes($name)); $msn = mysql_real_escape_string(stripslashes($msn)); $age = mysql_real_escape_string(stripslashes($age)); $message = mysql_real_escape_string(stripslashes($message)); if (strstr($message, "www.")) { die("Meldingen kan ikke inneholde linker."); } if (empty($name)) { echo 'Du har ikke skrevet navnet ditt! <br>'; } elseif (empty($age)) { echo 'Du har ikke skrevet hvor gammel du er! <br>'; } elseif (empty($message)) { echo 'Du må skrive inn en melding!!<br>'; } else { if (in_array($ip, $BannedIPs)) { echo 'Du kan desverre ikke skrive i gjesteboken, fordi din ip-addresse er bannet.'; } else { mysql_query("INSERT INTO gjestebok (time, msn, message, name, age, ip) VALUES ('$time', '$msn', '$message', '$name', '$age', '$ip')"); echo '<b>Ditt innlegg er nå sendt!</b><br><br>'; } } } else { if (in_array($ip, $BannedIPs)) { echo 'Du kan desverre ikke skrive i gjesteboken, fordi din ip-addresse er bannet.'; } else { echo ' <b> Hvis du har lyst til å legge til en kommentar til siden min, kan du gjøre det her. IP adressen din vil bli logget, så no funny business! </b> <br> <form action="" method="post"> Navn <br> <input type="text" name="name"><br /> <br> Msn-adresse (valgfritt) <br> <input type="text" name="msn"> <br /> <br> Din alder <br> <input type="text" name="age"> <br /> <br> Melding <br> <textarea class="melding" name="message"></textarea> <br> <input type="submit" name="send" value="Send"> <hr v align="left" width="665px"> </form> '; } } // Skrive ut innlegg $get = mysql_query("SELECT * FROM gjestebok ORDER BY id DESC"); if (mysql_num_rows($get) == 0) { echo 'Ingen innlegg funnet'; } else { while ($row = mysql_fetch_array($get)) { // Lage en loop forskrive ut alle innleggene echo '<b>Navn:</b> <br>'. htmlspecialchars($row['name']).'<br>'; echo '<b>Tid:</b><br>'. htmlspecialchars($row['time']).'<br>'; echo '<b>MSN:</b>'. htmlspecialchars($row['msn']).'<br>'; echo '<b>Alder:</b><br>'. htmlspecialchars($row['age']).'<br>'; echo '<b>Melding:</b><br>'. htmlspecialchars($row['message']).'<br><br>'; } } ?> Endret 10. april 2007 av matnorr Lenke til kommentar
grimjoey Skrevet 11. april 2007 Del Skrevet 11. april 2007 (endret) Under "Ditt innlegg ble ikke lagret" har du en høyre curly bracket for mye. Det fører til: if (isset($_POST['send'])) { $BannedIPs = Array("blabla"); .... .... } else { if (in_array("blabla",$BannedIPs)) { ... } } Ved in_array() er ikke $BannedIPs satt, så funksjonen ser den som 'NULL' og gir feilmelding. Bruk indentering! ... For å nekte alle tags og alt mulig kan man skrive ut postene mellom <pre> og </pre> tags. Teksten mellom vil vises som ren tekst inkludert eventuelle tags. Altså tags blir ikke parset av browseren bortsett fra "</pre>" nødvendigvis. For å hindre at en bruker skriver inn "</pre>" og koder etter det, kan man bruke [edit: preg_replace byttet ut med...] str_replace("</pre>","",$message) hvor $message er data hentet fra tabell som skal skrives ut som innlegg. Endret 12. april 2007 av grimjoey Lenke til kommentar
Runar0 Skrevet 12. april 2007 Del Skrevet 12. april 2007 preg_replace bør ikkje brukest når du ikkje trenger å bruke eit pattern, fordi str_replace vil kunne utføre jobben raskere. Bedre å gjøre </pre> til </pre> så ser koden ok ut. (Med mindre < ikkje blir vist som < i <pre> da, det er eg ikkje heilt sikker på) PHP $message = str_replace("</pre>","</pre>",$message) Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå