2014-01-13 59 views
2

我正在處理某些表單,並希望獲得有關如何正確製作表單以防止黑客,垃圾郵件等的建議。另外,我想知道如何正確發送此在電子郵件中填寫數據(附件也將被髮送,因此我使用enctype作爲多種形式/表格數據)。創建安全的HTML/PHP表單併發送電子郵件

爲了簡單起見,假設我在表單中只有1個字段。

<form method="post" enctype="multipart/form-data"> 
     Address: <input type="text" name="user-address" value="<?php echo $_POST['user-address']; ?>" /> 
     <input type="submit" value="Submit" /> 
    </form> 

現在,爲確保用戶輸入安全,我需要執行哪些步驟?例如,我知道我可以做trim()並檢查'user-address'(在$ _POST中)是否爲空。但我還應該做什麼?我一直在看關於htmlentities()和htmlspecialchars()的東西,這讓我感到困惑。我應該使用這些嗎?那麼stripslashes()呢?

在確認輸入安全後,我想發送一封電子郵件(使用PHPMailer)用戶輸入的內容。我一直注意到的是,如果用戶輸入單引號或雙引號,如&#34;顯示在電子郵件正文中而不是實際的字符。這是因爲電子郵件是作爲普通文本發送的嗎?我希望它以純文本形式發送,因爲這就是我需要的表單字段。所以我在$ _POST ['user-address']上使用了html_entity_decode(...,ENT_QUOTES),並且使它工作。但我不確定這是否是正確的方法,或者是否會造成某種安全風險。

$msg = "Address: " . html_entity_decode($_POST['user-address'], ENT_QUOTES); 
    //send e-mail with attachment and $msg as body 

要點:我怎樣才能確保上面的簡單形式是安全的?我該如何處理電子郵件中顯示的單引號和雙引號HTML實體(假設我想發送純文本電子郵件)?

感謝您的幫助!

+0

[在網絡上創建電子郵件表單時的安全考慮事項]的可能重複(http://stackoverflow.com/questions/1027138/security-considerations-when-creating-an-email-form-on-the-web ) – 2014-01-13 23:39:28

回答

0

當試圖使用戶輸入安全時,有幾件事值得注意。首先,htmlentities()戰略正在引領你朝着正確的方向前進。我自己有輸入問題,htmlentities()已完成工作。如果您想保留報價未轉義,請不要使用額外的ENT_QUOTES參數。另外,如果要使用數據庫中任何位置的輸入文本,請使用mysql_real_escape_string()函數。

+0

mysql_real_escape_string() - 不使用depreciated mysql,驗證電子郵件地址 – 2014-01-13 23:50:01

0

首先你應該檢查電子郵件是否有效。有很多方法可以用正則表達式來實現,或者如果你使用新版本的php,你可以使用這個filter函數。在這裏,您可以進一步確認域是否存在並響應ping/http調用。

黑客電子郵件表單要求黑客能夠覆蓋電子郵件的標題,因此修剪所有內容,同時也刪除所有「\ n」和「\ t」,因爲即使它們仍然可以用來破解標題文本被修剪。如果您有主題輸入,則可以用它來重寫電子郵件的標題。 EX:

我的電子郵件 \ n \ t \ n \ TTO:[email protected] \ n \ TBCC:spamlist \ n \ t \ n \ t主題

而且身體可以也可以這樣覆蓋(不確定是否真的有效,但我相信這個原則是正確的)。

如果您發送的是HTML電子郵件(內容類型設置爲電子郵件),那麼使用htmlentities()是一件好事,否則,只要您將電子郵件的內容類型設置爲純文本,就不需要它。如果您想確保在另一側沒有評估html,只需使用從「>」到「& gt;」的替換()即可制動標籤或者乾脆刪除它們。

另一個好的做法是在你的表單中添加captcha,記住一個機器人可以有多個ip地址,它會毫不費力地發送電子郵件。

希望這會有所幫助。

相關問題