2010-06-07 88 views
2

我想知道如何在简单的asp.net页面中加密/解密你的查询字符串? 需要在不同页面之间传递一些值,但不能更改或读取查询字符串。如何在asp.net中保护/加密你的查询字符串?

有人说httphandles可能是解决方案。

有什么想法?

更多背景信息:

嗨thx所有评论。 这是问题,有时会话没有任何理由消失(好吧,必须有一个,但我不知道它)。我研究了可能的原因,但没有任何可能导致它发生。 因此我不能再依赖它了。 饼干解决方案是一种可能性,但实现起来比单纯使用查询字符串更有效。 该URL可以在任何时候复制只是没有改变!

干杯, M.

+2

这是真的馊主意。如果您需要将值传递给不同的页面,为什么不使用Postback或数据库中的值。加密查询字符串会导致丑陋的URL,并非万无一失。 – 2010-06-07 13:14:10

+4

如何使用cookie? – ChrisW 2010-06-07 13:21:50

+1

这确实闻到了“糟糕的计划”。我真的认为你可能有错误的架构。你能保持这个信息服务器端?您真的不应该以这种方式传输敏感信息,不会加密。也许你可以扩展你认为“会话不可靠”的方式。也许你可以告诉我们一个用例,你觉得这个构造提供了一个解决方案。 – Cheekysoft 2010-06-07 13:38:08

回答

2

你必须手动将其使用.net加密的一个加密。真的,这不是查询字符串的用途。如果你不希望用户能够访问它,你应该找到一种不同的方式在页面之间传递它。

这是一个项目,将告诉你如何做对称加密。 http://www.codeproject.com/KB/security/SimpleEncryption.aspx

敢我提到这一点,因为这将创造显著的开销,但你可以在视图状态发表您的信息,并使用跨页的帖子是传递信息:

http://www.velocityreviews.com/forums/t119789-view-state-in-previous-page-using-cross-page-postback.html

+0

是的,我知道但会议不可靠。我真的不知道如何传递价值观。 – user29964 2010-06-07 13:07:33

+1

伙计。会议是完全可靠的。然而,ViewState实际上并不使用会话,只是一个隐藏的HTML表单字段。不是说它会帮助你,因为它在不同的页面之间丢失了。 – tomfanning 2011-08-04 17:48:20

1

怎么样将你需要的值添加到Viewstate中? Viewstate可以为您加密和验证。

ViewState["myKey"] = "myValue"; 

再后来

string myValue = ViewState["myKey"] 

要启用加密:

<%@Page ViewStateEncryptionMode="Always" %> 

<configuration> 
    <system.web> 
     <pages ViewStateEncryptionMode="Always" /> 
    </system.web> 
</configuration> 
2

我需要做到这一点,仅做参考,这是我选择的解决方案。

使用HTTPModule进行加密和解密。然后,只需将该模块放入web.config。

在这里找到它: https://madskristensen.net/blog/httpmodule-for-query-string-encryption/

从文章:

我们需要的是,可以把加密的查询字符串成为一个正常可读之一,所以我们仍然可以使用一个HttpModule我们像Request.QueryString [“user”]这样的旧逻辑。换句话说,我们希望用户看到这个

?ENC = VXzal017xHwKKPolDWQJoLACDqQ0fE // wGkgvRTdG/GgXIBDd1

,而你的代码,认为这

?USER = 123 &账号= 456。

本文中的示例代码包含要添加的模块。