在回显POSTed HTML时避免使用XSS

时间:2011-09-07 22:01:26

标签: javascript html xss

我有一个网页,需要执行以下操作:

  • 使用JavaScript动态创建HTML片段
  • 打开一个新窗口
  • 在新窗口中显示HTML

我的第一种方法是使用 document.write 将HTML复制到窗口中。这在大多数情况下都有效,但是当原始窗口设置为document.domain时,它会导致Internet Explorer出现问题。这些天,加上document.write往往气馁。

所以我的第二种方法是将HTML放入隐藏的表单,将表单的目标设置为新窗口,然后POST表单。这意味着我需要服务器上的脚本通过回显POSTed内容来响应表单。

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

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

2 个答案:

答案 0 :(得分:0)

尝试HTML Purifier

编辑:

“我有什么方法可以验证文档是否由我的页面创建?” 除非您创建html服务器端的另一个副本并进行比较。用户可以查看脚本中的任何内容,但是对于非技术用户来说可能会很困难。客户端Javascript可以执行的任何操作,恶意用户都可以在Javascript控制台上执行操作。

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

答案 1 :(得分:-1)

尝试PHPIDS

  

PHPIDS(PHP入侵检测系统)是一个易于使用,结构良好,快速且最先进的安全层,适用于基于PHP的Web应用程序。 IDS既不剥离,清理也不过滤任何恶意输入,它只是识别攻击者何时试图破坏您的网站并以您希望的方式做出反应。基于一组经过批准和经过严格测试的过滤规则,任何攻击都会获得一个数字影响评级,这样可以轻松决定黑客企图应采取何种行动。这可以是简单的日志记录,发送紧急邮件到开发团队,为攻击者显示警告消息,甚至结束用户的会话。