Отзывы о форме обратной связи

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

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

HTML

function validateContactForm() {
  var valid = true;

  $(".info").html("");
  $(".input-field").css('border', '#e0dfdf 1px solid');
  var userName = $("#userName").val();
  var userEmail = $("#userEmail").val();
  var subject = $("#subject").val();
  var content = $("#content").val();

  if (userName == "") {
    $("#userName-info").html("Required.");
    $("#userName").css('border', '#e66262 1px solid');
    valid = false;
  }
  if (userEmail == "") {
    $("#userEmail-info").html("Required.");
    $("#userEmail").css('border', '#e66262 1px solid');
    valid = false;
  }
  if (!userEmail.match(/^([w-.]+@([w-]+.)+[w-]{2,4})?$/)) {
    $("#userEmail-info").html("Invalid Email Address.");
    $("#userEmail").css('border', '#e66262 1px solid');
    valid = false;
  }

  if (subject == "") {
    $("#subject-info").html("Required.");
    $("#subject").css('border', '#e66262 1px solid');
    valid = false;
  }
  if (content == "") {
    $("#userMessage-info").html("Required.");
    $("#content").css('border', '#e66262 1px solid');
    valid = false;
  }
  return valid;
}
<form name="frmContact" id="frmContact" method="post" action="" enctype="multipart/form-data" onsubmit="return validateContactForm()">

  <div class="input-row">
    <label style="padding-top: 20px;">Name</label> <span id="userName-info" class="info"></span><br />
    <input type="text" class="input-field" name="userName" id="userName" />
  </div>
  <div class="input-row">
    <label>Email</label> <span id="userEmail-info" class="info"></span><br /> <input type="text" class="input-field" name="userEmail" id="userEmail" />
  </div>
  <div class="input-row">
    <label>Subject</label> <span id="subject-info" class="info"></span><br /> <input type="text" class="input-field" name="subject" id="subject" />
  </div>
  <div class="input-row">
    <label>Message</label> <span id="userMessage-info" class="info"></span><br />
    <textarea name="content" id="content" class="input-field" cols="60" rows="6"></textarea>
  </div>
  <div>
    <input type="submit" name="send" class="btn-submit" value="Send" />

    <div id="statusMessage">
      <?php if (!empty($message)) { ?>
      <p class="<?php echo $type; ?>Message">
        <?php echo $message; ?>
      </p>
      <?php } ?>
    </div>
  </div>
</form>

PHP

<?php if (!empty($_POST['send'])) {
    $name = $_POST['userName'];
    $email = $_POST['userEmail'];
    $subject = $_POST['subject'];
    $content = $_POST['content'];

    $toEmail="neilmeyermusic@gmail.com";
    $mailHeaders="From: " . $name . '<' . $email . ">rn";
    if (mail($toEmail, $subject, $content, $mailHeaders)) {
        $message="Your contact information is received successfully.";
        $type="success";
    }
}
require_once "contact-view.php";
?>

1 ответ
1

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

Даже опытный класс вроде phpmailer пострадал неприятные ошибки безопасности. Еще одна статья, которая затрагивает этот вопрос: Почему mail () опасен в PHP

Поскольку $ mailHeaders является инъекционным, я могу указать адрес электронной почты, например:

someone@attacker.com@rnBcc: someone@victim.com

и я смогу рассылать спам на адрес something@victim.com с вашей невольной помощью.

Проверка полей формы в Javascript недостаточна, она также должна выполняться на стороне сервера. Javascript полезен для мгновенной проверки на стороне клиента, чтобы избежать обмена данными с сервером, но не может считаться функцией безопасности, поскольку вы не контролируете клиента и не можете ему доверять.

Это только вопрос времени, пока ваша форма не будет проиндексирована спам-ботами, которые начнут обстреливать ваш сервер. Ботов не волнует Javascript. Ваш сценарий их не остановит. Таким образом, в основном все, что вы написали на JS, должно быть реализовано на стороне сервера в PHP. Проверка JS — это хорошо, но необязательно.

Поскольку похоже, что вы используете Bootstrap, вы могли бы воспользоваться Проверка доступные варианты. Затем вы также можете избавиться от встроенного стиля CSS, например: $("#userEmail").css('border', '#e66262 1px solid');.

Вы также можете использовать required в обязательных элементах управления HTML. Затем браузер запросит пользователя, если некоторые поля пусты, и не отправит форму. Это небольшая дополнительная плата и ничего не стоит.

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

Я, кажется, помню, что есть также возможность инъекция нулевого байта но не могу вспомнить детали прямо сейчас.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *