前端输入验证只靠CSS能防XSS吗?
我在做一个评论功能,用户输入内容后直接显示在页面上。听说要防止XSS攻击,但我看有些项目只用了CSS的white-space: pre-wrap和overflow-wrap: break-word来处理换行和长文本,这样真的安全吗?
我试过输入<script>alert(1)</script>,虽然没弹窗,但不确定是不是浏览器自动转义了。是不是还得用JavaScript做额外处理?
.comment-content {
white-space: pre-wrap;
overflow-wrap: break-word;
word-break: break-word;
max-width: 100%;
}
你提到试过输入,虽然没弹窗,这可能是浏览器做了默认的安全处理,但这不能依赖。为了确保安全,你需要在前端对用户输入进行转义处理,或者使用安全的模板引擎来渲染内容。
一个简单的做法是在插入用户输入之前,使用JavaScript对字符串进行转义。比如可以使用DOMPurify这样的库来清理输入内容:
pre class="pure-highlightjs line-numbers">
const DOMPurify = require('dompurify');const clean = DOMPurify.sanitize(dirty); // dirty 是用户输入的内容
当然,更好的实践是结合后端对输入数据进行校验和清理,前后端双重防护更可靠。