如何安全地显示用户提交的html内容
How to safely display html content submitted by user?
我正在进行堆栈溢出样式添加图像&格式化为帖子[尽可能通过stackoverflow帖子编辑工具],所以我有了可以用于在页面上显示的演示文稿的生成html。
但问题是如何显示html,当我尝试显示html时,它会像"<html>blah bhlah</html>"
一样打印在页面上。如何在我的网页上安全地逃离这些html内容?
在您的案例中发生的情况是HTML被转义,因此被呈现为文本。
我不知道你在用什么语言写作,但我怀疑你使用了内置的文本转义函数。这会将HTML呈现为文本,但这不会使其安全。
我怀疑你正在寻找的是一个解决方案:
- 解析HTML并对其进行净化,以删除任何潜在的恶意标签,如JavaScript、外部引用、iframe等
- 存储此经过消毒的HTML
- 将输入作为页面的一部分呈现
StackExchange只支持HTML的一个子集,您可能需要模仿所采取的方法。
这不是一个简单的问题,你很可能想找到一些框架来为你做这件事,而不是推出自己的框架。
例如,有人可能想对你的系统进行一些利用:
- 用于转义包装元素的附加
</div>
标记 - 某些字符组合可能看起来不像有效的HTML,但无论如何都是这样
- 利用您页面上已有的一些Javascript
- 添加CSS以破坏页面布局
这是一个两步的过程。首先,你需要用这样的库来恢复输入;http://msdn.microsoft.com/en-us/security/aa973814.aspx。它将删除脚本标签和其他人们可能试图做的恶意事情。
然后您需要显示原始输出。对于Asp.NetMVC,它是@Html.Raw(x=>x.SomePropertyThatIsHtml)。如果你使用其他东西,它应该有一个等价物来防止它被编码。
相关文章:
- 如何在用户提交表单之前访问text_field的内容
- Iframe提交并将用户重定向回原始页面,但Iframe似乎仍然存在
- 如何在同一页面上显示用户提交的数据
- 如何在将鼠标悬停在提交/锚点上时检查复选框是否已选中,并显示提示用户这样做的警报
- 如何在用户提交后退按钮时重新加载同一页面
- 如何在用户提交链接时添加提取推文并将其发布到站点的功能
- 如何在用户输入提交后在同一页面中打印出表单字段值
- 如何在节点的沙盒环境中执行用户提交的javascript代码
- 流星 - 添加带有熨斗的路由后无法提交用户.路由器到登录和注册表单
- 纯javascript的进度图像加载程序仅当用户单击提交html表单时
- Jquery:如何处理"停止/取消”;用户停止表单提交时的事件
- 临时存储用户表单数据的最佳方式,用于表单重新提交
- 如何在用户单击提交按钮时为变量分配任意值
- 使用php提交表单,并使用ajax向用户提供响应
- 用户提交表单时按钮发生更改
- 阻止用户单击提交按钮
- 在表单中提交用户位置
- 用户登录后,将立即提交用户表单
- 点击提交用户输入的最佳方式
- 提交用户数据 jqgrid