一位客户联系我们,担心最近有人试图滥用她网站上的联系我们表格。显然,有人试图在消息字段中编写一些代码,很可能是尝试将后端脚本用于垃圾邮件目的(使用那些时髦的标头进行电子邮件注入)。
目前,现有的安全措施是一个 JavaScript 文件,它在提交表单之前对其进行验证。后端实际上没有任何检查。
所以,我在后端添加了一些验证,只是一些简单的东西,比如:
$namePattern = '/^[a-z0-9()\/\'":\*+|,.; \- !?&#$@]{2,75}$/i';
$emailPattern = '/^[^@\s]+@([-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 邮件更安全,我认为。
此外,这不是那么重要,但如果有人有时间,你能教我如何循环遍历数组并为每个元素分配一个新值(即,而不是$array['c_date'] = remove ($array['c_date']);
多次编写,一个简单的函数或执行为我工作。
非常感谢您的帮助,祝您有美好的一天!