HTML code:
<html>
<script>
input = input.replace(/[=>]/g, '');
document.write('<article>'+input+'</article>');
</script>
</html>
代码中的input
是用户输入的内容(任意字符串),我正在尝试alert(1)
。
如你所见,'='和'&gt;'被禁用了,我怎么能实现呢?
答案 0 :(得分:2)
只能过滤=
OR >
的正则表达式可以通过例如<script>alert(0);</script>
或<img src=x onerror="javascript:alert(0)"<
。但是,我不知道您的正则表达式是否会从输入中删除=
和>
。
答案 1 :(得分:1)
在我看来,你没有充分理由采用hacky XSS预防策略。
如果要将值输出为原始HTML,则表明您希望允许用户在其输入中使用HTML。但是,如果没有=
和>
,则很难有任何有意义的HTML。
如果您只想让用户输入纯文本,那么请妥善处理,您应该没问题:
var div = document.createElement('div');
div.textContent = input;
document.write('<article>' + div.innerHTML + '</article>');
正如Bergi在下面指出的那样,如果您不仅限于使用document.write()
,那么最好使用DOM操作。
document.body.appendChild(document.createElement('article')).textContent = input;