安全电子邮件表单,标头注入查询

时间:2009-12-01 12:58:06

标签: php email header security code-injection

我正在使用以下内容清理联系表单中的输入:

<?php
$name = strip_tags(stripslashes($_POST['name']));
//this is repeated for several other fields, then:

if(isInjected($name)) { die(); }
/* see isInjected function below */

// send the mail
?>

我正在使用此功能:

<?php
    /* function from http://phpsense.com/php/php-mail.html */
    function isInjected($str) {
        $injections = array('(\n+)',
        '(\r+)',
        '(\t+)',
        '(%0A+)',
        '(%0D+)',
        '(%08+)',
        '(%09+)'
        );
        $inject = join('|', $injections);
        $inject = "/$inject/i";
        if(preg_match($inject,$str)) {
            return true;
        }
        else {
            return false;
        }
    }
?>

这是否足以清理我的联系表格?

感谢。

2 个答案:

答案 0 :(得分:4)

作为旁注,代码有点臃肿。它很容易被削减:

/* function from http://phpsense.com/php/php-mail.html */
function isInjected($str) {
    $inject = "/(\r|\t|%0A|%0D|%08|%09)+/i";
    return (preg_match($inject, $str) > 0);
}

答案 1 :(得分:1)

看起来很好,比平均输入验证更好。我个人也喜欢处理输入类型。在我的基础控制器中,我有几个功能可以检查输入是否是有效的出生日期,电子邮件地址等。如果您在现有验证中添加此类验证,则可以很好地处理IMO。