1

我的应用程序托管在 ALB 中并启用了 waf,在所有带有“任何空间*”一词的 ajax 请求上获得 403。例如,如果我有一个带有“test one”之类的输入的文本字段,那么当相同的数据传递给 ajax 数据时,会出现 403 错误。当我使用字符串化相同的数据时,错误不会出现。

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 请求,有什么解决方法或建议吗?请指教。

4

1 回答 1

0

您可以简单地覆盖 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);
    };

});

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

于 2020-07-28T10:18:33.930 回答