Viewstate中的敏感数据?

我需要在每个会话中跨多个页面(通过https运行)存储敏感数据。

我不能使用会话对象,主要原因是会话存储被设计为与备份存储一样(主要是进行服务调用并加载会话)。 如果会话已重新启动,或者换句话说会话中的密钥不存在,请创建服务并重新填充会话。

因此,在用户键入敏感数据的情况下,我需要跨页面传送此数据,我们暂时没有持久存储,因此剩下的选项是将这些敏感数据存储在Viewstate中。

1)我应该加密数据并存储在Viewstate中(不建议使用 – sec&perf。含义)或2)我应该将数据存储在可序列化的类中并将其存储在Viewstate中吗? (由于性能影响,不再推荐)

有什么意见吗?

我需要在每个会话中跨多个页面(通过https运行)存储敏感数据。

ViewState在页面级别设置和维护。 它不能跨越不同的页面请求,只能回传当前页面。 假设你真的意味着你必须“跨越几页”而不是回发。

您可能会将敏感数据存储在cookie中,但这会带来一些安全风险。

您还可以将敏感数据存储在服务器端数据存储(xml文件,数据库等)中,并将密钥存储在客户端cookie中的数据中。 稍微安全一些。

好吧,一般的答案是不要这样做! 虽然viewstate是(可以)加密的,但它并不是为存储敏感数据而设计的。 原因是视图状态数据可以由第三方获取并在稍后进行翻译。

但是,这并不意味着你不应该这样做…… :-)首先,你的连接是通过https,所以你传输的所有内容都已加密。 这意味着获取敏感数据将非常困难。 如果第三方窃取您的敏感数据,他首先必须解密连接,然后解密视图状态。 因此,攻击者可能更容易使用其他方法来获取您的数据(例如欺骗用户,网络钓鱼等)。

因此,为了您的数据的安全性,我会保留将它们存储在加密的视图状态中,并且使用https就足够了。

选择1)和2)之间应该对性能没有影响或影响很小。 在viewstate中存储对象时,对象被序列化然后存储,因此无论您选择哪种方法,数据都会为您序列化。 设计一个类来存储你的数据听起来像一个干净的方法,所以我建议。 您甚至可能希望创建一个将敏感数据存储在加密字段中的类,以便更难获取敏感信息,但这会花费更多的性能。

考虑到您正在讨论编写代码以使其与viewstate安全可靠地工作的相当大的努力,您应该考虑将时间和精力放在仅创建服务器端数据存储中。

您已经明确定义了一个需求,并且实现它的工作量可能与您自己选择的自定义视图状态机制相同或更少。 不同之处在于持久性存储可能在应用程序的其他位置具有值,或者稍后在其他function的开发期间具有值…而视图状态机制不会在一个需求的直接范围之外添加值。

在服务器上删除一个简单的MS Access数据文件是相当简单的,或者您甚至可以直接插入XML或文本文件并将数据写入这些文件。 除了SQL Express,VistaDB甚至MySQL之类的轻量级关系存储之外,还有更多的努力

如果您使用的是2.0,则可以加密视图状态。 请参阅Channel9文章 。 AES对美国军方和联邦政府来说已经足够好了。 虽然DES可以在数小时内破解,但AES需要150万亿(与2001年硬件相比)数年来破解AES。 即使使用更快,更分散的硬件,您的视图状态也不值得恶意用户破解它所需的资源。 除非您认为机器密钥在某种程度上不安全,否则我不确定加密带来的安全风险。

至于性能,具有敏感数据的viewstate是在有价值的内存服务器端存储数据或使用有价值的CPU周期来加密数据之间的权衡(特别是在2.0中,您可以配置“ 服务器端viewstate ”)。 您可能希望通过工作量和特定硬件收集一些经validation据,以找出真正的权衡取舍。 如果将应用程序设计为在会话而不是viewstate中存储状态还为时不晚,您可能还需要考虑SqlSessionStore,它是安全的(服务器端)并且不使用太多服务器端内存。

如果你使用的是1.1,那么关于将敏感数据放入viewstate的所有令人沮丧的建议都是100%正确的,因为从1.1解码视图状态(或者2.0的未加密视图状态)是一项微不足道的任务。

无论是否使用可序列化类,在视图状态中存储适量的数据都不应成为性能问题。

您需要使用加密来保护视图状态中的数据值。 同样,性能不应该是适量数据的关注点。 有关如何启用视图状态加密的详细信息,请参阅此页面 。

敏感数据不应存储在ViewState中,因为它很容易被反序列化。

但是你也说过这个页面是通过https运行的,所以你需要回答的问题是: 谁对数据敏感? 正在访问该页面的用户? 然后你需要加密它。

如果不是那么你应该没问题,因为你使用https。

由于开发人员认为可能发生的事情导致所有安全泄漏,我不认为我会在viewstate中存储敏感信息。
加密与否。

您无法控制用户环境,因此您无法控制真正有权访问此“敏感”信息的内容。