Autor Zpráva
Hava
Profil *
Ahoj vím že už se to tady několikrát řešilo, ale bohužel mi to pořád nejde nějak do hlavy a nebo mi to snejně formulář nechraní.

Zkusil jsem tento script jako ochranu proti spma robotum:

<span id="spamprotirobotum">Ochrana proti spamu. Napište prosím číslici čtyři: <input type="text" name="robot" value="" id="protirobotum"><input type="hidden" name="kontrolni" value="ok"></span>
<script>
/* tento skript vloží do příslušného políčka  */
document.getElementById("protirobotum").value="4";
document.getElementById("spamprotirobotum").style.display = "none";
</script>


dále pak kontroluji:
 <?php
            $BudemeZobrazovat=true;
                if (isSet($_POST["odeslano"]))
                {
                    if (strlen($_POST["vzkaz"])==0 || strlen($_POST["vzkaz"])>700 || strlen($_POST["jmeno"])==0 || strlen($_POST["email"])==0  && ((!isset($_POST['robot'])) || ($_POST['robot']!='4')))
                    {
                      echo "Nevyplnili jste všechny údaje a nebo je vzkaz příliš velký!";
                    }
                    else
                    {
                      $BudemeZobrazovat=false;
                      ?>
                   <?php include "odesli.php"?>
                      <?php
                    }
                }
              if ($BudemeZobrazovat):
              ?>


Nevím zda je to šťastné řešení a nebo zda nepužít něco jiného?
Pořád čtu o captche ale bohužel jsem nikde nenašel srozumitelný návod jak na ní.

Všem moc děkuji.
Majkl578
Profil
Na captchu bych z vlastní zkušenosti doporučil reCaptchu, je to již hotový systém, který používáš přes API.
Zalíbila se mi jejich myšlenka - každý captcha "kód" nějak pomůže - využívá lidí k rozpoznávání znaků, které nekodáže OCR při digitalizaci novin přečíst.
Hava
Profil *
Jo na tu jsem taky koukal ale popravdě jsem z jejich stránek moc nepochopil jak jí implementovat do mého formuláře:
<?php
            $BudemeZobrazovat=true;
                if (isSet($_POST["odeslano"]))
                {
                    if (strlen($_POST["vzkaz"])==0 || strlen($_POST["vzkaz"])>700 || strlen($_POST["jmeno"])==0 || strlen($_POST["email"])==0  && ((!isset($_POST['robot'])) || ($_POST['robot']!='4')))
                    {
                      echo "Nevyplnili jste všechny údaje a nebo je vzkaz příliš velký!";
                    }
                    else
                    {
                      $BudemeZobrazovat=false;
                      ?>
                   <?php include "odesli.php"?>
                      <?php
                    }
                }
              if ($BudemeZobrazovat):
              ?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>">
  <table class="tabulka_forum">
    <tr>
      <td class="text_jmeno">Jméno:</td>
      <td><input size="35" name="jmeno" cols="35" value="<?php if (isSet($_POST['jmeno'])) echo $_POST['jmeno'];?>"></td>
    </tr>
    <tr>
      <td class="text_jmeno">Email:</td>
      <td><input size="35" name="email" cols="35" value="<?php if (isSet($_POST['email'])) echo $_POST['email'];?>"></td>
    </tr>
    <tr>
      <td class="text_jmeno">Nadpis tématu:</td>
      <td><input size="55" name="nadpis" cols="55" value="<?php if (isSet($_POST['nadpis'])) echo $_POST['nadpis'];?>"></td>
    </tr>
    <tr>
      <td class="text_jmeno">Váš vzkaz:</td>
      <td><textarea rows="6" name="vzkaz" cols="40"><?php if (isSet($_POST['vzkaz'])) echo $_POST['vzkaz'];?></textarea></td>
    </tr>
    <tr>
      <td class="text_jmeno">&nbsp;</td>
      <td></td>
    </tr>
   </table>
   <input type="hidden" name="odeslano" value="true">
   <input type="Submit" name="odeslat" value=">> Uložit">
</form>


Na svých stránkách uvádějí toto že stačí vložit mě se to bohužel nepovedlo, mužeš mi poradit jak to propojit s tím vrchním kódem?
require_once('recaptchalib.php');
$publickey = "..."; // you got this from the signup page
echo recaptcha_get_html($publickey);


require_once('recaptchalib.php');
$privatekey = "...";
$resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

if (!$resp->is_valid) {
  die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
       "(reCAPTCHA said: " . $resp->error . ")");
}
Majkl578
Profil
Zkus něco takového:
<?php
//recaptcha
require_once('recaptchalib.php');
//tyto klíče získany při registraci na recaptcha.net
$publicKey = '...';
$privateKey = '...';


$budemeZobrazovat=true;

if (isset($_POST["odeslano"])) {
$captchaResponse = recaptcha_check_answer(
							$privatekey,
							$_SERVER["REMOTE_ADDR"],
							$_POST["recaptcha_challenge_field"],
							$_POST["recaptcha_response_field"]
						);
	if (strlen($_POST["vzkaz"]) == 0 || strlen($_POST["vzkaz"]) > 700 || strlen($_POST["jmeno"]) == 0 || strlen($_POST["email"]) == 0) {
		echo "Nevyplnili jste všechny údaje a nebo je vzkaz příliš velký!";
	} elseif (!$captchaResponse->is_valid) {
		echo "Captcha kód nebyl správně vyplněn";
	} else {
		$budemeZobrazovat = false;
		include "odesli.php";
	}
}

if ($budemeZobrazovat) {
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
  <table class="tabulka_forum">
    <tr>
      <td class="text_jmeno">Jméno:</td>
      <td><input size="35" name="jmeno" cols="35" value="<?php if (isset($_POST['jmeno'])) echo $_POST['jmeno'];?>"></td>
    </tr>
    <tr>
      <td class="text_jmeno">Email:</td>
      <td><input size="35" name="email" cols="35" value="<?php if (isset($_POST['email'])) echo $_POST['email'];?>"></td>
    </tr>
    <tr>
      <td class="text_jmeno">Nadpis tématu:</td>
      <td><input size="55" name="nadpis" cols="55" value="<?php if (isset($_POST['nadpis'])) echo $_POST['nadpis'];?>"></td>
    </tr>
    <tr>
      <td class="text_jmeno">Váš vzkaz:</td>
      <td><textarea rows="6" name="vzkaz" cols="40"><?php if (isset($_POST['vzkaz'])) echo $_POST['vzkaz'];?></textarea></td>
    </tr>
    <tr>
      <td class="text_jmeno">&nbsp;</td>
      <td></td>
    </tr>
    <tr>
      <td class="text_jmeno">Captcha:</td>
      <td><?php echo recaptcha_get_html($publicKey); ?></td>
    </tr>
   </table>
   <input type="hidden" name="odeslano" value="true">
   <input type="Submit" name="odeslat" value=">> Uložit">
</form>

<?php
}
?>

Do těch dvou proměnných na začátku (*Key) musíš doplnit klíče, které dostaneš po bezplatné registraci na jejich webu.
Hava
Profil *
Tak jsem po registraci vyplnil tyto dva kliče:

$publicKey = '...';
$privateKey = '...';

Ale stejně mi to hlasí:
To use reCAPTCHA you must get an API key from http://recaptcha.net/api/getkey

Stačí vyplnit pouze toto a nebo se ještě něco někde musí nastavit?
treba tady?: recaptchalib.php
Hava
Profil *
Už to mám bylo tam malé a velké k v privateKey...

Myslíš si že takováto ochrana je dostačující a nebo je lepší třeba udělat nutnou registraci do fóra a až jako přihlášený uživatel že budeš moct vkládat příspěvky?
Majkl578
Profil
Hava:
To si myslím záleží na povaze dané diskuze. Třeba tady na DJPW můžou přispívat jak registrovaní, tak neregistrovaní. A tento přístup se mi líbí. Nerad bych nutil uživatele registrovat se jen proto, aby mohl napsat jeden příspěvek (a pak už tam nikdy nezavítal).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: