0

我是 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。

4

1 回答 1

0

只需检查换行符就足够了:

$possiblespam = (0 !== preg_match("~(\r|\n)~", $field));
于 2012-08-06T23:00:19.297 回答