Я хотел бы остановить спам людей, используя специальные символы, используемые для ввода почты в php. Например, \n
и \r
используются для объединения нескольких заголовков и поэтому также с %0A
и %0D
. Поэтому я написал регулярное выражение для их соответствия. Но я подозреваю, что мое регулярное выражение не так эффективно ... что-то заставляет меня думать, что я пишу что-то непригодное ... Помогите мне исправить это, пожалуйста.Предотвращение отправки почты в php, перехватывая некоторые символы
Вот простой пример того, что я хотел бы сделать ...
if ((!preg_match('/^[^\s]./', stripslashes($_POST['subject']))) || (preg_match('/(%0A|%0D|\\n+|\\r+|;|mime-version:|content-type:|content-transfer-encoding:|subject:|to:|cc:|bcc:)/i', stripslashes($_POST['subject']))) || !(strpos($_POST['subject'],'\r') === false) || !(strpos($_POST['subject'],'\n') === false)) {
exit("Warning: this mail contains illegal characters! This mail will not be sent!");
// obvious validate name too
// obvious validate mail too
// obvious validate message too
} else {
// if all fields are well validated send mail...
$fname = stripslashes($_POST['fname']);
$fmail = stripslashes($_POST['fmail']);
$subject = stripslashes($_POST['subject']);
$message = stripslashes($_POST['message']);
mail($mail, $subject, $message, $headers, "-f$fmail") {
exit("Your Mail is sent! Thanks!");
}
Для того, чтобы соответствовать \n
, \r
, %0A
и %0D
как я должен написать свое регулярное выражение?
И !(strpos($_POST['subject'],'\r') === false)
и !(strpos($_POST['subject'],'\n') === false)
неплохие?
Спасибо.
Решенный! https://stackoverflow.com/a/35606845/4432311
Взгляните на [это] (http://php.net/manual/en/filter.examples.sanitization.php), о полевой дезинфекции – Asur
Я проверяю почтовый адрес, используя это мое регулярное выражение: 'if (! preg_match ('/^[A-Za-Z0-9] + ([_ \\ .-] [A-Za-Z0-9] +) *'. '@ ([A-Za-Z0-9 ] + ([\ .-] [a-zA-Z0-9] +)) + $/', stripslashes ($ _ POST [' fmail ']))) {'спасибо, мне нужно исправить свое регулярное выражение в моей теме , Меня не интересует 'FILTER_SANITIZE_EMAIL'. – Alessandro
Если 'stripslashes()' означает, что у вас есть магические кавычки, у вас есть ужасно устаревший сервер. У вас, вероятно, есть проблемы, о которых стоит беспокоиться. В любом случае отправкой электронной почты сложно (действительно!), И обычно это не стоит того, чтобы делать это самостоятельно. Просто установите стороннюю библиотеку, например Swift Mailer или PhpMailer. - –