| 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: 14 let
|
|||
0