在jQuery插件中提供回调函数是否安全(XSS攻击)?

but5z9lq  于 2023-05-17  发布在  jQuery
关注(0)|答案(1)|浏览(149)

我一直在使用一个流行的jQuery插件多年,在阅读有关网络安全的文章时,我当然不是Maven,但我想学习如何编写更好的代码,我意识到这个插件和更多的插件可能容易受到XSS攻击。
你能帮助我了解这个插件是否安全吗?
下面是简化的代码(我不会提到实际的插件...):

(function ($, document, window){
    var defaults = {
        callback: false,
        // more options
    };

    publicMethod = $.fn.pluginName = function (options, callback) {
        options = options || {};
        var settings = $.extend(true, {}, defaults, options);

        // event listener.
        trigger('pluginName.launch');
        
        // callback function.
        $.isFunction(settings.callback){
            settings.callback.call();
        }

        // more stuff
    };
};
}(jQuery, document, window));

所以,你可以像这样调用插件,回调包含任何你喜欢的代码:

$.pluginName({
    option1: value1,
    callback: function(){
        $('#someDIV').html('<script>...</script>');
        $('body').append($('<script />...'));
        eval();// Do eval things...?
    }
});

而且,您也可以向事件侦听器添加自定义代码.

$(document).on('pluginName.launch', function(){
    eval();// More eval stuff?
});

这是一个问题,因为用户输入是unsanatized JS?
我设法在Chrome控制台中使用事件侦听器和我喜欢的任何代码执行.call()。我觉得很可疑。

var test = function(){
  alert('foo');
  //eval();....
}
    
$(document).on('pluginName.launch', function(){
    test.call();
});

谢谢

krcsximq

krcsximq1#

XSS需要一个攻击载体如果攻击者可以从URL或从他们设法保存在您的数据库中的东西将代码注入到页面中,您将在其他人的浏览器上执行,那么它是脆弱的。
因此,如果例如yourpage?query='something you will show on the page'可以链接,则可以将其更改为
yourpage?query='<img onerror=\'loadSomethingHorrible()\' />'
但是如果劫持回调的唯一方法是使用控制台,那么它可能就不那么容易受到攻击

相关问题