一位客戶聯繫我們,擔心近期有一些企圖在她的網站上濫用聯繫我們表單。 顯然,有人試圖在消息字段中編寫一些代碼,很可能是爲了垃圾郵件目的而使用後端腳本(使用這些時髦標頭的電子郵件注入)。我應該採取什麼樣的安全預防措施來「聯繫我們」表單?
目前,安全就緒是一個JavaScript文件,它在提交之前驗證表單。後端沒有任何檢查。
所以,我添加了一些驗證在後端,只是一些簡單的東西,比如:
$namePattern = '/^[a-z0-9()\/\'":\*+|,.; \- !?&#[email protected]]{2,75}$/i';
$emailPattern = '/^[^@\s][email protected]([-a-z0-9]+\.)+[a-z]{2,}$/i';
$phonePattern = '[0-9\.\-]';
$array = $_POST;
//This is the first line of defense.
if (!preg_match ($namePattern, $array['c_firstname']){
die ("Please go back and enter a correct first name");
}
...More if statements to check other fields.
//The second line of defense.
function remove($name){
return(str_ireplace(array("\r", "\n", "%0a", "%0d", "Content-Type:", "bcc:","to:","cc:"), " Something Replaced ", $name));
}
$array['c_date'] = remove ($array['c_date']);
//Check the rest of the array.
對不起,如果有什麼問題我的邏輯或我的語法,我並沒有實際測試以上(因爲該網站是活的,我想在測試之前儘可能多地寫出代碼)。
以上安全檢查是否足夠?我的模式檢查是否正確(我主要是複製其他人的模式,因爲我不完全理解符號)。
這個特殊的郵件格式使用Zend Mail,所以理論上它比普通的PHP郵件更安全。
而且,這並不重要,但如果有人有時間,你能教我如何循環遍歷數組並分配一個新的值給每個元素(IE的而不是寫$array['c_date'] = remove ($array['c_date']);
幾次,一個簡單的函數什麼,沒有工作對我來說。
非常感謝您的幫助,有一個美好的一天!
作爲一般規則,如果你不理解它,這是不安全的。這是因爲您可能會嘗試在不打算使用的情況下使用它。例如,在標籤內部使用htmlentities是一個安全漏洞,例如屬性' href = ...',因爲它不會阻止你希望的XSS攻擊。知道爲什麼很重要。 – DampeS8N