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