XSS安全img src插入

时间:2017-08-20 02:21:50

标签: javascript html

如何安全地将受用户影响的网址推送到DOM,即src的{​​{1}}属性?

除了有效的img和svg中的脚本有限外,

img不会执行任何其他操作。休闲<img>技巧也不起作用,因为输入被引用。这足以通过img确保安全的DOM插入吗?

简化了代码段,检查onload是否为有效网址。

修改:url 之类的内容不是有效网址,请参阅此处:http://foo“onerror =”alert('XSS')“”。您可以假设http://foo" onerror="alert(&apos;XSS&apos;)" "肯定是有效的网址。请参阅https://en.wikipedia.org/wiki/Percent-encoding#Types_of_URI_charactersCheck if a Javascript string is a urlhttps://jsfiddle.net/mppkgd7u/

url
var user = 'random/url/path'; // any kind of user generated string
var url = 'http://' + user; // guaranteed to be url
document.getElementById('view').innerHtml = '<img src="'+url+'">';
console.log(document.getElementById('view').innerHtml);

1 个答案:

答案 0 :(得分:4)

如果用户的字符串为'no" onerror="alert(0)'

,该怎么办?

这将扩展为:

<img src="http://no" onerror="alert(0)">

最安全的方法是使用document.createElement并分配src属性。使用innerHTML不是一种非常安全的方法

var img = document.createElement('img');
img.src = ...;