【问题标题】:Do I still need PHP validation while I am using Jquery.validate.Js and ajax?我在使用 Jquery.validate.Js 和 ajax 时还需要 PHP 验证吗?
【发布时间】:2018-06-07 01:25:10
【问题描述】:

我知道 js 验证是针对客户端的,而 php 验证是针对服务器端的。 用户可以跳过 js 验证并提交,但是当我在 ajax 中获取操作 php 文件时可以吗?

我的意思是我正在使用以下代码来验证表单。如您所见,我在 ajax 中调用 postProjectAction.php .. 如果用户跳过js/禁用js并提交表单,表单将不会被提交,因为,

  1. 我的表单没有动作
  2. 如果不调用postProjectAction.php,表单数据将不会被插入或提交到数据库。当用户禁用 js 代码不会调用 postProjectAction.php

所以没有机会提交表单。 这仍然不安全吗?

html:

<form id="form_validation" method="POST">
</form>

js 验证:

$(document).ready(function() {

    $("#form_validation").submit(function() {
                if ($("#form_validation").valid()) {
                    var data1 = $('#form_validation').serialize();
                    $.ajax({
                        type: "POST",
                        url: "postProjectAction.php",
                        data: data1,
                        success: function(msg) {
                            console.log(msg);
                            $('.messagebox').hide();
                            $('#alert-message').html(msg);
                            $('.messagebox').slideDown('slow');
                        }
                    });
                }
                return false;
            });     
});

【问题讨论】:

  • 是的,考虑一下其他人使用此 url 发送垃圾邮件的场景
  • 有时由于网络连接不畅导致某些js文件无法正确加载,因此在这种情况下用户无法提交表单。因此最好同时使用客户端和服务器验证
  • 我的经验法则是,前端所做的几乎所有事情都不会涉及安全性,因为它都可以由最终用户修改。如果在任何时候你需要一些东西来保证安全,那就是我开始关注服务器端的时候。
  • 简单规则:不要相信客户!

标签: php jquery ajax validation


【解决方案1】:

PHP 验证在服务器端,而 JQuery 在前端。

所以它基本上取决于需要或要求。

机器人可以破坏前端验证,但很难破坏服务器端验证。

底线,做服务器端验证更安全:)

【讨论】:

  • 你读过“如果用户跳过JS/禁用js并提交表单,表单将不会被提交,因为我的表单没有任何操作,表单数据不会被插入或提交到如果 postProjectAction.php 没有被调用,则数据库。当用户禁用 js 时,代码将不会调用 postProjectAction.php“即使 js 坏了也无法提交表单,这将如何不安全?
  • 好吧,在该页面的查看源代码中,我可以很容易地看到操作 php 文件并沿字段创建链接:)
  • @Riffaz 但有人可以查看代码,查看 PHP 文件的名称并开始向其发送 POST 数据并忽略所有 javascript。这意味着关于安全的 OP 问题的答案是不,它在技术上仍然不安全。
  • @Riffaz Starr:黑客不会使用您的 HTML 或 JS,因此您的 HTML/JS 阻止了什么并不重要。黑客只会查看您的代码以查看将哪些 URL 和变量发布到您的服务器。然后他将使用其他代码或 curl 等工具发送 POST。
【解决方案2】:

是的,您的表单仍然不安全。用户无需禁用 JavaScript 甚至提交您的表单即可绕过实施的验证。

您的代码仅在提交表单时进行验证。用户只需将以下代码粘贴到浏览器控制台并运行它即可发布数据,而无需进行任何验证。

var data1 = $('#form_validation').serialize();
$.ajax({
        type: "POST",
        url: "postProjectAction.php",
        data: data1,
        success: function(msg) {
            console.log(msg);
            $('.messagebox').hide();
            $('#alert-message').html(msg);
            $('.messagebox').slideDown('slow');
        }
    });

这只是可以绕过表单验证的众多方法之一。验证来自客户端的所有数据始终是一个好习惯。

【讨论】:

    【解决方案3】:
    $(document).ready(function() {
    
        $("#form_validation").submit(function() {
                    if ($("#form_validation").valid()) {
                        var data1 = $('#form_validation').serialize();
                        $.ajax({
                            type: "POST",
                            url: "postProjectAction.php",
                            data: {data1:data1},
                            success: function(msg) {
                                console.log(msg);
                                $('.messagebox').hide();
                                $('#alert-message').html(msg);
                                $('.messagebox').slideDown('slow');
                            }
                        });
                    }
                    return false;
                });     
    });
    

    编辑 postProjectAction.php

    if(!$_POST['data1'] OR !$_POST['blalbla']) header("HTTP/1.0 404 Not Found");
    else{Your actions}
    

    【讨论】:

    • 我有时会做一件事来保护免受某些机器人的侵害,那就是使用蜜罐。一个隐藏的输入字段,它是空白的。如果 php 脚本认为它不是空白的,那么它将拒绝该请求,因为人类不会向其中输入数据。甚至更高级的人也在使用 javascript 在加载后隐藏字段,以防机器人足够聪明地忽略隐藏字段。
    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2014-06-11
    • 2015-12-25
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多