Проверка SPF в PHP - PullRequest
       39

Проверка SPF в PHP

1 голос
/ 10 октября 2019

Поставщик ИТ-услуг должен написать наши изменения SPF в Интернете, я просто отправил свои инструкции по почте.

Я создал программу на PHP, чтобы одним щелчком мыши проверить все мои домены, чтобы убедиться, что это правильно (иногда плохая копия-вставка содержит плохие символы)

Я пытался проверить SPF с

if (strpos(strtolower($spf), 'v=spf')

, но это не проверяет плохие символы

Я пытался сpreg_match, но он не работает

Spf-запись может содержать только эти символы [az] [0-9]. ? - ~ (пробел) и должен начинаться с v = spf

все остальные символы должны отображать "Неверный синтаксис"

Пример:

$spfdata='v=spf1 mx 1.2.3.4 ~all';

if (preg_match('/(v=spf)([a-z0-9-~?.])/i', $spfdata)){
    echo "SPF seems to be ok";
} else {
    echo "Invalid syntax";
}

Это не сработаетвсегда говорит «хорошо», даже если я печатаю плохой символ.

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Вы можете использовать

'/^v=spf[a-z0-9~? .-]+$/i'

Или, если вы хотите разрешить любые пробелы:

'/^v=spf[a-z0-9~?\s.-]+$/i'

Код PHP:

$spfdata='v=spf1 mx 1.2.3.4 ~all';

if (preg_match('/^v=spf[a-z0-9~?\s.-]+$/i', $spfdata)){
    echo "SPF seems to be ok";
} else {
    echo "Invalid syntax";
}

См. Демонстрация PHP

Соответствует регулярному выражению

  • ^ - начало строки
  • v=spf - буквенный текст
  • [a-z0-9~?\s.-]+ - 1+ буквы ASCII, цифры, ~, ?, пробелы, . или -
  • $ - конец строки.
0 голосов
/ 12 октября 2019

Я не знаю почему, но когда я удаляю первый блок (v = spf), регулярное выражение кажется хорошим, я перепробовал много разных вещей, и, наконец, это работает (я инвертирую логику с помощью ^)

Таким образом, регулярное выражение говорит: «Если вы НЕ в выражении в скобках, вы в порядке»

$spfdata='v=spf1 mx 1.2.3.4 ~all';

if (preg_match('#[^a-z0-9 :\+=.\-~\?]#', $spfdata)){
    echo "Invalid syntax";
} else {
    echo "SPF seems to be ok";
}
...