Autor | Zpráva | ||
---|---|---|---|
akali Profil * |
#1 · Zasláno: 16. 10. 2010, 17:04:19
Ahoj, měl bych dotaz ohledně smapů na fóru. Tady je kód
if (isset($_POST['odeslano'])) { if (empty($_POST['jmeno']) || empty($_POST['text']) || ($_POST['spam']!='5')) { echo "<div id=\"neodeslano\"> <table align=left> <tr><td>Vaše zpráva nebyla odeslána! Jedno z políček</td></tr> <tr><td> má prázdnou, nebo nesprávnou hodnotu!</td></tr> </table></div>"; } else ----- pokračování php kódu---- a pak mám tři políčka v html <input name="jmeno" size="10"><br> <input name="text" size="10"><br> <input name="spam" size="10"><br> Myslel jsem, že takto zabráním spamům, když napíšu před input "spam" příklad 10-5 a nevyplní se 5 tak se to neodešle, ale omyl je pravdou, spamů je víc a víc. Pomohl by mi někdo vyřešit tuto situaci? Popřípadě jak se to dělá v dnešní době? |
||
Radovan789 Profil * |
#2 · Zasláno: 16. 10. 2010, 17:08:15
Já například předpokládám že internetoví bot nemá zaplé Cookies a většina uživatelů zaplé cookies má.
|
||
akali Profil * |
#3 · Zasláno: 16. 10. 2010, 17:11:04
To si mi poradil. Nevím z toho hlavu ani patu.
|
||
Radovan789 Profil * |
#4 · Zasláno: 16. 10. 2010, 17:18:52
Takže:
vytvořím si 2 proměné s (int) od 1 do 10 a pak třeba můžu zapsat do dokumentu. <?php $promena1 = mt_rand(1,10); $promena2 = mt_rand(1,10); $cookie = md5(md5($promena1+$promena2)."tajná sůl"); setcookie("cookie",$cookie); ?> <script type="text/javascript"> document.write(["<?=$promena1?>", "<?=$promena2?>"].join(" + ")); </script> <input type="text" name="email"> Doporučuji použít name=email protože boti tam začnou cpát emaily. A když se to postne tak: if ($_COOKIE["cookie"] == md5(md5(POST["email"])."tajná sůl")) { echo "vse ok"; } |
||
Bubák Profil |
#5 · Zasláno: 16. 10. 2010, 17:23:49
akali:
Pro jistotu se zeptám, jde o spam od spambotů, a ne od lidí, spamerů? Zdejší antispam používá něco podobného, hodnotu vyplňuje JavaScript. Kdo má JS vypnutý, musí hodnotu vyplnit ručně. Dříve bylo číslo jednomístné, pak se nějaký spam od spambotů začal objevovat, nyní je číslo dvoumístné a spam od spambotů se neobjevuje. |
||
Radovan789 Profil * |
#6 · Zasláno: 16. 10. 2010, 17:26:56
Bubák:
Co myslíš tím Zdejší antispam ? |
||
akali Profil * |
#7 · Zasláno: 16. 10. 2010, 17:51:57
Je to rozhodně od spam botů. Přes noc jich přibyde zhruba 25
S cookies jsem na webu ještě nikdy nepracoval a ten návod od Radovana nějak nechápu. Spíš ani nevím jak to do mýho kódu zapracovat. |
||
Radovan789 Profil * |
#8 · Zasláno: 16. 10. 2010, 18:06:52
Tak sem pošli celý tvůj kód a já ti to tam přidám.
|
||
akali Profil * |
#9 · Zasláno: 16. 10. 2010, 18:14:14
Možná se tohoto kódu zděsíš, ale nejsem na tom se znalostmi tak jak Vy, bohužel :(
<?php |
||
akali Profil * |
#10 · Zasláno: 16. 10. 2010, 18:16:10
Dokončení kódu, jinak nevím, proč to na každým novým řádku udělalo mezeru
<div id="pravy_menu"> <div id="pravy_obr"> <script type="text/javascript"> var obrazky = new Array("images/vb-jamne.jpg", "images/hriste.jpg", "images/kabiny.jpg"); document.write("<img src='"+obrazky[Math.round(Math.random()*(obrazky.length-1))]+"'>"); document.write("<img src='"+obrazky[Math.round(Math.random()*(obrazky.length-1))]+"'>"); document.write("<img src='"+obrazky[Math.round(Math.random()*(obrazky.length-1))]+"'>"); </script> </div> <div style="position: relative; top: 157px;"><img src="../images/prava_sil.jpg" alt=''></div> </div> </div> <br class="cleaner"> <br> <?php include '../footer.php'; ?> </div> </body> <? } ?> </html> |
||
Radovan789 Profil * |
#11 · Zasláno: 16. 10. 2010, 18:18:30
No tak bych to viděl nějak takhle, doufám že to pochopíš:
if (isset($_POST['odeslano'])) { if (empty($_POST['jmeno']) || empty($_POST['text']) || $_COOKIE["cookie"] != md5(md5(POST["email"])."tajná sůl")) { echo "<div id=\"neodeslano\"> <table align=left> <tr><td>Vaše zpráva nebyla odeslána! Jedno z políček</td></tr> <tr><td> má prázdnou, nebo nesprávnou hodnotu!</td></tr> </table></div>"; } else ----- pokračování php kódu---- a pak mám tři políčka v html <input name="jmeno" size="10"><br> <input name="text" size="10"><br> <?php $promena1 = mt_rand(1,10); $promena2 = mt_rand(1,10); $cookie = md5(md5($promena1+$promena2)."tajná sůl"); setcookie("cookie",$cookie); ?> Kolik je <script type="text/javascript"> document.write(["<?=$promena1?>", "<?=$promena2?>"].join(" + ")); </script> ? <input name="email" size="10"><br> |
||
Radovan789 Profil * |
#12 · Zasláno: 16. 10. 2010, 18:22:48
Mám chybu na řádku 3:
Má tam být: 3... if (empty($_POST['jmeno']) || empty($_POST['text']) || $_COOKIE["cookie"] != md5(md5($_POST["email"])."tajná sůl")) 4... { |
||
akali Profil * |
#13 · Zasláno: 16. 10. 2010, 18:24:09
Jak jste se v tom vyznal? :-)
Ještě mi to hlásí chybku na tomto řádku if (empty($_POST['jmeno']) || empty($_POST['text']) || $_COOKIE["cookie"] != md5(md5(POST["email"])."tajná sůl")) Parse error: syntax error, unexpected '[' in /home/www/velkyberanov-fotbal.cz/subdomeny/www/muzi/forum.php on line 4 |
||
Bubák Profil |
#14 · Zasláno: 16. 10. 2010, 18:24:24
Radovan789:
„Co myslíš tím Zdejší antispam ?“ Antispam použitý v této Diskusi. Kdo si ho chce užít, musí si vypnout JavaScript. Na serveru se v PHP zkontroluje odeslaná hodnota, ale s tím akali nemá problém. |
||
akali Profil * |
#15 · Zasláno: 16. 10. 2010, 18:26:04
Omlouvám se, nevšimnul jsme si Vaší zprávy. Ještě to hlásí chybu zde
setcookie("cookie",$cookie); ?> Warning: Cannot modify header information - headers already sent by (output started at /home/www/velkyberanov-fotbal.cz/subdomeny/www/muzi/forum.php:11) in /home/www/velkyberanov-fotbal.cz/subdomeny/www/muzi/forum.php on line 142 |
||
Radovan789 Profil * |
#16 · Zasláno: 16. 10. 2010, 18:27:10
Bubák:
Zdejší antispam používá něco podobného, hodnotu vyplňuje JavaScript. Kdo má JS vypnutý, musí hodnotu vyplnit ručně. Dříve bylo číslo jednomístné, pak se nějaký spam od spambotů začal objevovat, nyní je číslo dvoumístné a spam od spambotů se neobjevuje. Zřejmě si ten můj anti-spam nepochopil, uživatel musí mít zaplý JS i Cookies ale za nikoho nic nevyplňuje. akali: Vyzkoušej tu opravu co jsem napsal a napiš jestli jede. |
||
Radovan789 Profil * |
#17 · Zasláno: 16. 10. 2010, 18:28:56
akali:
No tak to budete muset dát celého soboru: <?php ob_start(); ?> a uplně nakonec celého souboru: <?php ob_end_flush(); ?> |
||
Radovan789 Profil * |
#18 · Zasláno: 16. 10. 2010, 18:29:38
<?php ob_start(); ?> Na začátek souboru. <?php ob_end_flush(); ?> Na konec souboru. Omlouvám se za překlep |
||
akali Profil * |
#19 · Zasláno: 16. 10. 2010, 18:31:36
Výborně. Nyní to funguje tak, jak má
Snad jen bych byl rád, kdyby jste měl ještě chviličku času a vysvětlil mi tyto dva řádky $cookie = md5(md5($promena1+$promena2)."tajná sůl"); a setcookie("cookie",$cookie); |
||
Radovan789 Profil * |
#20 · Zasláno: 16. 10. 2010, 18:37:13
$cookie = md5(md5($promena1+$promena2)."tajná sůl");
Uděláme si hash (otisk) viz http://cs.wikipedia.org/wiki/MD5 kvuli znepřístupnění hodnoty spam bota. příklad: echo md5("ahoj"); vypíše: 79c2b46ce2594ecbcb5b73e928345492 Tím pádem když třeba zašifrujeme čísla 5+10 tak útočník je nikdy nezjistí. A slovo tajná sůl je jenom takoví přestředek k zabezpečení (viz wikipedie). Takže slovo "tajná sůl" doporučuji změnit na nějaký nesmysl a pak to stejné slovo dát i do podmínky. setcookie("cookie",$cookie); Vytvoří u klienta cookie s názvem cookie a hodnotou $cookie (zašifrovaná informace). viz: http://cs.wikipedia.org/wiki/Cookie Nejsem moc dobrý na vysvětlování. Ale zítra napište jestli tenhle anti-spam funguje :-) |
||
akali Profil * |
#21 · Zasláno: 16. 10. 2010, 18:43:11
možná to nechápu, ale ty slova mám přepsat takto? + přidat do podmínky
$cookie = md5(md5($promena1+$promena2)."nesmyslná slova"); setcookie("nesmyslná slova",$cookie); |
||
Bubák Profil |
#22 · Zasláno: 16. 10. 2010, 18:44:09
Radovan789:
„Zřejmě si ten můj anti-spam nepochopil, uživatel musí mít zaplý JS i Cookies ale za nikoho nic nevyplňuje.“ Pochopil, já popsal antispam Diskuse Jak psát web, přes který spam neprochází, a nepotřebuje cookies. |
||
Radovan789 Profil * |
#23 · Zasláno: 16. 10. 2010, 21:56:34
akali:
Ne... podmínka je IF takže: $cookie = md5(md5($promena1+$promena2)."nesmyslná slova"); + if (empty($_POST['jmeno']) || empty($_POST['text']) || $_COOKIE["cookie"] != md5(md5($_POST["email"])."nesmyslná slova")) |
||
akali Profil * |
#24 · Zasláno: 17. 10. 2010, 10:34:40
Díky za ochotu, vysvětlení a hlavně kvalitní filtr. Dnes jsem na fóru, kam jsem filtr aplikoval nenašel jediný spam, na ostatních bohužel ano. Takže to aplikuji na ostatní. Díky mockrát!
|
||
Časová prodleva: 14 let
|
0