题
我期待着一种方法来安全地将数据从一个页面传递到另一个页面并避免可能的篡改。
- 解决这个问题的最好方法是将敏感数据保存在数据库服务器上。
- 或者在数据库服务器上使用会话持久化。
- 或者任何将数据保存在数据库服务器上的方法。
事实上,由于性能原因,我不想使用此类方法。
我不知道以下是否是安全的方法,但我想测试一下。(但我不知道是否可能)
我想以加密模式将敏感数据保存在视图状态中。例如在 tespage1.aspx 中,并从 testpage2.aspx 中检索此数据。
我怎样才能做到这一点,安全吗?
提前致谢
解决方案
创建一个自定义类来保存您的敏感数据。
class myCustomeClass
{
int id;
string name;
currency amount;
'... properties to access
'... custom methods
'... etc.
}
如果您真的很偏执,请包括加密/解密方法......现在,设置数据的字段和属性。接下来,加密(可选)。将东西放入缓存中...
Cache.Insert("MySensitiveData", myCustomClass, null, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration);
重定向到您的其他页面
在 Page_Load 事件中
MyCustomClass oSensitiveData;
if (!IsPostBack)
{
oSensitiveData = (myCustomeClass)Cache["MySensitiveData"];
}
就是这样,你有了你的数据,如果你加密了它,你现在需要解密它......
有很多种方法可以做到这一点,但这个方法对我来说适用于相对较小的数据集。如果您正在处理大量数据,那么您可能想要探索使用 Sql Sever、mySql 等数据库...充当数据的“缓存”。
其他提示
始终建议敏感数据应位于服务器而不是客户端。您嵌入页面中的任何内容都是责任。由于您已经排除了所有服务器端选项,我认为 ViewState 应该是最好的选择,因为它具有加密功能。您还可以使用 Page.enableviewstatemac 属性来实现安全的视图状态传输。
这里有两个问题...第一,ViewState 不安全。默认情况下它只是一个简单的 BASE64 编码。将此数据保存在服务器上。任何其他事情都是自找麻烦。第二,当您进入新页面时,ViewState 会丢失,这是有充分理由的。这不是将数据从一个 aspx 页面传递到另一页面的方式。
此外,出于性能原因选择 ViewState 而不是 Session 在大多数情况下是没有意义的。使用 InProc Session 或 Cache 将比 ViewState 更高效。