【问题标题】:Security risks of getting query string from <script> link?从 <script> 链接获取查询字符串的安全风险?
【发布时间】:2016-10-26 13:13:06
【问题描述】:

another question,我问是否可以这样做:

<script type = "text/javascript" src = "/js/myScipt.js?v=3"></script>

然后使用 jQuery 或 JavaScript 在 myScipt.js 中获取 v 的值。显然,是的,可以这样做:

var getV = document.currentScript.src.split("?v=")[1];      // JS
var getV =  $('script').last().attr("src").split("?v=")[1]; // jQuery

我的新问题 - 我是否会制造任何可以通过这样做来利用的安全风险?如果是这样,有没有办法清理 queryString 的值以消除风险?

如果重要的话,myScript.js 使用 jQuery 将它基于某些条件构造的 HTML(一些 div 和图像)插入到页面中。

【问题讨论】:

  • 脚本标签是你的代码还是第三方的东西放在了dom中?
  • 脚本标签是我自己放在DOM中的,就在body结束标签之前。这是我自己的脚本,不使用 AJAX 或以其他方式与服务器进行任何交互。
  • 现在您在变量中有一个用户提交的字符串。本身没有安全问题。重要的是你继续对那个变量做些什么。如果您使用 eval() 将其作为 JavaScript 执行,那么显然您遇到了跨站点脚本问题。如果您将其写入 HTML 标记(例如使用innerHTML$el.html()document.write()),那么您就会遇到 HTML 注入问题,也会导致跨站点脚本。如果您使用 DOM 文本和属性属性安全地构建 HTML,那么您就可以了。
  • @bobince - 谢谢你的回答。我认为我可以安全地构建 HTML。

标签: javascript jquery security hyperlink query-string


【解决方案1】:

嗯,安全性不是我用来指代 javascript 东西的词。所有客户端代码都是可浏览、可编辑、可利用的。只要您的服务器代码假设用户输入可以被伪造/损坏,您在 javascript 中做什么并不重要。所有 javascritp 框架都在浏览器中放置了很多逻辑,因此允许用户乱用它,这并不意味着这些框架不好,而且请求也可以伪造,所以,简短的回答是......安全漏洞不在您的客户端,但在您的服务器中。根据定义,您的客户是“一个大洞”,所有来自它的东西都必须被视为危险。

您必须问自己的是:“用户是否可以向服务器请求/推送某些东西,从而产生不必要的执行”?您可以让客户端用户要求格式化您的硬盘驱动器或检索所有用户的密码。期待那会发生。但是……你的服务器会允许吗?

【讨论】:

  • 我的脚本根本不与服务器交互,即没有 AJAX 请求。它基本上只是创建一些 HTML 标记并将其插入到文档中。出现查询字符串问题是因为根据查询字符串的值,脚本会使用不同的类名。既然如此,听起来是否有可能将恶意内容推送到服务器?我将在多个站点上使用该脚本,因此我认为使用查询字符串比在每个站点上使用不同版本的 myScipt.js 更容易,而只需在代码中更改一个变量。
  • 拥有一个查询字符串来提供不同的脚本版本似乎一点也不危险。我不知道你的服务器代码做了什么,但如果它只读取值并返回脚本你应该没问题。请注意,用户可能可以手动尝试其他查询字符串来获取其他版本
  • 感谢您的回复。查询字符串基本上只会更改我用 jQuery 构建的 HTML。例如,“myScript.js?v=full”可能使用引导程序“.container-fluid”类,而“myScript.js?v=container”可能使用 .“container”类。查询字符串将取决于我使用它的网站的布局。这是一个简单的例子,但它基本上描述了我正在尝试做的事情。
  • 我明白了。关于 javascript 的安全问题有多种形式。我认为最重要的问题与 1. 使用 eval() 以某种方式从用户输入加载的内容有关 2. javascript 驱动的 ui 用户可能能够以他/她的方式更改程序的执行将能够欺骗服务器执行或获取受保护的代码/数据。这不是你的问题
  • 感谢您的解释,很抱歉之前错过了。这一切对我来说都很有意义,我觉得这样做而不是造成安全风险会更好。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 2017-03-08
  • 2020-06-25
  • 1970-01-01
  • 2013-04-01
  • 2011-09-14
相关资源
最近更新 更多