一位客户联系我们,担心近期有一些企图在她的网站上滥用联系我们表单。 显然,有人试图在消息字段中编写一些代码,很可能是为了垃圾邮件目的而使用后端脚本(使用这些时髦标头的电子邮件注入)。我应该采取什么样的安全预防措施来“联系我们”表单?
目前,安全就绪是一个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