У меня есть веб-сайт прихода, который я поддерживаю. На сайте есть форма регистрации прихода. Вчера кто-то отправил форму со спамом. Отправитель указал неправильный веб-адрес в одном из полей.

Я совершенно уверен, что это не было отправкой формы ботом, поскольку я использую речапчу и приманку для защиты от ботов.

Я пытаюсь понять, как на странице обработки просматривать все поля ввода текста и URL-адреса очистки.

Так как язык PHP:

 function scrubURL(field){
     if($_POST[field] contains **SomeURL**){
         $field = str_replace(***SomeURL***, "", $_POST[field])
     } else{
         $field = $_POST[field];
     }
     return $field;
 }

Я просто не уверен, чтобы проверить поле, чтобы увидеть, если оно содержит URL.

Я планирую очистить URL-адреса, позвонив:

 $first = scrubURL(first);
 $last = scrubURL(last);
 $address = scrubURL(address);

Затем я буду использовать $ first, $ last & $ address в письме, которое отправляется в приходскую контору.

php
0
RCDAWebmaster 30 Апр 2020 в 19:25

2 ответа

Regex - это простой способ оценить поля для возможных маркеров URL. Что-то вроде следующего удалит большую часть этого (хотя, учитывая, сколько URL-адресов фигур может входить, не все):

$_POST = [
    'first' => 'actualname',
    'last' => 'something http://url.com/visit-me', 
    'middle' => 'hello www.foobar.com spammer', 
    'other' => 'visit https://spammery.us/ham/spam spamming', 
    'more' => 'spam.tld', 
];

// Iterates all $_POST fields, editing the $_POST array in place
foreach($_POST as $key => &$val) {
    $val = scrubUrl($val); 
}

function scrubURL($data)
{
    /* Removes anything that: 
        - starts with http(s):
        - starts with www.
        - has a domain extension (2-5 characters)
        ... ending the match with the first space following the match.
    */
    $data = preg_replace('#\b
        (
        https?:
        |
        www\.
        |
        [^\s]+\.[a-z]{2,5}
        )
        [^\s]+#x', '-', $data);
    return $data;
}

print_r($_POST);

Имейте в виду, что последнее условие, ищет любой TLD (.abc) - и их много! - может привести к некоторым ложным срабатываниям.

  • "Предложение. Плохая пунктуация" будет в безопасности. Мы только сопоставляем [a-z]. Однако, спам. Ком также пройдет! Используйте [a-Z], чтобы сопоставить оба случая, или добавьте модификатор "i" в регулярное выражение.
  • «мой номер счета 12345» будет удален (потенциальные бухгалтеры-спамеры из Норвегии ?!)

Вышеуказанный процесс даст вам следующие отфильтрованные данные:

Array (
    [first] => actualname
    [last] => something -
    [middle] => hello - spammer
    [other] => visit - spamming
    [more] => -
)

Регулярное выражение определенно может быть доработано. ^ _ ^

Нотабене Вы также можете очистить входящие данные, например, с помощью strip_tags и htmlspecialchars, чтобы веб-сайт отправлял достаточно безопасные данные в ваш приход.

0
Markus AO 30 Апр 2020 в 17:39

Эта функция распознает URL-адреса и затем заменяет их пустыми строками. Просто поймите, что многие вещи, такие как wx.yz, выглядят как действительные URL.

function scrubURL($field)
{
    return preg_replace('@((https?://)?([-\\w]+\\.[-\\w\\.]+)+\\w(:\\d+)?(/([-\\w/_\\.]*(\\?\\S+)?)?)*)@', '', $_POST[$field]);
}

Параметр $field должен быть строкой, например «email», соответствующей $_POST["email"]

0
Booboo 30 Апр 2020 в 17:16