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
1if (isset($_POST['odeslano'])) 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. 1<?php <?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: |
||
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 :(
1<?php <?php
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
{
$ref = $REMOTE_ADDR;
$datum = StrFTime("%d/%m/%Y %H:%M:%S", Time());
// Připojení k databázi.
include '../db.php';
// Správné nastavení češtiny.
$objekt_vysledku = mysqli_query($db_spojeni, "SET NAMES 'UTF8'");
// Vytvoření SQL příkazu typu INSERT.
$sql_prikaz =
"INSERT INTO muzi(jmeno, datum, ip_adresa, text) "
."VALUES('"
.mysqli_real_escape_string($db_spojeni,$_POST['jmeno'])
."','"
.mysqli_real_escape_string($db_spojeni,$datum)
."','"
.mysqli_real_escape_string($db_spojeni,$ref)
."','"
.mysqli_real_escape_string($db_spojeni,$_POST['text'])
."')"
;
// Zaslání SQL příkazu do databáze.
$objekt_vysledku = mysqli_query($db_spojeni, $sql_prikaz);
header("Location: forum.php?odeslano");
}
}
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../style.css">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta name="author" content="; kittlerpeta@centrum.cz: ">
<meta name="description" content="Velký Beranov - fotbal, muži (fórum)">
<link rel="shortcut icon" href="../images/favicon.jpg">
<title>Velký Beranov - fotbal</title>
</head>
<?php
include '../db.php';
$objekt_vysledku = mysqli_query($db_spojeni, "SET NAMES 'UTF8'");
$objekt_vysledku = mysqli_query($db_spojeni,
'SELECT * FROM ip_ban');
while ($radek = mysqli_fetch_array($objekt_vysledku))
{
$ban[] = $radek['ip_adresa'];
}
mysqli_free_result($objekt_vysledku);
if ($db_spojeni)
mysqli_close($db_spojeni);
$ip = $_SERVER['REMOTE_ADDR'];
if(in_array($ip, $ban)){
include ("ban.php");
}
else
{
?>
<body>
<div id="main">
<div id="head">
<img alt='' src="../images/hlavicka_vb_c.jpg" onmouseover="this.src = '../images/hlavicka_vb_b.jpg'" onmouseout="this.src = '../images/hlavicka_vb_c.jpg'">
</div>
<div style="padding: 0 0 0 0;">
<div id="levy_menu">
<div id="menu">
<ul class="glossymenu">
<li><a href="../home_novinky.php">Home</a></li>
<li><a href="../kontakt.php">Kontakt</a></li>
<li><a href="../ml_zaci/ml_zaci.php">Mladší žáci</a></li>
<li><a href="../st_zaci/st_zaci.php">Starší žáci</a></li>
<li><a href="../dorost/dorost.php" >Dorost</a></li>
<li><a href="../muzi/muzi.php" class="trida">Muži</a></li>
</ul>
</div>
<div style="position: absolute; left: 20px; top: 400px;"><img src="images/muzi_vlevo.jpg" alt=''> </div>
<div style="position: absolute; z-index : 2; padding: 200px 0px 5px 250px;"><img src="images/mic.jpg" alt=''> </div>
</div>
<div style="float: left; width: 447px; background-image: url(../images/pozadi_menu.jpg); background-repeat: repeat-x;">
<div style="width: 355px; min-height:550px; position: relative; left: 45px; top: 20px;">
<div style="max-width:355px; height: 15px; background-color: #98B22F; text-align: right; line-height: 0.8;">
<table>
<tr>
<td style="width: 110px;"></td>
<td style="width: 50px;"><a href="forum.php">Fórum</a></td>
<td style="width: 78px;"><a href="galerie/index.php">Fotogalerie</a></td>
<td style="width: 52px;"><a href="http://nv.fotbal.cz/domaci-souteze/kao/vysocina/jihlava/souteze.asp?soutez=612A1A">Tabulka</a></td>
<td style="width: 50px;"><a href="hraci.php">Hráči</a></td>
</tr>
</table>
</div>
<div style="position: relative; top: 10px; width=355px;">
<form name="odeslano" action="#" method="post">
<b><font color="#808080">-Jméno:</font></b><br>
<input name="jmeno" size="10"><br>
<b><font color="#808080">-Zpráva:</font></b><br>
<textarea name="text" onKeyPress="maxpocet(this,400)" onKeyUp="maxpocet(this,400)" rows="3" cols="30" id="policko">
</textarea><br>
<b><font color="#808080">-Spam</b> (napiš číslicí)</font><br>
<b><font color="#808080">10 - 5 =</font></b><input name="spam" size="2"><br> <br>
<input type="submit" name="odeslano" value="Odeslat zprávu">
</form>
<div id="infobox" style="visibility:hidden; position:absolute; top: 1px; left: 135px; color:white; font-size:11px;">
Text ve zprávě je omezen na 400 znaků<br>
Zbývá <b><span id="zbyva"></span></b> znaků<br>
Nyní je napsáno <b><span id="napsano"></span></b> znaků
</div>
<script type="text/javascript" src="../script.js"></script>
<div id="ip_adresa">
Při zaslání příspěvku do tohoto fóra, je zapisována Vaše ip-adresa, chovejte se proto tak, jak máte. Vyjadřujte se slušně
</div>
<?php
if(isset($_GET["odeslano"]))
echo "<div id=\"odeslano\"><img src=../images/ok.png height=20px width=20px><span style=\"vertical-align: top\">Vaše zpráva byla úspěšně odeslána</span></div>";
?>
<hr>
<?php
/********Vypis****************************************************************************************************/
// Připojení k databázi.
include '../db.php';
// Správné nastavení češtiny.
$objekt_vysledku = mysqli_query($db_spojeni,"SET NAMES 'UTF8'");
// zjištění počtu řádků v tabulce:
$radku=MySQLi_Fetch_Row(MySQLi_Query($db_spojeni,"SELECT COUNT(0) FROM muzi"));$radku=$radku[0]/20;
// Zaslání SQL příkazu do databáze.
$strana=IntVal($_GET['strana']); //číselná hodnota ?strana=
$strana=$strana*20;
$objekt_vysledku = mysqli_query($db_spojeni,"SELECT * FROM muzi ORDER BY id DESC LIMIT $strana,20");
Echo '<div style="background-color: #2C292A; text-align: center; color: white; ">';
Echo 'Strana: ';
For($i = 0; $i < $radku; $i++) Echo '<a href="'.$_SERVER["SCRIPT_NAME"].'?strana='.Floor($i).'">'.Floor($i + 1).'</a>'.($i + 1 < $radku ? ', ' : '');
Echo '</div><br>';
// Zobrazení všech vrácených dat.
while ($radek = mysqli_fetch_array($objekt_vysledku))
{
echo '<font color="white"><b>',$radek['jmeno'],'</b><br>';
echo '',$radek['datum'],'<br>';
echo '',$radek['text'],'<br></font>';
echo '<br>';
}
// Zavření objektu výsledku, protože už ho nebudeme používat.
mysqli_free_result($objekt_vysledku);
// Odpojení od databáze.
if ($db_spojeni)
mysqli_close($db_spojeni);
Echo '<div style="background-color: #2C292A; text-align: center; color: white; ">';
Echo 'Strana: ';
For($i = 0; $i < $radku; $i++) Echo '<a href="'.$_SERVER["SCRIPT_NAME"].'?strana='.Floor($i).'">'.Floor($i + 1).'</a>'.($i + 1 < $radku ? ', ' : '');
Echo '</div>';
?>
</div>
</div>
</div>
<div id="pravy_
|
||
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
1<div id="pravy_menu"> <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íš:
1if (isset($_POST['odeslano'])) 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 <?php
ob_start();
?>
a uplně nakonec celého souboru: <?php <?php
ob_end_flush();
?> |
||
Radovan789 Profil * |
#18 · Zasláno: 16. 10. 2010, 18:29:38
<?php <?php
ob_start();
?> Na začátek souboru. <?php <?php
ob_end_flush();
?> Na konec souboru. Omlouvám se za překlep |
||
akali Profil * |
#19 · Zasláno: 16. 10. 2010, 18:31:36
|
||
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
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0