Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 验证电子邮件攻击的表单不起作用_Php_Oop_Validation - Fatal编程技术网

Php 验证电子邮件攻击的表单不起作用

Php 验证电子邮件攻击的表单不起作用,php,oop,validation,Php,Oop,Validation,我在我的网站上有一个联系方式。我制作了一个类来处理整个过程。 但其中有些东西不起作用 我有两个函数要检查是否被利用,但它们不起作用。我不知道他们怎么了,所以他们在这里: private function _validateExploit($val) { $exploitPattrens = array('content-type', 'to:', 'bcc:', 'cc:', 'document.cookie', 'document.write', 'onclick', 'onload'

我在我的网站上有一个联系方式。我制作了一个类来处理整个过程。 但其中有些东西不起作用

我有两个函数要检查是否被利用,但它们不起作用。我不知道他们怎么了,所以他们在这里:

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,无论我将它作为输入给出什么

我猜
调用用户函数数组有问题,但我找不到它

提前谢谢

strpos($exploit,$val)
应该是
strpos($val,$exploit)

您还有
echo$errorMsg但从未定义
$errorMsg


我想你可能想要
array\u walk
(),而不是
call\u user\u func\u array
。我只想循环使用$\u POST,而不是使用这两个函数中的任何一个。在这种情况下,我认为他们不会真的为您买任何东西,而且他们可能不会以您期望的方式返回值。

您正在将
$\u POST
变量传递给函数
$\u POST
是函数所需的数组,但您不能将其视为
\u validateExploit
函数中的数组。你把它当作一根绳子。您需要循环遍历$val数组,并测试该数组中的每个项目,或者只选择一个。你也有你的草垛和针反向在另一个答案中指出

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;
}

很好地解决了call\u user\u func\u array()问题。如果OP按照您的方式重写
\u validateExploit()
,他可以调用
$this->\u validateExploit($\u POST)
他们可以这样做,但是使用
调用用户函数函数数组()
可以灵活地调用循环中作为参数传入的任何函数。
if
语句可能只有一段真正的代码,其中添加了函数名,这是为了我们的利益。感谢您的帮助,我修复了“strpos()”。但是我实际上认为,
call\u user\u func\u attay()
将为我完成这项工作,而不是通过嵌套循环,这对性能是有害的。。重点是,
$\u POST
是一个数组。您必须遍历它、循环遍历它或选择单个元素在函数中进行测试。感谢您的建议,我使用了
array\u filter
,因为
array\u walk
在成功时总是返回true,在这种情况下,它必须成功才能验证
array\u filter
返回函数返回的内容。谢谢你指点我:D