清理/验证使用jQuery提交的PHP联系人表单


Sanitizing/Validating a PHP contact form which submits using jQuery

所以我有一个基本的mail()联系人表单,它通过jQuery脚本post数据,我想验证和清理数据。显然,主要原因是为了安全,但也为了防止任何错误。目前唯一的验证形式是在HTML中(IE type="tel"),这显然是不够的,也不安全。

我的问题是我应该如何保护这个脚本?在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@email.com'; //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);
?>

依我看,您应该在客户端(JQuery)验证和数据,然后在服务器端(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