敏感的ASP.NET会话数据是否需要加密?

时间:2010-10-26 18:57:39

标签: asp.net security session

ASP.NET Session [字符串键]数据是否需要加密才能保证安全?

如果此类数据始终保留在服务器上,那么只要数据是通过SSL从客户端发送的,那么存储信用卡信息,密码等是否安全?

6 个答案:

答案 0 :(得分:3)

随着所有的投票被抛到这里,我将加上我自己的两分钱:

我认为任何留在服务器内存中的东西,包括ASP.NET Session数据,都是以未加密的形式安全的。攻击者必须能够在服务器上执行代码才能读取内存。

另一方面,一旦将其存储在数据库中,数据就应该被加密。如果它被发送到客户端,它也应该被加密,但这超出了这个问题的范围。当然,最后,数据必须在从客户端到服务器的途中加密。

答案 1 :(得分:2)

没有。您永远不应该在会话中存储此信息。即使加密,这些信息也很脆弱。会话可能会被劫持,服务器可能会受到攻击,然后内存中碰巧在内存中用作明文的所有内容都可以被任何具有十六进制编辑器的人查看。如果需要引用此信息,则应创建存储且不可重放的哈希值,以引用安全数据存储区中的信息。

编辑:对于那些认为会话数据安全的人:

http://en.wikipedia.org/wiki/Session_hijacking
http://en.wikipedia.org/wiki/Session_fixation
http://en.wikipedia.org/wiki/Session_poisoning
http://www.owasp.org/index.php/2.0_Session_State_(in)security_(and_the_dangers_of_State_Server)

有一些方法可以保护会话数据,但如果您需要保留非常敏感的信息,例如密码或信用卡号,那么会话就不适合它。尝试编写针对银行和医疗应用程序的Sarbanes Oxley法律要求,您将在第一次审核中发现这是首先要检查的内容之一。

http://en.wikipedia.org/wiki/Session_management

答案 2 :(得分:1)

任何敏感的东西都应直接进入数据库,而不是在内存中停留的时间超过了所需的时间。我不明白为什么你需要在会​​话变量中存储密码或信用卡数据,你是否在页面之间传递它们?

答案 3 :(得分:1)

我分享了m.edmondson的想法,因为敏感信息应该存储在数据库中(有很多技术可以处理sql-injection)。另外,为了保护您的网站,您应该使用HTTPS。但是,如果您要存储对页面之间传递不敏感的信息,则可以使用会话变量,不要忘记尽快删除这些变量。记住,你可以去数据库检索数据,只有非敏感和耗时的数据才能存储在会话范围内。

答案 4 :(得分:0)

取决于 - 您对服务器上的其他应用程序有多信任?

答案 5 :(得分:0)

  1. 问题是指数据存储在同一服务器的内存中,但这只是默认配置。您还可以设置状态服务器,写入nosql数据库等。 随着云和平台即服务的兴起,无状态Web服务器变得越来越普遍。

  2. 根据您的安全政策,信用卡和密码可能不是您认为“机密”的唯一信息。一些组织也认为地址等客户信息也是保密的。这意味着任何多步骤会话结账都将包含“机密”信息。

  3. 这个具体问题的答案可能是“不”,但未来的读者也可能需要考虑这些额外的项目。