如何清理jQuery脚本中的输入字段

4nkexdtk  于 2023-01-12  发布在  jQuery
关注(0)|答案(1)|浏览(78)

我想在发送 AJAX 请求之前清理表单字段以增加安全性。目前我的Javascript代码如下:

jQuery(document).ready(function($) {
   $('#login-form').submit(function(e) {
        e.preventDefault(); // stop the form from submitting the normal way
        var form = $(this);
        var data = {
            'action': 'login',
            'username': form.find('#username').val(),
            'password': form.find('#password').val(),
            'remember': form.find('#remember').val(),
            'nonce': form.find('input[name="nonce"]').val()
        };

        $.ajax({
            type: 'POST',
            url: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
            data: data,
            success: function(response) {
                if (response.success) {
                    location.reload();
                } else {
                    $('#login-form-message').html(response.data.message);
                }
            }
        });
    });
});

我正试着像这样清理输入字段,我是一个初学者,我不完全确定我在做什么。有人能提供一个提示吗?我感谢任何回应,谢谢。

var sanitize = require('sanitize-html');
jQuery(document).ready(function($) {
   $('#login-form').submit(function(e) {
        e.preventDefault(); // stop the form from submitting the normal way
        var form = $(this);
        var username = sanitize(form.find('#username').val());
        var password = sanitize(form.find('#password').val());
        var remember = sanitize(form.find('#remember').val());
        var nonce = sanitize(form.find('input[name="nonce"]').val());
        var data = {
            'action': 'login',
            'username': username,
            'password': password,
            'remember': remember,
            'nonce': nonce
        };

        $.ajax({
            type: 'POST',
            url: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
            data: data,
            success: function(response) {
                if (response.success) {
                    location.reload();
                } else {
                    $('#login-form-message').html(response.data.message);
                }
            }
        });
    });
});
zvms9eto

zvms9eto1#

医生:不要。
“清理”本身并不是一个有用的术语。如何清理数据取决于:

  • 要保护的内容(插入数据库、HTML文档、电子邮件等时的保护要求不同)。
  • 如果你想做破坏性(丢弃看起来可能是坏的数据)或非破坏性(编码数据,使特殊字符没有他们通常的特殊意义)。

你没有告诉我们这些,所以我们不能告诉你如何处理数据。
但是,这并不重要,因为您是在询问如何在客户端上执行此操作。
如果您想在数据插入HTTP请求之前保护数据(这样请求正文就可以无错误地解析),那么$.ajax已经为您做了
如果您想在PHP处理数据之前保护数据,那么尝试在客户端上进行保护是完全错误的,因为攻击者可以绕过您的客户端代码并向服务器提交他们想要的任何内容。
由于您必须在服务器上执行此操作,因此:

  • 破坏性净化需要被复制(这只会引入出错的风险)。
  • 非破坏性的净化不能被完成,因为服务器将结束双重编码数据,这将破坏它。

相关问题