2017-02-10 50 views
0

目前我正在處理用戶可以提交表單的問題,即使使用的字符完全是隨機的,並且還會隨機附加一封電子郵件。瞭解如何使用PHP過濾來自表單的惡意輸入

這樣的問題的一個實例中,呈現在屏幕截圖

An example of such an issue is presented in the screenshot

當前的PHP代碼把手意見如下:

if(empty($_POST['First_Name']) || 
    empty($_POST['Email'])) 
{ 
    $errors .= "\n Error: all fields are required"; 
} 

$firstname = $_POST['First_Name']; 
$lastname = $_POST['Last_Name']; 
$email_address = $_POST['Email']; 
$company = $_POST['Company']; 

if (!preg_match(
"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
$email_address)) 
{ 
    $errors .= "\n Error: Invalid email address"; 
} 

if(empty($errors)) 
{ 
    $to = $myemail; 
    $email_subject = "Download Form Submission"; 
    $email_body = "A new white paper registration was received. ". 
    " Visitor Details:\n \n First Name: $firstname \n \n Last Name: $lastname \n \n Email: $email_address \n \n Company: $company" ; 

    $headers = "From: $myemail\n"; 
    $headers .= "Reply-To: $email_address"; 

    mail($to,$email_subject,$email_body,$headers); 
    //redirect to the appropriate page 
    header('Location: news-and-resources.php'); 
} 
?> 

這是伴隨着這種形式的HTML:

    <div class="modal-body"> 
          <div class="form-group"> 
           <form method="POST" name="downloadform" action="form-handler3.php" onSubmit="MM_validateForm('firstname','','R','lastname','','R','email','','RisEmail','company','','R');return document.MM_returnValue" accept-charset="iso-8859-1"> 
            <p> 
            <label for='firstname'>First Name</label> <br> 
            <input name="First_Name" type="text" id="firstname" size="30"> 
            </p> 
            <p> 
            <label for='lastname'>Last Name</label> <br> 
            <input name="Last_Name" type="text" id="lastname" size="30"> 
            </p> 
            <p> 
            <label for='email'>Email Address</label> <br> 
            <input name="Email" type="text" id="email" size="30"> <br> 
            </p> 
            <p> 
            <label for='company'>Company</label><br> 
            <input name="Company" type="text" id="company" size="30"> <br> 
            </p> 

            <p style="text-align:center;"><input type="submit" onclick="modal.close();" value="submit"></p> 
           </form> 
          </div> <!-- END OF FORM GROUP --> 
         </div> <!-- END OF MODAL BODY --> 

我不確定我是否需要d在提交之前驗證客戶端,或者在提交之後驗證。無論哪種方式,我希望能夠獲得有關如何從表單中去除隨機字符和電子郵件的見解。任何有識之士將不勝感激。

感謝

+0

您一定需要在服務器端進行驗證,但您也可以選擇在客戶端進行驗證,以便您可以更快地給出反饋。 – 4castle

+0

尋找'蜂蜜罐'技術。這對於機器人來說簡單而且非常有用。另外,如果你想讓事情正確,你需要對注入攻擊進行驗證。 –

+0

事情是,你怎麼知道什麼是隨機的,什麼是一個非常奇怪的名字? (對於給定的奇數值。)我的意思是,有許多方法可以驗證電子郵件至少是適當的格式,但對於名稱,我曾與來自波蘭,俄羅斯,韓國等的人員以及一些名稱有奇怪的拼寫。 –

回答

0

我不認爲你需要找出一種方式剝奪隨機字符這麼多,因爲你可能只是想捕捉到非人類的形式輸入。有許多方法,如驗證碼,和google's ReCaptcha

但是,我見過的一個很好的PHP方法是使用我自己的方法,它是一個蜜罐。

添加像這樣的形式

<p class="catchThoseBots" id="honey"> 
     <label>If you're human leave this blank:</label> 
     <input name="robotest" type="text" id="robotest" class="robotest" /> 
    </p> 

,並用CSS隱藏

.catchThoseBots{display:none} 

然後在值

$robotest = $_POST['robotest']; 
if($robotest){ 
//is a robot proceed no further 
}else{ 
//is a person 
} 

表單驗證檢查,我已經做到了這一點幾次,但當我開始這樣做時,我在筆記中保留的文章是here

這個想法是,機器人只是用數據填寫表格,並希望得到他們正在努力實現的任何目標的提交。用蜜罐他們這樣做的缺乏方法讓他們不能在哪裏。

相關問題