2014-02-19 99 views
1

我的Web表單位於HTTPS頁面上,具有JavaScript驗證和後端PHP驗證以檢查空白字段。表單工作(發送電子郵件)並按預期返回錯誤。PHP POST安全

我每天收到一封空白的電子郵件。我能想到的唯一的事情是POST是脆弱的。

如何確保POST操作=「URL」?或者這不是脆弱的?

我的形式(縮短):

<form id="itsp-form" method="post" action="http://www.website.com/save_itsp.php"> 
<label class="custom">Company name</label> 
<input id="company_name" type="text" name="company_name" /> 
...   
<input type="submit" id="submit" value="Submit" /> 
</form> 
<div id="errors"></div> 
</div> 
<script> 
    $('#submit').click(function() { 
    $('.error').hide(); 

    var hasError = false; 
    var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 

    if (($("#company_name").val() == '') || ($("#type_of_business[]").val() == '')) { 
     $("#errors").after('<span class="error">Please enter your Company name.</span>'); 
     hasError = true; 
    } 
    if(hasError == true) { return false; } 
}); 

我的PHP文件:

function died($error) { 
echo "We are very sorry, but there were blank fields found with the form you 
    submitted. "; 
$link_address = 'http://www.website.com/url/itsp'; 
echo "<a href='".$link_address."'>Click to Go Back<br/></a>"; 
die(); 
} 

if (isset($_POST['company_name'])) 
{ 
$errors = ""; 

//validate and sanitize company name 
if ($_POST['company_name'] != "") 
{ 
    $_POST['company_name'] = filter_var($_POST['company_name'], FILTER_SANITIZE_STRING); 
    $company_name = $_POST['company_name']; 
} 
else 
died(); 

/*****Email*****/ 
$to = "email"; 
$subject = "New ITSP Submission"; 
$message1 = "A new ITSP has submitted their information: 
<br/>Company Name: " . $company_name . " 
<br/>"; // . . . 

$headers = "MIME-Version: 1.0\n"; 

mail($to,$subject,$message1,$headers); 
header("location: http://www.website.com/dir/itsp-confirmation/"); 
+0

是否確定電子郵件爲空白,是否包含一些不可見字符(如空格或非空格)? –

+4

爲什麼downvote?似乎有一個合理的問題,OP已經明確包含了代碼。 –

+0

查看電子郵件時,沒有空白。 – DDDD

回答

3

首先你檢查它是否是!=""然後你去掉所有的標籤,所以如果它是HTML,它將是!="",但是在filter_var之後它將是==""。因此,在檢查!=""之前進行篩選。

//validate and sanitize company name 
$company_name = filter_var($_POST['company_name'], FILTER_SANITIZE_STRING); 
if(empty($company_name)) 
{ 
    died(); 
} 
+0

我剛剛注意到這一點,只要我發佈我的答案。 +1給你來捕捉它。 –

+0

die();拼寫錯誤 – RezaSh

+0

@RezaSh:不,如果您查看代碼,它們會有一個自定義的'died()'函數。 – AbraCadaver

1

能夠真正打通這是一系列的多個空格字符的唯一的事情。我建議查看返回的字符串的長度,並在假定它爲空之前確保它實際上是零長度的字符串。

一些電子郵件客戶端,甚至是垃圾郵件過濾系統將刪除電子郵件中主要的空白字符,以防止利用垃圾郵件檢測系統中的某些錯誤。