2015-07-21 68 views
1

因此,我有一个基本的mail()联系表单,通过jQuery脚本获得POSTS数据,我想验证和清理数据。显然主要原因是为了安全,但也是为了防止任何错误。目前唯一的验证形式是HTML(IE type =“tel”),这显然是不够的,也不安全。消毒/验证使用jQuery提交的PHP联系表格

我的问题是我该如何保护这个脚本?在jQuery或PHP中。对不起,但我对这类东西相当陌生。 (编辑 - 我想知道如何具体保护此,一个例子的代码,一个教程等-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查询),然后在服务器端(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

感谢您的回答。这里没有数据库活动,但是我仍然需要防止(头部注入[?])攻击。我现在已经细化了这个问题,我想我正在寻找我需要的实际代码来保护它,而不是这样做的原因。 –