【问题标题】:Pass data from page to page safely安全地在页面之间传递数据
【发布时间】:2009-11-20 09:20:11
【问题描述】:

我期待有一种方法可以安全地在页面之间传递数据并避免可能的篡改。


  • 最好的解决方法是将敏感数据保存在数据库服务器上。
  • 或者在数据库服务器上使用会话持久化。
  • 或任何将数据持久保存在数据库服务器上的方法。

事实是因为性能我不想使用这样的方法。

我不知道下面的方法是否安全,但我想测试一下。(但我不知道是否可能)

我想以加密模式将敏感数据保存在视图状态中。例如在 tespage1.aspx 中并从 testpage2.aspx 中检索。

我该怎么做,安全吗?

提前致谢

【问题讨论】:

标签: asp.net security tampering


【解决方案1】:

创建一个自定义类来保存您的敏感数据。

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 等数据库来充当数据的“缓存”。

【讨论】:

  • 感谢 Mac 的帖子。我认为这是一个很好的方法。所以我会试试看。是的,我很偏执:)所以我也会使用加密方法。
【解决方案2】:

始终建议敏感数据应该在服务器中而不是在客户端中。您在页面中嵌入的任何内容都是一种责任。由于您已经排除了所有服务器端选项,因此我认为 ViewState 应该是最好的选择,因为它具有加密功能。您还可以使用 Page.enableviewstatemac 属性来进行安全的视图状态传输。

【讨论】:

    【解决方案3】:

    这里有两个问题...第一,ViewState 不安全。默认情况下,它只是一个简单的 BASE64 编码。将此数据保存在服务器上,期间。其他任何事情都是自找麻烦。第二,当您转到新页面时,ViewState 会丢失,这是有充分理由的。这不是您将数据从一个 aspx 页面传递到另一个页面的方式。

    此外,出于性能原因选择 ViewState 而不是 Session 在大多数情况下是没有意义的。使用 InProc Session 或 Cache 会比 ViewState 更有效率。

    【讨论】:

      猜你喜欢
      • 2010-10-31
      • 1970-01-01
      • 2012-03-16
      • 2016-08-19
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多