Клиент связался с нами, обеспокоенный недавними попытками злоупотребить формой обратной связи на своем сайте.По-видимому, кто-то пытался написать какой-то код в поле сообщения, скорее всего, это была попытка использовать серверный сценарий для целей спам-рассылки (инъекция электронной почты с использованием этих причудливых заголовков).
В настоящее время безопасность на месте представляет собой файл JavaScript, который проверяет форму перед ее отправкой.На самом деле никаких проверок в бэкэнде нет.
Итак, я добавил некоторую проверку в бэкэнд, просто некоторые простые вещи, такие как:
$namePattern = '/^[a-z0-9()\/\'":\*+|,.; \- !?&#$@]{2,75}$/i';
$emailPattern = '/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i';
$phonePattern = '[0-9\.\-]';
$array = $_POST;
//This is the first line of defense.
if (!preg_match ($namePattern, $array['c_firstname']){
die ("Please go back and enter a correct first name");
}
...More if statements to check other fields.
//The second line of defense.
function remove($name){
return( str_ireplace(array( "\r", "\n", "%0a", "%0d", "Content-Type:", "bcc:","to:","cc:" ), " Something Replaced ", $name ) );
}
$array['c_date'] = remove ($array['c_date']);
//Check the rest of the array.
Извините, если естьчто-то не так с моей логикой или синтаксисом, я на самом деле еще не тестировал вышеупомянутое (поскольку сайт работает, я хотел получить как можно больше кода, написанного до тестирования).
Это вышедостаточно проверки безопасности?Правильно ли я сделал проверку шаблонов (в основном я просто скопировал шаблоны других людей, потому что не совсем понимаю обозначения).
Эта конкретная форма почты использует Zend Mail, поэтому, теоретически, она немного более безопасна, чем обычная почта PHP, я думаю.
Кроме того, это не так важно, но если кто-товремя, не могли бы вы научить меня, как циклически проходить по массиву и назначать новое значение каждому элементу (т.е. вместо того, чтобы писать $array['c_date'] = remove ($array['c_date']);
несколько раз, простую функцию или что-то, что выполняет эту работу за меня.
Большое спасибо за помощь, хорошего дня!