innerHTML是DOM元素的一个属性,用于获取或设置元素的HTML内容。当使用innerHTML时,浏览器会解析提供的字符串并将其作为HTML处理。
在HTML中,某些字符具有特殊意义,需要使用HTML实体来表示:
<
表示为 <
>
表示为 >
&
表示为 &
"
表示为 "
'
表示为 '
原因:未转义用户输入直接设置innerHTML
解决方案:
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
const userInput = '<script>alert("XSS")</script>';
document.getElementById('content').innerHTML = escapeHtml(userInput);
解决方案:使用DOMPurify等库
import DOMPurify from 'dompurify';
const dirty = '<div><script>alert("XSS")</script><p>Safe content</p></div>';
const clean = DOMPurify.sanitize(dirty);
document.getElementById('content').innerHTML = clean;
原因:未正确处理字符编码
解决方案:
// 确保文档使用UTF-8编码
<meta charset="UTF-8">
// 或者在JavaScript中处理
const text = "特殊字符: & < >";
document.getElementById('content').innerHTML = text;
对于动态内容,考虑使用:
没有搜到相关的文章