【问题标题】:preg_match for preventing injection in PHP formpreg_match 用于防止以 PHP 形式注入
【发布时间】:2011-12-10 21:59:42
【问题描述】:

我是 PHP 的绝对初学者,正在尝试设置验证以停止在联系表单上注入标头。我已经阅读了很多教程,并制作了一个应该验证的表单,但它不起作用......在这里研究了一下之后,我的问题似乎是我的代码使用了 eregi (旧教程),应该是 preg_match这些日子。我已经使用 preg_match 来验证电子邮件地址格式,但我想确保没有换行符、cc、bcc 等可以偷偷溜进任何地方。 这是我现在拥有的功能:

    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。

【问题讨论】:

    标签: php validation preg-match contact-form


    【解决方案1】:

    只检查换行符就足够了:

    $possiblespam = (0 !== preg_match("~(\r|\n)~", $field));
    

    【讨论】:

      猜你喜欢
      • 2018-03-23
      • 2020-04-14
      • 1970-01-01
      • 2014-08-20
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 2011-10-07
      相关资源
      最近更新 更多