2016-08-04 19 views
1

我有以下流程:与查询参数的URL,运行在服务器端的一些逻辑,然后使用模板引擎存根HTML页面XSS预防传递给JS代码文件参数

    产生
  • 包含一个JavaScript文件,它执行主逻辑。
  • <script>标记包含一个JS对象,该对象具有此JS代码的参数,部分取自查询参数。

现在我想清理我收到的参数,以防止XSS注入。这个问题,其中一个参数是一个令牌,所以我不想过于严格的验证(只是不允许所有可能的XSS字符听起来太严格),但我发现大多数库处理纯HTML,而不是JS代码(在<script>标签内)。当我阅读所有的正则表达式解决方案时,我也感到有点不安,因为我在处理安全性(有单元测试而不是一堆正则表达式)时,信任开源的

关于图书馆的任何建议&可能的方法?我们在JVM环境中运行。

+0

我认为你可以html编码你的查询字符串参数,然后你可以安全地显示它们到你的html响应页面。在Java中,你可以使用org.apache.commons.lang.StringEscapeUtils –

+0

所以你传递的URL参数作为JS obejct属性的值,是否正确? – mjsarfatti

+0

@mjsarfatti这是正确的 –

回答

2

最简单,最简单,因此也更安全的方法是使用data attributes来表示动态的用户提供的值。

这样你只需要担心HTML编码,没有复杂的十六进制实体编码(\x00)即OWASP recommend

例如,你可以有:

<body data-token="@param.token" /> 

@param.token将输出HTML编码的查询字符串参数的版本。例如page?token=xyz"会输出

<body data-token="xyz&quot;" /> 

这将缓解您的XSS漏洞问题。

然后你可以使用类似JQuery to easy retrieve the data attribute values in your JavaScript

var token = $("body").data("token"); 

简单和安全。

+0

OP,if你遵循上面的内容,注意如何使用'token',它对于所有客户端JavaScript的使用来说并不神奇,如果它以'$(“foo”)。html(token)'结尾,或者的其他无数不安全的方法,那么您将容易受到基于DOM的XSS问题的攻击,而不是您最初反映的XSS问题。 – coastalhacking

1

想象你想你的参数指定为一个字符串,因为这样的:

{ 
    ... 
    x: '[PARAMETER]' 
} 

你要确保[参数]没有打出去引号的字符串。

在这种情况下,您需要转义的是'字符和关闭</script>标记。注意:考虑到“逃离逃跑”攻击,攻击者发送字符串\',该字符串被转义为\\',该字符串返回'(并且您从开始的位置返回)。

它通常是简单安全,如OWASP笔记,

转义的所有字符小于256与\ XHH格式

我请你阅读XSS攻击的OWASP页面,特别是https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.233_-_JavaScript_Escape_Before_Inserting_Untrusted_Data_into_JavaScript_Data_Values

+1

不幸的是,这种方法容易受到攻击者通过''突破脚本标记。然后攻击者可以用另一个“

  • 11. Magento Xss预防
  • 12. Laravel预防组参数传递给控制器​​
  • 13. 的Javascript asp.net C#多OBJET传递给JS代码文件
  • 14. Struts XSS预防 - 防止GET XSS
  • 15. 通过代码将参数传递给html通过代码
  • 16. 将预定参数传递给scipy.optimize.fsolve
  • 17. 将参数传递给git预推钩
  • 18. 将C#参数传递给JS
  • 19. 将参数传递给JS Animation in Angular
  • 20. 将XSL参数传递给JS
  • 21. xss预防与ckeditor
  • 22. 如何使用gulp将参数传递给角度js文件
  • 23. 为什么JavaScript将源代码文本传递给参数?
  • 24. 将参数传递给路由文件
  • 25. 将参数传递给rjs文件
  • 26. 将文件传递给visual studio参数
  • 27. CakePHP,将参数传递给js.php文件?
  • 28. D3.js:将参数传递给事件处理函数
  • 29. 如何将一个参数从一个php文件传递给AJAX js文件?
  • 30. 将变量传递给JS文件