验证电子邮件漏洞利用表单无效

时间:2010-08-13 14:23:14

标签: php oop validation

我的网站上有联系表格。我做了一个班来处理整个过程。 但是有些东西不起作用。

我有2个功能来检查是否有用,但它们无法正常工作。我不知道他们有什么问题,所以他们在这里:

private function _validateExploit($val) {
    $exploitPattrens = array('content-type', 'to:', 'bcc:', 'cc:', 'document.cookie', 'document.write', 'onclick', 'onload', '\n', '\r', '\t', '%0A', '%0D', '%08', '%09');

    foreach ($exploitPattrens as $exploit) {
        if (strpos($exploit, $val) !== false){
            return true;
        }
    }
    return false;
}

public function isExploit () {

    if(call_user_func_array(array($this, '_validateExploit'), $_POST)) {
          echo $errorMsg;
     }
 }

当我呼叫isExploit()时,无论我将其作为输入,它总是返回false。

我猜call_user_func_array有问题,但我找不到。

提前致谢!

2 个答案:

答案 0 :(得分:0)

strpos($exploit, $val)应为strpos($val, $exploit)

您还有echo $errorMsg;,但永远不会定义$errorMsg

我认为你可能想要array_walkhttp://us3.php.net/manual/en/function.array-walk.php)而不是call_user_func_array。我只是循环$ _POST而不是使用这些函数中的任何一个。在这种情况下,我不认为他们真的会给你买任何东西 - 而且他们可能不会按照你期望的方式返回价值。

答案 1 :(得分:0)

您正在将$_POST变量传递给该函数。 $_POSTcall_user_func_array()函数所需的数组,但您不会将其视为_validateExploit函数中的数组。你把它当作一个字符串来对待它。您需要循环遍历$ val数组以及测试该数组中的每个项目或只选择一个。您还可以在strpos()中将您的草垛和针头翻转,如另一个答案中所示。

private function _validateExploit($val) {
    $exploitPattrens = array('content-type', 'to:', 'bcc:', 'cc:', 'document.cookie', 'document.write', 'onclick', 'onload', '\n', '\r', '\t', '%0A', '%0D', '%08', '%09');

    foreach ($exploitPattrens as $exploit) {
        foreach ($val as $itm) {
            if (strpos($itm, $exploit) !== false){
                return true;
            }
        }
    }
    return false;
}