Проверка формы для эксплойтов по электронной почте не работает - PullRequest
0 голосов
/ 13 августа 2010

У меня есть контактная форма на моем сайте.Я сделал класс для обработки всего процесса.Но в этом что-то не работает.

У меня есть 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 голосов
/ 13 августа 2010

Вы передаете переменную $_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;
}
0 голосов
/ 13 августа 2010

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 вместо использования любой из этих функций.Я не думаю, что они действительно покупают вам что-либо в этом случае - и они могут не возвращать значения так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...