使用 SSL 证书时是否需要加密 ASP.NET 视图状态隐藏字段?

信息安全 应用安全 Web应用程序
2021-08-25 11:50:59

如果你有一个网站的 SSL 证书,是否有必要让 ViewState 更难解码。没有任何额外的开发,似乎 ASP.NET 将其编码为 base 64 字符串。我找到了一些示例代码来轻松解码这个隐藏字段“__VIEWSTATE”。SSL 不会为您加密这个(连同其他东西)吗?

3个回答

您必须区分两种攻击者:

在传输过程中使用 SSL 以防止第三方读取和修改传输的数据。

用户谁从服务器将数据发送到服务器并得到答案,可以明显看到和修改数据,他或她想要的任何方式。因此用户可以修改包含视图状态的隐藏表单字段。Base64 转义在这里不提供任何保护,它只是一种确保二进制数据不会被字符集对话弄乱的方法。

因此,如果您的视图状态包含可信信息,恶意用户不得修改,您需要为其启用加密和签名。

“加密”不同于“编码”。BASE64 不是加密算法。

ViewState 包含“二进制”信息——不仅仅是简单文本的信息。由于您不能(或不应该)拥有 HTML META 标签或 HTTP cookie 的二进制信息,因此二进制数据已以文本格式编码。BASE64 编码是一种流行的选择,简单的十六进制编码也是如此。

请注意,ViewState 变量也是 ASN.1 编码的。它包含许多可变长度字段,这些字段用类型信息和长度编码“标记”。

在所有这些中,ViewState 变量包含加密安全信息,例如会话 ID,这些信息可以防止篡改,因此黑客无法操纵一个人的会话 ID 以侵入其他人的会话。这就是为什么你会看到 ViewState 解码器:有时网站运营商不使用正确的加密灵长类动物,并将 Viewstate 内部暴露给黑客操纵。

正如其他回应所说,SSL 仅对网络线路上的流量进行加密,因此人们无法窃听它。显然,它必须在您端解密,以便您的浏览器呈现页面,并在服务器端创建页面时。

ASP.NET 2.0 或更高版本还发送一个 MAC 密钥,该密钥充当哈希并有助于防止篡改,有关详细信息,请参阅此页面这设置了攻击的障碍,而不仅仅是弄乱 base64 编码的字符串。