preg_match для предотвращения внедрения в форму PHP

Я абсолютный новичок в PHP, пытаюсь настроить проверку, чтобы остановить внедрение заголовка в контактную форму. Я прочитал много руководств и создал форму, которая должна проверяться, но она не работает... после небольшого исследования здесь кажется, что моя проблема в том, что код, который у меня есть, использует eregi (старый учебник), который должен быть preg_match в эти дни. Я использовал preg_match для проверки формата адреса электронной почты, но я хочу убедиться, что никакие разрывы строк, cc, bcc и т. д. не могут быть скрыты где угодно. Это функция, которая у меня есть сейчас:

    function spamcheck($field) {
if(eregi("to:",$field) || eregi("cc:",$field) || eregi("Content-Type:",$field) || eregi("bcc:",$field) || eregi("%0D",$field) || eregi("\r",$field) || eregi("\n",$field) || eregi("%0A",$field)){ 
    $possiblespam = TRUE;
}else $possiblespam = FALSE;
if ($possiblespam) {
    die("Possible spam attempt detected. If this is not the case, please edit the content of the contact form and try again.");
    return 1;
}

}

Теперь я не уверен, смогу ли я просто заменить eregi на preg_match вот так:

     if(preg_match("/to:/i",$field) 
     // and so on for each string I want to catch

Я прочитал здесь, что preg_match нуждается в разделителях, не уверен, правильно ли я их использовал. Кроме того, должен быть чувствителен к регистру, поэтому я добавил флаг i (без уверенности). Тем не менее, нет реальной идеи, действительно ли вышеизложенное будет правильным. Это кажется безопасным? Еще раз прошу прощения за незнание PHP. Этот тип функций довольно часто встречается в онлайн-учебниках, но с использованием eregi, а не preg_match.


person jacks10101    schedule 10.12.2011    source источник


Ответы (1)


Просто проверки разрывов строк должно быть достаточно:

$possiblespam = (0 !== preg_match("~(\r|\n)~", $field));
person apfelbox    schedule 06.08.2012