Autor | Zpráva | ||
---|---|---|---|
Solidgauleiter Profil |
#1 · Zasláno: 20. 6. 2012, 17:55:12 · Upravil/a: Solidgauleiter
Zdravím. Mám problém. Spravil som jednoduchú návštevnú knihu. je tam aj Antispamová ochrana a i tak tam spamuje dáky robot. Musím to ptm mazať ručne.
Kód: <?php $action = $_POST['action']; $meno = $_POST['meno']; $mail = $_POST['mail']; $text = $_POST['text']; $kontrola = $_POST['kontrola']; function antispam($email, $meno){ $return = "<script type=\"text/javascript\"><!--\ndocument.write('<a href=\"' + 'mailto:' + '"; for($i=0;$i<strlen($email);$i++){ $code .= $email{$i}=='@' ? "' + '".ord("@")."' + '" : "".ord($email{$i}).";"; } $return .= $code."' + '\">' + '".$meno."' + '<\/a>');\n--></script>"; RETURN $return; } ?> <center> <form name="contactform" id="contactform" method="post" action="navstevna-kniha.php"> <table width="450px"> <tr> <td valign="top"> <label for="meno">Meno: *</label> </td> <input type="hidden" value="uloz" name="action" /> <td valign="top"> <input type="text" name="meno" maxlength="25" size="30" value="<?php echo $meno ?>"> </td> </tr> <tr> <td valign="top"> <label for="text">E-mail:</label> </td> <td valign="top"> <input type="text" name="mail" maxlength="50" value="<?php echo $mail ?>" size="30" /> </td> </tr> <tr> <td valign="top"> <label for="text"><br>Text: *</label> </td> <td valign="top"> <textarea name="text" maxlength="1000" cols="42" value="<?php echo $text ?>" rows="6"><?php echo $text ?></textarea> </td> </tr> <tr> <td> </td> <td>Ochrana proti spamu: 2 + 3 = <input type="text" name="kontrola" value="<?php echo $kontrola ?>" size="8" /> </td> </tr> </table> <button type="submit" name="odoslat" value="Odoslať!"> Odoslať !</button> <h2>Položky označené hviezdičkou (*) sú povinné !</h2> <h3> Pizza Západ 2012</h3> </form> <div class="vysledok"> <table> <?php if ($action=='uloz'): $subor = "kniha.body"; @$ext = fopen($subor, "r"); @$obsah = fread($ext, filesize($subor)); @FClose($ext); if($kontrola != "5"): echo "<h6>Nesprávny údaj pri ochrane proti spamu !</h6>"; elseif(($text=="") or ($meno=="")): echo "<h6>Nie sú vyplnené všetky povinné údaje !</h6>"; else: $ext = fopen("kniha.body", "w"); $mail = HTMLSpecialCHars($mail); if($mail == "") $mail = ""; else $mail = antispam($mail,$mail); $meno = HTMLSpecialCHars($meno); $text = HTMLSpecialCHars($text); $tab = "<tr><td width=\"250\" ><b>".$meno." | ".Date(" j.n.Y H:i")."</b></td></tr> <tr><td colspan=\"2\"><i>".$text."</i></td></tr> <tr><td width=\"150\" align=\"right\"><h3>".$mail."</h3></td></tr> <tr><td width=\"350\"><hr/></td></tr>"; fputs($ext, "$tab"); fputs ($ext, "$obsah"); FClose($ext); @$ext = fopen("kniha.body", "r"); @fpassThru($ext); endif; else: @$ext = fopen("kniha.body", "r"); @fpassThru($ext); endif; ?> Príklad: http://pizza-zapad.sk/navstevna-kniha.php |
||
LaMMa Profil |
#2 · Zasláno: 20. 6. 2012, 19:10:07
"Ochrana proti spamu: 2 + 3 ="
to je pre robota moc lahke, co tak to pozmenit aspon takto: "Kolko je 3 - 2 (napiste celym slovom):" a budes to kontrolovat: if( strtolower($kontrola) !="jedna"):
|
||
LaMMa Profil |
#3 · Zasláno: 20. 6. 2012, 22:56:48
Ale spamuje ti to slusne :) ... este si prehod ten kod na ukladanie pred formular a po uspesnom odoslani vymaz $_POSTy vo formulari.
|
||
Marek88 Profil |
Tu ochranu proti spamu je potřeba udělat trochu komplikovanější... Roboti umějí najít a vyplnit matematický příklad do inputu, který následuje.
Zkusil bych něco jako: <span>Napište, kolik je 3+2:</span> <input type="text" name="antispam" class="schovane"> <span class="schovane">www:</span> <input type="text" name="www"> Třída schovane obsahuje vlastnost display: none .
Uživatel uvidí: Napište, kolik je 3+2: [input, kam se má zapsat číslo pět] Napište, kolik je 3+2: [input, kam se nesmí nic napsat] www: [input, kam se má zapsat číslo pět] Na tohle už (snad) žádný běžný robot stačit nebude. Kód můžeš samozřejmě různě modifikovat. Tohle je jen pro ilustraci. Navíc je lepší pro pohodlí uživatele vyplnit hodnotu pomocí js a následně pomocí js celou antispamovou ochranu schovat. Ty spamovým robotům hodně ulehčuješ práci tím, že tvůj zápis ochrany proti nim odpovídá jednoduchému regulárnímu výrazu: [0-9]+ *[+-*/] *[0-9]+ *[=:]? *<input // snad tam nemám chybu, píšu to rychle... name a odeslat správný požadavek na server).
|
||
Solidgauleiter Profil |
#5 · Zasláno: 23. 6. 2012, 12:58:11
Zatiaľ som skúsil tam spraviť komplikovanejší príklad. Je tam delenie odzadu. Takže je tam 2 : 5, ale je tam napísané ž deľte odzadu.. Takže 5 : 2 .. A zatiaľ nič no :) Uvidíme.. ak predsa tak spravím toto čo ste mi napísali..
|
||
LaMMa Profil |
#6 · Zasláno: 23. 6. 2012, 13:31:23
Si mal rovno povedať, že sa chceš zbaviť komentárov od ľudí a nie len spamu :D
|
||
Keeehi Profil |
#7 · Zasláno: 23. 6. 2012, 13:44:29
Solidgauleiter:
Tak tam dej alespoň příklad, co ti bude vycházet v celých číslech. |
||
Časová prodleva: 11 let
|
0