2015-07-21 4 views
1

Итак, у меня есть базовая формуляр почты(), данные POSTS через сценарий jQuery, и я хочу проверить и дезинформировать данные. Очевидно, что основная причина заключается в безопасности, а также для предотвращения ошибок. На данный момент единственной формой проверки является HTML (IE type = "tel"), которого, очевидно, недостаточно и не безопасно.Sanitizing/Validating контактная форма PHP, которая отправляется с использованием jQuery

Вопрос: как мне защитить этот скрипт? В jQuery или PHP. Извините, но я довольно новичок в этом. (Edit- я задаюсь вопросом, как конкретно обеспечить это. Пример кода, учебник и т.д. -Edit)

index.html

<div class="order_info"> 
    <form id="order-form" class="order_form" action="php/order.php" method="post"> 
     <input id="or_name" class="or_field" required type="text" name="or_name" placeholder="Name*"> 
     <input id="or_company" class="or_field" type="text" name="or_company" placeholder="Company Name"> 
     <input id="or_email" class="or_field" required type="email" name="or_email" placeholder="Email*"> 
     <input id="or_tel" class="or_field" type="tel" name="or_tel" placeholder="Phone"> 
     <select id="or_package" class="or_field" required name="or_package"> 
      <option value="" selected disabled>Select Package*</option> 
      <option value="Starter">Starter</option> 
      <option value="Business">Business</option> 
      <option value="Premier">Premier</option> 
     </select> 
     <textarea id="or_tarea" class="or_field" required name="or_details" placeholder="Project Details*"></textarea> 
     <input id="or_submit" class="or_button" type="submit" value="SUBMIT!"> 
    </form> 
</div> 

custom.js

$(window).load(function(){ 
    "use strict"; 
    $('.order_info .order-form').each(function(){ 
     var form = $(this); 
     //form.validate(); 
     form.submit(function(e) { 
      if (!e.isDefaultPrevented()) { 
       jQuery.post(this.action,{ 
        'or_name':$('input[name="or_name"]').val(), 
        'or_company':$('input[name="or_company"]').val(), 
        'or_email':$('input[name="or_email"]').val(), 
        'or_tel':$('input[name="or_tel"]').val(), 
        'or_package':$('select[name="or_package"]').val(), 
        'or_details':$('textarea[name="or_details"]').val(), 
       },function(data){ 
        form.fadeOut('fast', function() { 
         $(this).siblings('p.newsletter_success_box').show(); 
        }); 
       }); 
       e.preventDefault(); 
      } 
     }); 
    }); 
}); 

order.php

<?php 
$field_name = $_POST['or_name']; 
$field_company = $_POST['or_company']; 
$field_email = $_POST['or_email']; 
$field_tel = $_POST['or_tel']; 
$field_package = $_POST['or_package']; 
$field_details = $_POST['or_details']; 

$mail_to = '[email protected]'; //Change to your email 
$subject = 'Enquiry from '.$field_name.' ('.$field_company.')'; //Change to your subject 

$body_message = 'From: '.$field_name."\n"; 
$body_message .= 'Company: '.$field_company."\n"; 
$body_message .= 'E-mail: '.$field_email."\n"; 
$body_message .= 'Phone: '.$field_tel."\n"; 
$body_message .= 'Package: '.$field_package."\n"; 
$body_message .= 'Details: '.$field_details; 

$headers = 'From: '.$field_email."\r\n"; 
$headers .= 'Reply-To: '.$field_email."\r\n"; 

mail($mail_to, $subject, $body_message, $headers); 
?> 
+0

* Всегда * проверить свои формы на сервере! Представьте, что кто-то нацелился на ваш 'order.php' со сценарием, который делает прямые запросы POST к нему в десятитысячном цикле итераций. Вы становитесь массовым спам-реле (потенциально злонамеренным) без контроля того, что отправляется в письмах. – brezanac

+0

Спасибо holodoc :) –

ответ

0

IMO, вы должны проверить и данные на стороне клиента (J Query), а затем проверить и/или дезинформировать его на стороне сервера (PHP). Причина в том, что проверка на стороне клиента удобна для пользователя из-за скорости, и вы можете настроить таргетинг на определенные области страницы. Действительно, оба они нужны по разным причинам. Вот страница с дополнительной информацией:

https://luxsci.com/blog/secure-web-pages-and-web-forms-what-you-need-to-know.html

Я бы не рекомендовал делать все на стороне клиента, потому что формы могут быть представлены непосредственно на сервере, таким образом, минуя проверку JQuery.

http://php.net/manual/en/security.database.sql-injection.php

+0

Спасибо за ваш ответ. Здесь нет активности базы данных, но я понимаю, что мне по-прежнему необходимо защищать от (вставки заголовка [?]). Я уточнил вопрос сейчас, я полагаю, что я искал фактический код, который мне нужен, чтобы защитить его, а не причины для этого. –