2015-10-27 4 views
0

В простой контактной формы, форма HTML запускает скрипт Php:Как обеспечить простой PHP-скрипт, отправляющий электронные письма?

<form method="post" action="email.php">.....</form> 

Это email.php посылает мне по электронной почте:

<?php 
    $mess=$_POST['name']. "\r\n" .$_POST['site']. "\r\n" .$_POST['email']. "\r\n" .$_POST['meta']. "\r\n" .$_POST['message']; 
    mail('[email protected]', 'Subject', $mess); 
?> 

HTML, использует JQuery плагин проверки, но ничего подобного это на стороне Php.

Эксперт по вопросам безопасности сказал мне , как безумно небезопасный этот скрипт php был.

Что можно сделать для повышения безопасности?

+3

«Безопасность» - большой предмет, но в качестве начала ** не доверяйте пользовательскому вводу **, даже не предполагайте, что все они представлены. Простой запрос POST без параметров приведет к тому, что ваш скрипт будет жаловаться (например, '$ _POST' не имеет индекса" name "). – Passerby

+0

Что именно они сказали, так «безумно небезопасно»? –

+0

уверен, что если они найдут подходящего эксперта по безопасности, они также смогут вам посоветовать, как исправить упомянутые безумные незащищенные части скрипта. – Martin

ответ

0

Я полагаю, что ваш «эксперт по безопасности» увидел, что вы использовали необработанные данные $_POST и использовали функцию mail(), и он испугался, но не остановился, чтобы действительно проверить, насколько плохи дела.

У него есть точка в том, что с использованием $_POST без какой-либо проверки на нем почти всегда рецепт взлома, но на самом деле в этом конкретном случае я не думаю, что это слишком плохо, потому что вы единственный получатель (поэтому он не будет использоваться для спама, о чем главное беспокоиться в этих случаях), а также потому, что тело является простым текстом (поэтому хакер не может отправить вам какие-либо неприятные сценарии или вложения).

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

Функциональность PHP mail() - это хорошо известная мягкая цель для хакеров, потому что там очень много небезопасного кода, который ее использует. Однако реальная опасность с mail() имеет тенденцию быть, если вы используете параметр headers (т. Е. Устанавливать такие вещи, как адрес отправителя и т. Д.), Которые вы не использовали. Поскольку вы не используете headers, риски намного ниже и в основном ограничены тем, что вы легко можете отправить вам сообщение.

Если вы все еще беспокоитесь о безопасности функции mail(), лучшим решением является использование библиотеки, например phpMailer.

Если честно, мой совет, когда кто-либо хочет использовать функцию PHP mail(), всегда должен использовать phpMailer или Swiftmailer. И дело даже не в безопасности; даже для простых случаев, они могут сделать ваш код намного легче читать и поддерживать.

+0

Это очень ясно. Я изучу альтернативную функцию phpMailer. Относительно того, что сказал эксперт по вопросам безопасности: _ У вас нет указателя формы, чтобы предотвратить подделку запроса на межсайтовый запрос - вот почему вы получаете электронную почту, когда кто-то попадает на эту страницу. Вы не проверяете, заполнены ли необходимые поля. Вы также не выполняете какую-либо фильтрацию, что означает, что я могу очень легко использовать серию неприятных атак, чтобы выяснить, какой почтовый читатель и ОС вы используете, а затем отправить серию из 0-дневных атак я могу купить за гроши на темной паутине, чтобы взломать вас. –

+0

Я проверил, что поля не пусты, а в части HTML, используя проверку jQuery. Основываясь на вашей эксплоатации, риски ограничены мной, получая множество писем. Наверное, это вызвано _0-дневными атаками? –

+0

Замечания эксперта: (1) CSRF: Конечно, кто-то мог позвонить вашему адресу email.php из любого места; это не идеально, но здесь нет неотъемлемого риска для безопасности, худший риск получает почтовый ящик; (2) Проверка необходимых полей: Да, вам нужно это сделать; PHP выдает предупреждения, если вы обращаетесь к ним без их передачи. Но кроме предупреждающих сообщений, это не проблема в этом случае. (3) Фильтрация. Поскольку электронная почта будет поступать как обычный текст и не изменяет заголовки, это уменьшает риск атаки здесь. Вы все равно должны быть уверены, но, как правило, я думаю, вы в порядке. – Simba

0

Один большой недостаток заключается в том, что злоумышленник может тривиально заполнить ваш почтовый ящик вредоносными или нежелательными сообщениями, которые, помимо очень раздражающего, скорее всего заставят Google разместить ваш домен в списке спама.

Они могут сделать это, написав короткий скрипт, чтобы вызвать эту функцию PHP с некоторыми произвольными данными и пропустить ее, как бы долго они ни захотели.

+0

Ок, thx. Любое предложение изменить код, чтобы предотвратить это? –

0

Это альтернативный способ решить то, о чем вы просите. И я надеюсь, что это может быть полезно для других адептов, поскольку я вижу похожие вопросы, которые идут последовательно.

Если вы намереваетесь сделать профессиональное приложение и сосредоточиться на своем основном бизнесе, то я предлагаю вам использовать некоторые защищенные почтовые порталы с API из похожих почтовых писем, мандрилл или других. Оба сервиса предлагают панель мониторинга, где вы можете видеть статус электронной почты, сколько писем отправлено и статус доставки, а также множество других статистических данных. Это БЕСПЛАТНО для небольшого использования. Это стоит использовать его, потому что вы будете решать некоторые из следующих вопросов:

  • Вам не нужно думать о поддержании безопасности вашего SMTP сервера
  • Или даже правильно настроив свой SMTP
  • Решая блок и черный IP-адреса
  • атаки сервера
  • проблема Спам
  • И назвать более

Оба решения предоставляют API для PHP или других платформ.

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