【问题标题】:how to prevent querystring values from being visible如何防止查询字符串值可见
【发布时间】:2015-04-02 01:21:31
【问题描述】:

我们有一个用于 https 的应用程序,因此正在传输的数据受到保护(或者我应该说根据需要受到保护)我想了解有关保护/隐藏(或类似)queryString 值的信息。它是一个 jQuery/Javascript 前端,通过经典的 ASP Web 服务使用 GET 和 POST 与数据库进行通信。 Web 服务将 JSON 发送回客户端。

我意识到可以更改前端代码,因此所有内容都使用 POST 传递,但是应用程序已完成并经过测试可以部署。在查询字符串中传递了一些不应该传递的键值。是否有可能使查询字符串值无法被检查或嗅探。 URL 和查询字符串一起将提供到原始 JSON 的直接链接。我们想防止这种情况发生。也许有一些可以探索的 jQuery/AJAX 特性。也许是一些服务器 IIS 级别的策略?我猜嗅探发生在请求获取 Web 服务站点所在的服务器之前,因此某些服务器/IIS 级别的策略不是一种选择。

任何想法/建议都会很棒,谢谢。

【问题讨论】:

  • url中的查询字符串值不能隐藏。它们实际上只是一个网址。您可以仅使用帖子来隐藏它,但就像您说的那样,您可以使用浏览器开发工具来获取数据。与做会话变量一样。 Id 值绝不应该是如果更改可能会导致问题的东西。如果传入 Id,则后端应检查当前用户是否可以看到此数据。如果不是,则 404 页面或重定向。这是解决问题的正确和最简单的方法。
  • 谢谢。我不认为这是真的可能。
  • “隐藏”查询字符串值的唯一方法是执行 ajax 类型请求,或者 url 保持半常量的 iframes/frames。两者都会给你漂亮的 url,但代价是书签被破坏,任何打开过开发者工具的人都能够准确地看到正在发生的事情。底线,如果它的敏感信息不将其放在查询字符串变量中,而是放在会话中(基于 db 或 cookie)。

标签: javascript jquery ajax asp-classic


【解决方案1】:

另一种选择是使用 SSL 或加密您的数据并将其放入已发布的控件中,例如文本输入框。 Microsoft 在 ASP.NET 中为其VIEWSTATE 采用了类似的流程。

【讨论】:

  • 感谢您的意见。将使用 SSL,这只会加密数据,它不会对 URL 做任何事情,因此是查询字符串值。
  • cntd.. 手动加密查询字符串值是我意识到的一个选项。正如我在原帖中所说,代码已通过 UAT 并已签署准备上线。我一直在寻找不需要更改代码的想法(或者很少需要官方测试的更改)。看来这是不可能的。避免信息作为查询字符串传递的最佳方法是避免它们。从一开始,所有数据都应该在 POST 中通过 JQuery 的 .data 传递。经验教训(团队应该知道的......)
【解决方案2】:

您可以使用 HTTP 标头将数据发送到服务器,这些数据稍微不那么明显,但仍然可以使用更高级的开发人员工具和记录器检测到。例如,this answer 描述使用 jQuery/Javascript(正如您所要求的那样)在不使用 QueryString 的情况下发送数据。

但你不能真正阻止客户追踪这些细节。

我个人建议您的解决方案是查看会话状态。通过限定对某个会话状态的有效数据响应,并在状态无效或过期时返回 null,您可以限制对数据的访问。这可能是在它被检索到 1 次之后。此策略将涉及生成令牌或代码,该令牌或代码在较早阶段从您的服务器传递,并在请求相关数据时使用。

【讨论】:

  • 谢谢。您发布的链接适用于另一种情况,但不适用于 myn.......我不认为。如果错了,请纠正我。即使以这种方式使用预检自定义标头,已被识别为真实的请求仍将发送查询字符串值,因此我也是同样的情况。我感觉最好的办法是更改代码以消除所有 QueryStrings(这应该首先完成)。再次感谢!
  • @Mat41 就像 Zero 所说,如果您在工作流程的早期建立“会话”,那么您在 URL 中发送查询字符串的事实将无关紧要,除非您有一个有效的会话。经典 ASP 有一个内置的 Session 对象,允许您在网页的整个生命周期内访问数据,它利用会话 cookie 来完成此操作。
  • @Lankymart 感谢您的意见。我知道会话对象及其好处,但这是服务器端。最初的问题是不允许以任何我认为是单独的主题的方式来查看/嗅探或检查查询字符串值。在 ASP 会话中发生的任何事情或请求已被验证发送飞行前标头的天气,实际的 Ajax 请求仍然被发送,因此是可获取的。在这里得到很好的建议和一些研究之后,我不相信查询字符串值可以被隐藏。在最终请求之前所做的一切都是可见的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 2016-08-09
  • 2011-12-24
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多