2012-01-21 14 views
-1

私は隠しフィールドのトリックを使用して私のフォームのいずれかでスパムを防止しようとしていますが、何らかの理由でそれが動作しません。空のままにしておかなければならないフィールドに記入すると、フォームは通常のように提出されます。隠しフォームフィールド - 私は間違って何をしていますか?

私のphpに何か問題はありますか? (私は私のどこに問題があることだと思います): これは隠しフィールドを検証するためのコードである(私のフォームの最上部を参照してください):

<? 
session_start(); 
include("verification_image.class.php"); 
$image = new verification_image(); 
if (($image->validate_code($_POST['validate']) ? "true" : "false") == "false") { 
    header('Location: http://www.domain.com/fail.htm'); 
    exit; 
} 

if(!empty($_POST['email'])){ die('Stop Spamming'); } 

$to = "[email protected]"; 
$bcc = "[email protected]"; 
$from = $_POST['contactemail']; 
$subject = "INTERESTED ADVERTISER"; 

$sbody = '<table width="420" height="135" border="0" align="center" 
cellpadding="0" cellspacing="0"> 
      <!--DWLayoutTable--> 
      <tr> 
       <td height="90" colspan="5"><div align="center">Reservation &amp; 
Enquiries Submission Form </div></td> 
      </tr> 
      <tr> 
       <td height="25" colspan="3" align="center" valign="middle"><span 
class="style7">Full Name</span></td> 
       <td width="180" valign="top">'.$_POST['contactname'].'</td> 
       <td width="42">&nbsp;</td> 
      </tr> 
      <tr> 
       <td height="25" colspan="3" align="center" valign="middle"><span 
class="style7">Contact number</span></td> 
       <td valign="top">'.$_POST['contactnumber'].'</td> 
       <td>&nbsp;</td> 
      </tr> 
      <tr> 
       <td height="25" colspan="3" align="center" valign="middle"><span 
class="style7">Email</span></td> 
       <td valign="top">'.$_POST['contactemail'].'</td> 
       <td>&nbsp;</td> 
      </tr> 
      <tr> 
       <td height="35" colspan="3" align="center" valign="bottom"><span 
class="style7">Query</span></td> 
       <td colspan="2" rowspan="2" 
valign="middle">'.$_POST['contactquery'].'</td> 
      </tr> 
      <tr> 
       <td width="84" height="108" align="center" valign="middle"> 
<!--DWLayoutEmptyCell-->&nbsp;</td> 
       <td width="69" align="center" valign="middle"><!--DWLayoutEmptyCell-->& 
nbsp;</td> 
       <td width="17">&nbsp;</td> 
      </tr> 
      <tr> 
       <td height="17"></td> 
       <td></td> 
       <td></td> 
       <td></td> 
       <td></td> 
      </tr> 
      </table>'; 
$sBodyNew = '<style type="text/css"> 
<!-- 
.style { 
font-family: Arial; 
font-size: 12px; 
color: #4D241E; 
} 
body { 
background-image: url(); 
background-color: #F1EAE4; 
} 
.style1 {font-size: 14px} 
--> 
</style> 
<p>&nbsp;</p> 
<table width="420" border="0" align="center" cellpadding="0" cellspacing="5"> 
<tr> 
<td><table width="100%" border="0" cellpadding="8" cellspacing="0" bgcolor="#E7D3AF" 
class="style"> 
    <tr> 
    <td colspan="2" valign="top"><div align="center"><strong><span 
class="style1">Website Deal</span><br> 

&nbsp;.................................................................</strong><br> 
&nbsp;</div></td> 
    </tr> 
    <tr> 
    <td width="32%" valign="top"><div align="left"><strong>Date Submitted</strong> 
</div></td> 
    <td width="68%" valign="top">'. date("F j, Y, g:i a") .'</td> 
    </tr> 
    <tr> 
    <td valign="top"><div align="left"><strong>Name</strong></div></td> 
    <td valign="top">'.$_POST['contactname'].'</td> 
    </tr> 
    <tr> 
    <td valign="top"><div align="left"><strong>Contact Number</strong></div></td> 
    <td valign="top">'.$_POST['contactnumber'].'</td> 
    </tr> 
    <tr> 
    <td valign="top"><div align="left"><strong>Email</strong></div></td> 
    <td valign="top">'.$_POST['contactemail'].'</td> 
    </tr> 
    <tr> 
    <td valign="top"><div align="left"><strong>Query</strong></div></td> 
    <td valign="top">'.$_POST['contactquery'].'</td> 
    </tr> 
</table></td> 
</tr> 
</table> 
';    
$headers = "From: $from\r\n"; 
$headers .= "Content-type: text/html\r\n"; 
$success = mail($to, $subject, $sBodyNew, $headers);    
header('Location: http://www.domain.com/success.htm'); 
?> 

相続人は、この:

if(!empty($_POST['email'])){ die('Stop Spamming'); } 

ここでは、完全なPHPのフォームです私は私のHTMLフォームに追加するものです。

<label> 
<input type="text" class="email" name="email" id="email" /> 
</label> 

そしてHERESにHTMLフォーム:

<form action="process_advertise.php" method="post" name="order" 
onSubmit="MM_validateForm('contactname','','R','contactnumber','','R','contactemail', 
'','RisEmail','validate','','R','contactquery','','R');return document.MM_returnValue"> 
      <input name="success" type="hidden" 
value=http://www.domain.com/success.htm> 
      <table width="465" border="0" cellspacing="0" cellpadding="0"> 
      <!--DWLayoutTable--> 
      <tr> 
       <td width="465" height="387" valign="top"><span class="style66">NAME: 
       <input name="contactname" type="text" id="contactname" /> 
       </span><br /> 
       <span class="style66">CONTACT NUMBER:</span> 
       <input name="contactnumber" type="text" id="contactnumber" /> 
       <br /> 
       <span class="style66">EMAIL: 
       <input name="contactemail" type="text" id="contactemail" /> 
                          </span><br /> 
       <span class="style66">QUERY:</span> 
           <textarea name="contactquery" cols="40" rows="8" 
id="contactquery"></textarea> 
           <br /> 
       <br /> 
       <input type="text" class="email" name="email" id="email" /> 
       <br /> 
       <br /> 
       <img src="picture.php" /><br /> 
       <span class="style57 style16"><em>Please enter character<br /> 
as listed above</em></span><br /> 
<input name="validate" type="text" id="validate" /> 
<br /> 
<input type="reset" name="button2" id="button2" value="Reset" /> 
<input type="submit" name="button" id="button" value="Submit" /></td> 
      </tr> 
      </table> 
</form> 

誰もが私が間違ってやっているか知っていますか?

============================================== =========================== 問題を解決しました:

私はフォームをもう一度試してみました。 それは以前に動作しなかった理由を、私はないんだけど、知りたい人のために...すべての私は、私は私のプロセス・PHPのフォームからこのコードを削除除いて正しいがありコーディング:

$sbody = '<table width="420" height="135" border="0" align="center" 
cellpadding="0" cellspacing="0"> 
      <!--DWLayoutTable--> 
      <tr> 
       <td height="90" colspan="5"><div align="center">Reservation &amp; 
Enquiries Submission Form </div></td> 
      </tr> 
      <tr> 
       <td height="25" colspan="3" align="center" valign="middle"><span 
class="style7">Full Name</span></td> 
       <td width="180" valign="top">'.$_POST['contactname'].'</td> 
       <td width="42">&nbsp;</td> 
      </tr> 
      <tr> 
       <td height="25" colspan="3" align="center" valign="middle"><span 
class="style7">Contact number</span></td> 
       <td valign="top">'.$_POST['contactnumber'].'</td> 
       <td>&nbsp;</td> 
      </tr> 
      <tr> 
       <td height="25" colspan="3" align="center" valign="middle"><span 
class="style7">Email</span></td> 
       <td valign="top">'.$_POST['contactemail'].'</td> 
       <td>&nbsp;</td> 
      </tr> 
      <tr> 
       <td height="35" colspan="3" align="center" valign="bottom"><span 
class="style7">Query</span></td> 
       <td colspan="2" rowspan="2" 
valign="middle">'.$_POST['contactquery'].'</td> 
      </tr> 
      <tr> 
       <td width="84" height="108" align="center" valign="middle"> 
<!--DWLayoutEmptyCell-->&nbsp;</td> 
       <td width="69" align="center" valign="middle"><!--DWLayoutEmptyCell-->& 
nbsp;</td> 
       <td width="17">&nbsp;</td> 
      </tr> 
      <tr> 
       <td height="17"></td> 
       <td></td> 
       <td></td> 
       <td></td> 
       <td></td> 
      </tr> 
      </table>'; 

このコードはさgreg0rieが

+0

は()私はこのコードでは、 ''任意の

が表示されない – dynamic

+2

...悪です。 –

+0

これはバックエンドのPHPフォームです - 上の私の編集を参照 – Reflex84

答えて

0

を指摘したように、あなたのコードは、コードを注入することができる、あまりにも多くの方法が必要ではないがあります。 filter_var関数は、最小限の防止のために使用してください。あなたのコードのこの行は奇妙であるように思わ

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
{ 
    echo("E-mail is not valid"); 
}else{ 
    echo("E-mail is valid"); 
} 

if (($image->validate_code($_POST['validate']) ? "true" : "false") == "false") { 

が簡単にこの方法ではないでしょう(少なくともだけでなく)電子メールの使用を検証するため ?空

if (!($image->validate_code($_POST['validate'])){ 
+0

私は開発者ではないので、if($ image-> validate_code($ _ POST ['validate']) 「電子メール」フィールドは、スパマーが入力する人間が見ることができない隠れフィールドです。 – Reflex84

関連する問題