我期待有一种方法可以安全地在页面之间传递数据并避免可能被篡改。
- 解决它的最佳方法是将敏感数据保存在数据库服务器上。
- 或者在数据库服务器上使用会话持久化。
- 或者任何在数据库服务器上保留数据的方法。
事实是因为性能我不想使用这样的方法。
我不知道以下是否安全,但我想测试一下。(但我不知道是否可能)
我想以加密模式将敏感数据保存在视图状态中。例如在 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 更有效。