如果您这样做是为了信任您发送到客户端浏览器的代码,请更改方向。您真的不想信任用户输入,其中包括您发送到浏览器的来自 js 的调用。应该在服务器上建立逻辑,这样就不会发生任何错误。也就是说,asp.net 使用签名字段,如果绝对必要,您可能希望采用这种方式。
扩展一点:Asp.net 防篡改视图状态,它作为 html 隐藏字段发送(取决于配置)。我确信有更好的链接作为参考,但至少在这个链接中提到了:http: //msdn.microsoft.com/en-us/library/ms998288.aspx
验证。这指定了用于生成 HMAC 以使 ViewState 和表单身份验证票证防篡改的散列算法。此属性还用于指定用于 ViewState 加密的加密算法。此属性支持以下选项:
- SHA1–SHA1 用于防篡改 ViewState,如果已配置,还用于表单身份验证票证。当为验证属性选择 SHA1 时,使用的算法是 HMACSHA1。
该算法的 .net 类链接http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha1.hmacsha1.aspx。
更新 2:
为了防篡改,您希望对数据进行签名(而不是对其进行加密)。请注意,通常在使用密码学时,您应该真正避免使用自定义实现或算法。关于步骤,我会坚持:
- 将令牌分配给 JavaScript 变量(在服务器端生成)。您包括信息以识别请求以及发出请求的确切日期和时间。签名将验证服务器端应用程序发布的数据。
- 如果合适,确定重复提交。
也就是说,asp.net 默认验证视图状态的原因是,开发人员依赖传入的信息,因为只有应用程序不应该处理这些信息。这可能适用于您的场景,不要依赖这种机制。如果您想评估某人是否可以做某事,请使用身份验证+授权。如果您想知道 ajax 调用仅发送有效选项,请验证它们。不要在粒度级别公开 API,而不是您可以适当授权操作的 API。这种机制只是一种额外的措施,以防万一发生滑倒,而不是真正的保护。
附言。使用上面的 HMACSHA1,您将使用固定密钥对其进行实例化