允许jQuery访问PHP文件但拒绝其他所有内容

时间:2014-09-24 06:27:28

标签: php jquery forms

我有一个处理表单的PHP文件,称之为" form-process.php"

在JS文件中,我捕获表单的提交,并使用jQuery .post()将信息发送到此PHP文件。

$('#form').submit(function(e) {
    e.preventDefault();
    var form = $(this),
        action = form.attr('action');

    $.post(
        action,
        form.serialize(),
        function(data) {
            // display results on page
        }
    )
})

问题的第一部分:

保护文件form-process.php的最佳方式是什么,所以无法直接访问www.website.com/form-process.php,但jQuery仍然可以访问它用于处理。

问题的第二部分:

在form-process.php中,我使用htmlspecialchars()来删除输入到表单中的潜在HTML。是否有任何其他主要的安全问题建议解决?

1 个答案:

答案 0 :(得分:0)

回答第一个问题

无法仅通过jQuery访问form-process.php。您可以向执行form-process.php所需的POST数据添加哈希值,但潜在的攻击者只需查看您的JavaScript代码即可读取该哈希值。您可以对代码进行模糊处理,但攻击者仍然可以检查通过AJAX发送的数据,并且仍然可以获取哈希值。 jQuery在客户端执行,无论您如何尝试保护代码,攻击者都可以复制您的所有安全机制。

回答第二个问题

正确过滤数据是保护form-process.php的最佳方式。分析您只能接受的数据类型,并创建仅接受此类数据的过滤器,而不是其他任何数据。看看这个功能:

http://php.net/manual/en/function.filter-input.php

http://php.net/manual/en/filter.filters.validate.php

如果您希望某个字段包含网址,请仅接受网址(FILTER_VALIDATE_URL)。如果您需要电子邮件地址,请仅接受电子邮件地址(FILTER_VALIDATE_EMAIL)等

当用户必须登录才能提交表单时,您还可以验证用户是否也在form-process.php文件中登录。