【问题标题】:ASP.NET - cookieless=UseCookies - only session id in browser? No client cookies?ASP.NET - cookieless = UseCookies - 浏览器中只有会话ID?没有客户端cookies?
【发布时间】:2021-03-02 18:08:40
【问题描述】:

我正在开发 asp.net (4.0) 网站。我试图使用表单身份验证()。显然试图让一些页面安全。我的理解是,最好的安全解决方案是设置 cookieless="UseCookies" 这样它就不会将 id 写入 URL。

我的问题是当我使用 cookieless="UseCookies" 时到底发生了什么。

  1. 是创建了会话并在浏览器中存储了一些 id(~内存,后来用于从 IIS 服务器端会话“cookie”中提取信息)还是它实际上是创建“常规”客户端加密 cookie 的配偶?

(我显然试图避免写入 URL 和客户端 cookie - 不确定是否可以避免所有这些)

  1. 如果它在浏览器中设置 ID,是否所有浏览器都允许在其中存储会话 ID。如果浏览器不允许这样做会发生什么?有没有办法预先检查它?

所以我想作为我们所有人,我只是在尝试构建适当的安全应用程序,如果有人有任何其他建议,将不胜感激。

坦克很多,

【问题讨论】:

  • 您应该在问题中添加更多标签,否则人们将很难找到它。试试 asp.net 什么的。

标签: asp.net security cookieless


【解决方案1】:

如果您允许 cookie,那么设置 cookieless="false" sessionID 将存储在 cookie 中,并且在整个会话期间(默认为 20 分钟)都可以访问。

如果您允许 cookie 并且用户将在浏览器中禁用 cookie,则 sessionID 将不会存储在任何地方,并且每次用户创建新请求(通过转到另一个页面)时,他都会获得新的 sessionID,因此没有数据可以被保存。

您可以使用 cookieless="true" 加密并将 sessionID 附加到 url,这样即使启用了 cookie,用户也可以保持会话。

还有一个 cookieless="AutoDetect" 将确定用户是否禁用或启用了 cookie,并基于此创建带有 sessionID 的 cookie 或将其扔到 URL。这样做的缺点是,对您页面的每个请求都会产生 3 个请求,一个请求确定用户是否启用了 cookie,将一个查询字符串附加到第一个请求的结果中,第三个请求将用户带到适当的 URL。

还有一个设置可以根据浏览器的数据关闭和打开无 cookie。因此,如果有人使用 10 年前的手机浏览您的页面,它可能会将 cookie 附加到 URL,因为在该设备上没有允许 cookie 的选项。

我希望这会有所帮助。我个人会向用户发送消息以启用 cookie,甚至不担心其他情况,但有些人(例如我的老板)不喜欢这个想法并希望每个人都支持。

【讨论】:

  • 非常感谢您的回复。
  • 让我确定你是否正确。 1. 要保留 sesson id,它可以在浏览器中(如果设备不支持,则为 url)或客户端 cookie。所以 url 请求可能被劫持,cookie 可能被盗,我们没有更好的方法来构建它吗?我只在会话 2 的整个生命周期内理解该问题。如果在(web.config)中的表单中的 protection="All" 是否正确,该会话和 cookie 被加密? 3. 我可以检查设备是否支持 cookie 并写入 url 吗? Agine 感谢您的帮助。
  • 1.是的,但是 sessionID 总是在 URL 和 cookie 中加密。 3. 我认为 ASP.NET 有一个包含设备及其 cookie 支持值的列表。我不是 100% 确定这是如何工作的。我相信你可以用谷歌搜索。
  • 那么您认为构建它的最佳方式是什么? (我现在不能使用 ssl)只使用 cookie 来存储会话 id?并希望它不会被盗。还是有更好的方法存在?
  • 我会说使用 cookieless="false" 如果有人禁用了 cookie,只需说“请启用 cookie 以继续”,其他所有人都会在 cookie 中拥有他们的 sessionID。
猜你喜欢
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
相关资源
最近更新 更多