Autor Zpráva
tpilar
Profil
Po tom co mi WWB 6 vygeneroval nějaký nepoužitelný PHP zmetek, jsem sehnal něco jen v Java Scriptu ale obávám se, že mě šéf nebude mít rád až firemní e-mail zaplaví spam.
Znáte v JS captchu a odesílání na e-mail, které by nešlo strojově rozkódovat.
Na stránkách www.reformy.cz mají něco ve stylu, dolova :

SLOVY : ČTRNÁCT plus ŠEST mínus VYGENEROVANÉ NÁHODNÉ ČÍSLO.

Pokud by to celé šlo udělat v Java Scriptu nebo jQuery bylo by to fajn. Ovšem ani ukládání záznamu o tom kdo se přihlašuje v PHP by nebylo marné. - I když po té co jsem dnes s PHP ztratil 3 hodiny .............

Pro inspiraci uvádím mnou, v naivní víře o bezpečnosti obšlehnutý kód v JS :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Simple JavaScript CAPTCHA Generator | Thoughts of a Typical Whiner | TypicalWhiner.com</title>
<link href="css/formcss.css" rel="stylesheet" type="text/css" media="screen" />
</head>

<body background="kod.jpg"; "style="width:342px; height:542px; margin:auto">

<form id="form3" action="#" method="post" onsubmit="return checkform(this);">
    <fieldset>
    <legend>Kontaktní formulář</legend>
    <p class="first">
      <label for="name">Jméno :</label>
      <input type="text" name="name" id="name" size="30" />

      <label for="email">E-mail :</label>
      <input type="text" name="phone" id="phone" size="30" />
     <p>
     </p>
      <label for="phone">Telefon :</label>
      <input type="text" name="phone" id="phone" size="30" />

      <label for="code">Opište kód prosím : > <span id="txtCaptchaDiv" style="color:#F00"></span>
      <input type="hidden" id="txtCaptcha" /></label>
      <input type="text" name="txtInput" id="txtInput" size="30" />
    </p>
  </fieldset>
  <fieldset class="last">
    <p>
      <label for="message">Váš dotaz či názor :</label>
      <textarea name="message" id="message" cols="30" rows="10"></textarea>
    </p>
  </fieldset>
  <p class="submit">
    <button type="submit">Odeslat.</button>
  </p>
</form>

<script type="text/javascript">
    function checkform(theform){
        var why = "";

        if(theform.txtInput.value == ""){
            why += "- Security code should not be empty.\n";
        }
        if(theform.txtInput.value != ""){
            if(ValidCaptcha(theform.txtInput.value) == false){
                why += "- Security code did not match.\n";
            }
        }
        if(why != ""){
            alert(why);
            return false;
        }
    }


//Generates the captcha function
    var a = Math.ceil(Math.random() * 9)+ '';
    var b = Math.ceil(Math.random() * 9)+ '';
    var c = Math.ceil(Math.random() * 9)+ '';
    var d = Math.ceil(Math.random() * 9)+ '';
    var e = Math.ceil(Math.random() * 9)+ '';

    var code = a + b + c + d + e;
    document.getElementById("txtCaptcha").value = code;
    document.getElementById("txtCaptchaDiv").innerHTML = code;

// Validate the Entered input aganist the generated security code function
function ValidCaptcha(){
    var str1 = removeSpaces(document.getElementById('txtCaptcha').value);
    var str2 = removeSpaces(document.getElementById('txtInput').value);
    if (str1 == str2){
        return true;
    }else{
        return false;
    }
}

// Remove the spaces from the entered and generated code
function removeSpaces(string){
    return string.split(' ').join('');
}
</script><br />
<br />
<div align="center"><small style="text-align:center">reload the page to change the code</small></div>
</body>
</html> 

Ještě musím vyřešit průchod na firemní e-mail, jenž samozřejmě není webovou aplikací ve stylu seznamu nebo atlasu.

Případně využití při vstupu zákazníků na webový server firmy.
Joker
Profil
tpilar:
Pokud by to celé šlo udělat v Java Scriptu nebo jQuery bylo by to fajn.
jQuery je Javascript.
Nicméně, kdyby to bylo celé v JS, jak pak ověříte, jestli to návštěvník zadal správně?

Přístup demonstrovaný v tom uvedeném kódu je úplně k ničemu, za prvé stačí vypnout JS a žádná captcha se nekoná a za druhé spamovací roboti si obvykle jen prozkoumají jaká pole jsou ve formuláři a potom už jen posílají odpovídající data na adresu cílového skriptu, čímž celé tohle obejdou.
peta
Profil
tpilar:
Roboti neztraceji obvykle s javascritem cas.
Oni vytahnou ze stranky formularova pole, vyplni je a poslou ti get/post request s vyplnenymi udaji. Oni javascript nespousteji, ale pracuji se strankou jako se souborem.
Ano, jsou i roboti, kteri umi pracovat i s js, ale tech je minimum a tve stranky pravdepodobne nenavstivi.

Javascriptovy kod sam o sobe je nepouzitelny, javascript se da vzdy rozkodovat. Overeni musi provadet php kod, jestli v tom inputu navic je spravny text, ktery tam dosadi treba ten javascript. A protoze roboti js nespousteji, tak bez js se tam sam spravny text asi nedostane. Ten text by ale mel byt pokazde jiny a nemel by byt v html kodu, aby jej nemohl robot ziskat.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0