如何安全地将受用户影响的网址推送到DOM,即src
的{{1}}属性?
img
不会执行任何其他操作。休闲<img>
技巧也不起作用,因为输入被引用。这足以通过img确保安全的DOM插入吗?
简化了代码段,检查onload
是否为有效网址。
修改:url
之类的内容不是有效网址,请参阅此处:http://foo“onerror =”alert('XSS')“”。您可以假设http://foo" onerror="alert('XSS')" "
肯定是有效的网址。请参阅https://en.wikipedia.org/wiki/Percent-encoding#Types_of_URI_characters,Check if a Javascript string is a url和https://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);
答案 0 :(得分:4)
如果用户的字符串为'no" onerror="alert(0)'
这将扩展为:
<img src="http://no" onerror="alert(0)">
最安全的方法是使用document.createElement
并分配src
属性。使用innerHTML
不是一种非常安全的方法
var img = document.createElement('img');
img.src = ...;