我有一个网站,为了方便起见,我在错误页面中放置了两个输入参数 第一个参数(code)是错误代码 第二个参数(desc)是错误文本
并且两个输入参数都显示在页面的标签中
所以,为了防止XSS,我添加了以下代码:
<script>
const urlParams = new URLSearchParams(window.location.search);
const code = urlParams.get('code');
const desc = urlParams.get('desc');
var el = document.getElementById("txt-code");
if (!(code.toLowerCase().includes("script") || code.toLowerCase().includes("<") || code.toLowerCase().includes(">")))
el.innerHTML = code.toLowerCase().replace("script", "");
var deskarea = document.getElementById("desc-area");
if (desc == null || desc == '') {
deskarea.style.display = "none";
} else {
var el1 = document.getElementById("txt-desc");
if (!(desc.toLowerCase().includes("script") || desc.toLowerCase().includes("<") || desc.toLowerCase().includes(">")))
el1.innerHTML = desc.toLowerCase().replace("script", "");
}
</script>
众所周知,我过滤了“<", ">”,“script”(字母大小写都没关系),所以如果不良用户输入JavaScript代码,文本将不会显示在页面上,并且会仅显示为空字符串。
有办法绕过我的过滤器吗?如果是(告诉我如何绕过?以及如何解决这个错误?
谢谢
我输入“”“
使用
textConent
代替innerHTML
,这样你就不用担心XSS了
<script>
const urlParams = new URLSearchParams(window.location.search);
document.getElementById("txt-code").textContent = urlParams.get('code') ?? "";
document.getElementById("txt-desc").textContent = urlParams.get('desc') ?? "";
</script>