0

こちら で説明されている Web フォームの難読化方法を使用して、スパマーを捕まえたいと考えています。

唯一の問題は、ColdFusionサーバーを使用していて、mailtoフォームが cfm にあることです。

if( !isset($_POST['name'])) { die("No Direct Access"); }  // Make sure the form has      actually been submitted

$name = $_POST['name'];
$email = $_POST['email'];
$spam = $_POST['username']; // This is our Honeypot field

if($spam) {  // If the Honeypot field has been filled in
die("No spamming allowed!"); 
} else {
// Process the form like normal
}

(更新: コメントからのコード)

私のフォーム:

<tr style="display: none;"> 
    <td> <li id="user" style="display: none;"> 
            <label for="spamCatch">spamCatch</label> 
            <input type="text" name="spamCatch"> 
         </li> 
    </td> 
</tr> 

私のメール cfm:

<cfparam name="form.Notform1" default=""> 
<cfset spam = false> 
<cfif structKeyExists(form,'name')> 
    <cfset spamCheck = form.spamCheck> 
    <cfif spam> 
         No spam. 
         <cfabort> 
    <cfelse> 
        <cfmail from="title" to="email" subject="subject" server="servername" type="html"> 
            <style type="text/css"> 
            <cfinclude template="../css/cfForms.css"> 
            </style> 
             HTML HERE FROM FORM 
        </cfmail> 
    </cfif> 
</cfif>
4

3 に答える 3

1

基本コンセプトはこちら。Learncfinaweek.comを見ることを強くお勧めします

<cfset spam = false>
// run code to check for spam
<cfif structKeyExists(form,'name')>
    <cfset name = form.name>
    <cfset email = form.email>
    <cfset username = form.username>

    <cfif spam>
        No spam.<cfabort>
    <cfelse>
        <cfmail to="email" from="email" subject="email">
            text
        </cfmail>
    </cfif>
<cfelse>
    No Direct Access.<cfabort>
</cfif>
于 2013-03-28T13:31:06.090 に答える
0

非表示フィールドの場合、スパムは常に存在するため、空かどうかを確認してください

<cfif !structkeyexists(form, "name")>
    <cfdump var="no direct access" abort>
</cfif>

<cfparam name="form.name" default="">
<cfparam name="form.email" default="">
<cfparam name="form.spam" default=""> 

<cfif len(form.spam)>
    <cfdump var="No spamming allowed!" abort>
<cfelse>

</cfif>
于 2013-03-28T13:38:28.023 に答える
0

説明については、以下を参照してください<cfset spam = len(trim(form.userName))>

PHP では、空の文字列は false と見なされ、長さのある文字列は true と見なされます。ColdFusion には、同じ暗黙的なブール変換はありません。

// PHP
var_dump((bool) "");        // bool(false)
var_dump((bool) "foo");     // bool(true)
<!--- CFML --->
yesNoFormat("") <!--- ERROR: cannot convert the value "''" to a boolean --->
yesNoFormat("foo") <!--- ERROR: cannot convert the value "foo" to a boolean --->


$spam = $_POST['username'];
if($spam){}

と同じです

<cfset spam = form.userName>
<cfif spam></cfif>

フォームフィールドが空の場合、値「''」をブール値エラーに変換できないという同じ結果が生成されます。

あなたがしたいことは、ハニーポットフィールドの長さをチェックするか、空の文字列をチェックすることです.

<cfif len(trim(form.userName))>
<!--- or <cfif trim(form.userName) neq ""> --->
no spam <cfabort>
</cfif>

それでも spam 変数を使用したい場合は、次のようにすることができます:

<cfset spam = len(trim(form.userName))>
<cfif spam>
    No spam<cfabort>
</cfif>

今は持って<cfset spam = false>いますが、コードはブール値を変更するために何もしません。その行を<cfset spam = len(trim(form.userName))>コードに変更すると機能します。

于 2013-03-28T14:58:50.637 に答える