在回显post HTML时避免XSS

Avoiding XSS when echoing POSTed HTML

本文关键字:XSS HTML post      更新时间:2023-09-26

我有一个需要做以下事情的网页:

  • 使用JavaScript动态创建HTML片段
  • 打开新窗口
  • 在新窗口中显示HTML
我的第一种方法是使用 document.write 将HTML复制到窗口中。这在大多数情况下都有效,但是当原始窗口设置了document.domain时,它会导致Internet Explorer出现问题。再加上document.write现在不太受欢迎。 所以我的第二种方法是将HTML放到一个隐藏的表单中,将表单的目标设置为新窗口,然后POST表单。这意味着我需要服务器上的脚本通过回显post内容来响应表单。

但是这是危险的,因为有人可以在内容中提出包含<script>标记的请求。如何避免潜在的XSS风险?我想我可以过滤掉像<script>这样的东西,尽管这看起来很笨拙。如果我在服务器上创建HTML,我可以加密它,或者添加一些只能在服务器上验证的令牌。但是我是在客户端创建的。

EDIT:感谢到目前为止的过滤建议。我可能会选择走这条路,但我想知道:如果我不希望对我创建的HTML有任何限制怎么办?有什么方法可以验证文档是由我的页面创建的吗?

试试HTML净化器。

编辑:

"有没有办法验证文档是由我的页面创建的?"
除非您创建另一个html服务器端副本并进行比较。用户可以查看脚本中的任何内容,尽管您可以使非技术用户难以查看。客户端Javascript可以做的任何事情,恶意用户都可以在Javascript控制台上做。

即使您以某种方式验证了请求来自您的脚本,恶意用户也可以使用Javascript控制台通过插入产生危险请求的代码行来修改您的脚本。所有GET和POST数据都必须被视为恶意数据

试试php。

PHPIDS (PHP入侵检测系统)是一个简单易用,结构良好,快速和先进的安全层为您的基于PHP的web应用程序。IDS既不删除、清除也不过滤任何恶意输入,它只是在攻击者试图破坏您的站点时进行识别,并按照您希望的方式做出反应。基于一套经过认可和严格测试的过滤规则,任何攻击都被赋予了一个数字影响等级,这使得决定黑客尝试之后应该采取什么样的行动变得容易。这可以从简单的日志记录到向开发团队发送紧急邮件,为攻击者显示警告消息,甚至结束用户的会话。