我是 PHP 的绝对初学者,试图设置验证以停止在联系表单上注入标头。我已经阅读了很多教程,并制作了一个应该验证的表单,但它不起作用......在这里研究了一下之后,我的问题似乎是我的代码使用了 eregi (旧教程),应该是 preg_match这些日子。我已经使用 preg_match 来验证电子邮件地址格式,但我想确保没有换行符、抄送、密件抄送等可以偷偷溜进任何地方。这是我现在拥有的功能:
function spamcheck($field) {
if(eregi("to:",$field) || eregi("cc:",$field) || eregi("Content-Type:",$field) || eregi("bcc:",$field) || eregi("%0D",$field) || eregi("\r",$field) || eregi("\n",$field) || eregi("%0A",$field)){
$possiblespam = TRUE;
}else $possiblespam = FALSE;
if ($possiblespam) {
die("Possible spam attempt detected. If this is not the case, please edit the content of the contact form and try again.");
return 1;
}
}
现在,我不确定我是否可以像这样用 preg_match 替换eregi:
if(preg_match("/to:/i",$field)
// and so on for each string I want to catch
我在这里读到 preg_match 需要分隔符,不确定我是否正确使用了它们。另外,应该区分大小写,所以我添加了 i 标志(没有信心)。不过,不知道上面是否真的正确。这看起来安全吗?再次对我缺乏 PHP 知识表示歉意。这种函数在网上教程中很常见,但使用的是eregi而不是preg_match。