Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net中保护/加密查询字符串?_C#_Asp.net_Security_Query String_Encryption - Fatal编程技术网

C# 如何在asp.net中保护/加密查询字符串?

C# 如何在asp.net中保护/加密查询字符串?,c#,asp.net,security,query-string,encryption,C#,Asp.net,Security,Query String,Encryption,我想知道如何在一个简单的asp.net页面中加密/解密查询字符串? 某些值需要在不同页面之间传递,但查询字符串无法更改或读取 有人说httphandles可能是解决这个问题的方法 有什么想法吗 更多背景信息: 您好,谢谢您的评论。 这就是问题所在,有时会话会无缘无故地消失(肯定有,但我还不知道)。我已经调查了可能的原因,但没有任何可能导致它发生的事情。 所以我不能再依赖它了。 cookie解决方案是可能的,但它的实现比简单地使用querystring要复杂得多。 url可以在任何时候复制,只是不

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

有人说httphandles可能是解决这个问题的方法

有什么想法吗

更多背景信息:

您好,谢谢您的评论。 这就是问题所在,有时会话会无缘无故地消失(肯定有,但我还不知道)。我已经调查了可能的原因,但没有任何可能导致它发生的事情。 所以我不能再依赖它了。 cookie解决方案是可能的,但它的实现比简单地使用querystring要复杂得多。 url可以在任何时候复制,只是不能更改

干杯,
M.

您必须使用.Net加密之一手动对其进行加密。实际上,这不是查询字符串的用途。如果您不希望用户能够访问它,您应该找到一种不同的方式在页面之间传递它


下面是一个项目,它将向您展示如何进行对称加密。

我敢说这一点,因为这将产生巨大的开销,但您可以在视图状态下发布信息,并使用跨页面发布来传递信息:


如何向Viewstate添加所需的值?Viewstate可以为您进行加密和验证

ViewState["myKey"] = "myValue";
后来

string myValue = ViewState["myKey"]
要启用加密,请执行以下操作:

<%@Page ViewStateEncryptionMode="Always" %>


我需要这样做,这是我选择的解决方案,仅供参考

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

在这里找到它:

从文章中:

我们需要的是一个HttpModule,它可以将加密的查询字符串转换为普通的可读字符串,这样我们仍然可以使用旧的逻辑,比如Request.QueryString[“user”]。换句话说,我们希望用户看到这一点

?enc=vxzal017xhwkpkpoldwqjolacdqq0fe//wkgvrtdg/GgXIBDd1

当您的代码看到这一点时

?用户=123,账户=456


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

下面是一个项目,它将向您展示如何进行对称加密

我敢说这一点,因为这将产生巨大的开销,但您可以在视图状态下发布信息,并使用跨页面发布来传递信息:


是的,我知道,但会话不可靠。我真的不知道如何传递这些价值观了。会话是完全可靠的。然而,ViewState实际上并不使用会话,只是一个隐藏的HTML表单字段。这对你没有帮助,因为它在不同的页面之间丢失了。这真是个糟糕的主意。如果需要将值传递给不同的页面,为什么不使用回发或数据库中的值呢。加密查询字符串会产生难看的URL,而且不是万无一失的。这确实是一个“坏计划”。我真的认为你可能有错误的架构。你能把这个信息保存在服务器端吗?你真的不应该以这种方式传输敏感信息,不管是否加密。也许您可以进一步阐述您认为“会话不可靠”的方式。也许你可以告诉我们一个用例,你觉得这个构造为使用cookie提供了一个解决方案。避免下面您似乎关心的会话超时问题。你在上面所做的唯一一件事就是你的URL可以复制/粘贴,这是你可能/可能不想要的。饼干被绑定到一台特定的机器上。您想通过电子邮件/IM/等发送URL吗?如果是这样的话,查询字符串将是您唯一的选择。
<configuration>
   <system.web>
      <pages ViewStateEncryptionMode="Always" />
   </system.web>
</configuration>