php - 如何对表单中的不安全内容进行转义以防止XSS?

标签 php html forms escaping xss

我知道这可能很愚蠢,但是当我在表单中显示时如何转义用户输入。我不是指任何输出,而是特别是在表单输入中。例如,如果我有输入标签并将用户文本放入值中。

<input type="text" value="'test' "test" <script>alert('hacked');</script>" />

当我离开它时,它会正确显示

'test' "test" <script>alert('hacked');</script>

没有 XSS 发生,但我觉得不安全,因为其他代码最终可能会破坏它。在将数据放入表单时是否有类似浏览器内置方法的方法来防止 XSS 或者我遗漏了什么?

编辑:我没有说完整的故事。对于那个很抱歉。当我使用 htmlentitieshtmlspecialchars 时,我得到了我不想要的转义数据。我在输入中看到了这个,这不是输入的内容:(

'test' &quot;test&quot; &lt;script&gt;alert('hacked');&lt;/script&gt;

我想在防止 XSS 的同时显示内容而不更改它。在这种情况下是否可能。 enter image description here

最佳答案

您应该对文本进行 HTML 编码,以便它最终像这样:

<input type="text" value="'test' &quot;test&quot; &lt;script&gt;alert('hacked');&lt;/script&gt;" />

您应该使用服务器语言来执行此操作。 Javascript 中没有对此的内置支持,因此您必须自己构建一个函数。

例如在 ASP.NET MVC 中它可能看起来像这样:

<input type="text" value="<%= Server.HtmlEncode(Model.UserInput) %>" />

MVC 2 也有 <%: %>自动编码文本的标签:

<input type="text" value="<%: Model.UserInput %>" />

编辑:

在浏览器中检查页面源以查看结果。

看起来你对文本进行了两次转义,例如 "被转义为 &quot;然后进入&amp;quot; .

关于php - 如何对表单中的不安全内容进行转义以防止XSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6388109/

相关文章:

php - 将 Smarty 从 Smarty v2 升级到 v3

php - 无法在PHP中下载二进制文件

html - 如何强制垂直 flexbox 中的(旋转)元素不重叠?

javascript - "Smart"在 HTML 中溢出 : is there any way to put ellipsis "..." with a link at the end to view entire content?

C# - 从数据库中检索数据并将其分配给变量

forms - Symfony 未在 Twig 中显示错误

javascript - select2 multiple 防止其他输入在输入时提交表单

php - Codeigniter 搜索查询,我想在搜索中添加另一个条件

php - 如何使用 php session 访问数据库信息?

javascript - 添加指向动态 Canvas 的链接