Javascript 在启用WAF的Amazon ALB中承载的webapp上阻止AJAX Post请求-以防表单数据包含空格字符

Javascript 在启用WAF的Amazon ALB中承载的webapp上阻止AJAX Post请求-以防表单数据包含空格字符,javascript,jquery,ajax,amazon-waf,amazon-alb,Javascript,Jquery,Ajax,Amazon Waf,Amazon Alb,我的应用程序托管在ALB中,并且启用了waf,在所有ajax请求中得到403,该请求有“anything space on*”一词。例如,如果我有一个输入为“testone”的textfield,当相同的数据传递到ajax数据时,就会出现403错误。当我使用stringify相同的数据时,错误不会出现 var value = "test one"; //inputFieldText $ajax({"url":"url",data:val

我的应用程序托管在ALB中,并且启用了waf,在所有ajax请求中得到403,该请求有“anything space on*”一词。例如,如果我有一个输入为“testone”的textfield,当相同的数据传递到ajax数据时,就会出现403错误。当我使用stringify相同的数据时,错误不会出现

var value = "test one"; //inputFieldText
$ajax({"url":"url",data:value}) // data from input field, if having space on* failed. 

$ajax({"url":"url",data:JSON.stringify(value)}) // if same data is stringified then working fine.

如果stringify是唯一的方法,那么我的应用程序中有1000个ajax请求,有什么解决方法或建议吗?请注意。

您只需覆盖jQuery$ajax并应用
JSON.stringify()
即可:

const originalAjax = $.ajax;
$.ajax = (...args) => {
    // play with data before calling ajax
    return originalAjax(...args);
};
或者,您可以扩展$ajax函数,并在扩展版本中应用您自己的逻辑:

(function(root, factory) {
    if (typeof define == 'function' && define.amd) {
        define(['jquery'], function(jQuery) {
            factory(jQuery);
        });
    } else {
        factory(root.jQuery);
    }
})(this, function(jQuery) {

    var ajax = jQuery.ajax,
    
    function extendedAjax(options) {
        var promise  = $.Deferred();
        var success  = options.success;
        var error    = options.error;
        var complete = options.complete;
        var params, that = this;
        
        params = {
            complete: function(xhr, status) {
                if (complete) complete.apply(that, arguments);
            },
            success: function() {
                if (success) success.apply(that, arguments);
                promise.resolveWith(this, arguments);
            },
            error: function() {
                if (error) error.apply(this, arguments);
                promise.rejectWith(this, arguments);
            }
        };

        ajax(jQuery.extend({}, options, params));

        return promise;
    };
    
    jQuery.ajax = function(options) {
        return extendedAjax(options);
    };

});

这将有助于一劳永逸地实现任何自定义逻辑。

您只需覆盖jQuery$ajax并在那里应用
JSON.stringify()

const originalAjax = $.ajax;
$.ajax = (...args) => {
    // play with data before calling ajax
    return originalAjax(...args);
};
或者,您可以扩展$ajax函数,并在扩展版本中应用您自己的逻辑:

(function(root, factory) {
    if (typeof define == 'function' && define.amd) {
        define(['jquery'], function(jQuery) {
            factory(jQuery);
        });
    } else {
        factory(root.jQuery);
    }
})(this, function(jQuery) {

    var ajax = jQuery.ajax,
    
    function extendedAjax(options) {
        var promise  = $.Deferred();
        var success  = options.success;
        var error    = options.error;
        var complete = options.complete;
        var params, that = this;
        
        params = {
            complete: function(xhr, status) {
                if (complete) complete.apply(that, arguments);
            },
            success: function() {
                if (success) success.apply(that, arguments);
                promise.resolveWith(this, arguments);
            },
            error: function() {
                if (error) error.apply(this, arguments);
                promise.rejectWith(this, arguments);
            }
        };

        ajax(jQuery.extend({}, options, params));

        return promise;
    };
    
    jQuery.ajax = function(options) {
        return extendedAjax(options);
    };

});

这将有助于一劳永逸地实现任何自定义逻辑。

您可以查看ALB WAF中是否有一些日志或诊断,以了解触发此操作的原因?403响应意味着您无法访问所请求的资源。通常这意味着您需要向发送的请求中添加身份验证头,以验证您是谁,并且您有权获得响应。检查文档中您正在使用的端点calling@RoryMcCrossan,我正在使用会话授权用户,我无法在每次请求中添加用户名和密码。你能告诉我,在授权标题中我可以用什么来代替用户名和密码吗,因为这完全取决于系统的设置方式。当然,您可以查看ALB WAF中的一些日志或诊断,看看是什么触发了这种情况?403响应意味着您无法访问所请求的资源。通常这意味着您需要向发送的请求中添加身份验证头,以验证您是谁,并且您有权获得响应。检查文档中您正在使用的端点calling@RoryMcCrossan,我正在使用会话授权用户,我无法在每次请求中添加用户名和密码。你能告诉我,我可以在授权标题中使用什么来代替用户名和密码吗?不完全是这样,因为这完全取决于你的系统是如何设置的。