0

私はvtigerを使用しており、ウェブサイトの連絡先ページで大量のスパムを受信して​​います。このコードを使用しています

        <form name="contact" action="REMOVED" method="post" accept-charset="utf-8"> 
    <input type="hidden" name="publicid" value="REMOVED"></input>
    <input type="hidden" name="name" value="contact"></input>        
    <label>First Name</label>
    <input type="text" value="" name="firstname"  required="true"></input>  
    <label>Phone</label>
    <input type="text" value="" name="phone"  required="true"></input>  
    <label>Last Name</label>
    <input type="text" value="" name="lastname"  required="true"></input>   
    <label>Email</label>
    <input type="text" value="" name="email"  required="true"></input>  
    <label><span>*</span>Street</label>
    <input type="text" value="" name="lane"  ></input>  
    <label><span>*</span>Postal Code</label>
    <input type="text" value="" name="code"  ></input>  
    <label><span>*</span>City</label>
    <input type="text" value="" name="city"  ></input>  
    <label>Country</label>
    <input type="text" value="" name="country"  ></input>   
    <label><span>*</span>County</label>
    <input type="text" value="" name="state"  ></input> 
        <label for="comments"><span>*</span>Description</label>d
    <textarea name="description" cols="40" rows="3" name="description"  id="description"></textarea>

私が抱えている問題は、送信がサイトにない別のURLであり、私が試したすべてのアンチスパム方法(12 + 1 =)が回答に関係なくフォームを送信することです

サイトへのリンクを削除しました

これに関するヘルプは素晴らしいでしょう

4

2 に答える 2

4

使用しないフォームに余分なフィールドを追加します。cssで隠します。

ページにアクセスするスパムボットは、表示されていなくてもすべてのフィールドに入力します。

非表示フィールドに何かがある場合、フォーム全体がスパムであり、データを破棄できます。

于 2012-10-11T15:32:25.937 に答える
1

トークン/秘密鍵を使用した他のスパム対策方法をお勧めします。

HTML 形式では、次のように記述します。

<form action="..." method="post">
<?php
$publicKey = rand()%9;
$privateKey = 0.9;
$token = sha1( $publicKey * $privateKey + $privateKey );    
?>
<input type="hidden" name="publicKey" value="<?php echo $publicKey; ?>" />
<input type="hidden" name="token" value="<?php echo $token; ?>" />
</form>


また、IF 条件の前にも数行のコードを追加します。たとえば、POST メソッドで送信されたトークンを確認/検証するために、SQL クエリでフラグメント化するか、メールを送信します。

<?php
$publicKey = $_POST['publicKey'];
$privateKey = 0.9;
$token = sha1( $publicKey * $privateKey + $privateKey );

if ( $token == $_POST['token'] ) {

// do something, eg: SQL query, send mail

}
?>

そして覚える!常にすべての入力データを検証してサニタイズしてください! :)

于 2012-10-28T09:05:16.003 に答える