我期待一种方法可以安全地将数据从一个页面传递到另一个页面,并避免因为可能被篡改。
事实上,由于性能,我不想使用这样的方法。
我不知道以下是否安全,但我想测试它。(但我不知道是否有可能)
我想在加密模式的viewstate中保存敏感数据。例如,在tespage1.aspx中检索并从testpage2.aspx中检索。
我怎么能这样做,安全吗?
提前致谢
答案 0 :(得分:2)
创建一个自定义类来保存您的敏感数据。
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等数据库进行探索,以充当数据的“缓存”。
答案 1 :(得分:0)
它始终建议敏感数据,应该在服务器中不与客户端一起使用。您嵌入页面的任何内容都是一种责任。由于您排除了所有服务器端选项,因此ViewState应该是我认为最好的选择,因为它的加密。您还可以使用Page.enableviewstatemac属性进行安全的视图状态传输。
答案 2 :(得分:0)
这里有两个问题......一,ViewState不安全。默认情况下,它只是一个简单的BASE64编码。将此数据保存在服务器上,期间。别的什么都在惹麻烦。二,当你去一个新的页面时,ViewState会丢失,这是有充分理由的。这不是您将数据从一个aspx页面传递到另一个页面的方式。
此外,出于性能原因选择ViewState over Session在大多数情况下都没有意义。使用InProc会话或缓存比ViewState更有效。