0

我想通过使用此处描述的网络表单混淆方法来捕获垃圾邮件发送者。

唯一的问题是我在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

使用<cfset spam = len(trim(form.userName))>阅读下面的解释。

在 PHP中,空字符串被认为是假的,任何有长度的字符串都被认为是真。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 回答
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 回答