我知道这可能很愚蠢,但是当我在表单中显示时如何转义用户输入。我不是指任何输出,而是特别是在表单输入中。例如,如果我有输入标签并将用户文本放入值中。
<input type="text" value="'test' "test" <script>alert('hacked');</script>" />
当我离开它时,它会正确显示
'test' "test" <script>alert('hacked');</script>
没有 XSS 发生,但我觉得不安全,因为其他代码最终可能会破坏它。在将数据放入表单时是否有类似浏览器内置方法的方法来防止 XSS 或者我遗漏了什么?
编辑:我没有说完整的故事。对于那个很抱歉。当我使用 htmlentities
或 htmlspecialchars
时,我得到了我不想要的转义数据。我在输入中看到了这个,这不是输入的内容:(
'test' "test" <script>alert('hacked');</script>
我想在防止 XSS 的同时显示内容而不更改它。在这种情况下是否可能。
最佳答案
您应该对文本进行 HTML 编码,以便它最终像这样:
<input type="text" value="'test' "test" <script>alert('hacked');</script>" />
您应该使用服务器语言来执行此操作。 Javascript 中没有对此的内置支持,因此您必须自己构建一个函数。
例如在 ASP.NET MVC 中它可能看起来像这样:
<input type="text" value="<%= Server.HtmlEncode(Model.UserInput) %>" />
MVC 2 也有 <%: %>
自动编码文本的标签:
<input type="text" value="<%: Model.UserInput %>" />
编辑:
在浏览器中检查页面源以查看结果。
看起来你对文本进行了两次转义,例如 "
被转义为 "
然后进入&quot;
.
关于php - 如何对表单中的不安全内容进行转义以防止XSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6388109/