我的网站上有联系表格。我做了一个班来处理整个过程。 但是有些东西不起作用。
我有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
有问题,但我找不到。
提前致谢!
答案 0 :(得分:0)
strpos($exploit, $val)
应为strpos($val, $exploit)
您还有echo $errorMsg;
,但永远不会定义$errorMsg
。
我认为你可能想要array_walk
(http://us3.php.net/manual/en/function.array-walk.php)而不是call_user_func_array
。我只是循环$ _POST而不是使用这些函数中的任何一个。在这种情况下,我不认为他们真的会给你买任何东西 - 而且他们可能不会按照你期望的方式返回价值。
答案 1 :(得分:0)
您正在将$_POST
变量传递给该函数。 $_POST
是call_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;
}