我正在编写一个网络应用程序,它将通过 AJAX 发出请求,并希望锁定这些调用。经过一番研究后,我正在考虑使用某种形式的随机令牌(字符串)与请求(GUID?)一起传回。这是我的算法的重要部分:
- 将令牌分配给 JavaScript 变量(在服务器端生成)。
- 另外,将该令牌存储在数据库中并为其指定一个有效时间段(即 10 分钟)。
- 如果令牌尚未使用且在其有效时间窗口内,则允许调用。
- 如果有效,则返回请求的信息,否则,记录该请求并忽略它。
着眼于安全,这有意义吗?对于令牌来说,GUID 可以工作吗?应该是其他东西吗?有没有好的方法来加密请求中的变量?
EDIT:
我知道这些 AJAX 请求并不是真正“安全”的,但我想添加基本的安全性,因为我想阻止其他人使用我打算编写的服务。这个随机令牌将是针对滥用呼叫的基本前线防御。所请求的数据(甚至提交以生成此类数据)极不可能重复。
也许我使用 GUID 是错误的......随机生成的字符串(令牌)怎么样?
如果您这样做是为了信任发送到客户端浏览器的代码,请更改方向。您确实不想信任用户输入,其中包括您发送到浏览器的 js 调用。服务器上的逻辑应该确保通过那里不会发生任何错误。也就是说,asp.net 使用带符号字段,如果绝对必要,您可能会希望采用这种方式。
稍微展开一下:
Asp.net 防篡改视图状态,该视图状态作为 html 隐藏字段发送(取决于配置)。我确信有更好的链接作为参考,但至少在这个链接中提到了:http://msdn.microsoft.com/en-us/library/ms998288.aspx http://msdn.microsoft.com/en-us/library/ms998288.aspx
验证。这指定了散列
用于生成 HMAC 的算法
制作 ViewState 和表单
身份验证票证防篡改。
该属性也用于指定
使用的加密算法
视图状态加密。这个属性
支持以下选项:
- SHA1–SHA1用于防篡改
ViewState 以及(如果已配置)
形成身份验证票证。当SHA1
被选择进行验证
属性,使用的算法是
HMACSHA1。
该算法的 .net 类的链接http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha1.hmacsha1.aspx http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha1.hmacsha1.aspx.
更新2:为了防篡改,您需要对数据进行签名(而不是加密)。请注意,一般使用加密技术时,您应该真正避免使用自定义实现或算法。关于步骤,我会坚持:
- 将令牌分配给 JavaScript 变量(在服务器端生成)。您包含用于识别请求的信息以及发出请求的确切日期时间。签名将验证服务器端应用程序发出的数据。
- 如果合适的话,识别重复提交。
也就是说,asp.net 默认情况下验证视图状态的原因是因为开发人员依赖于传入的信息,因为这些信息仅由应用程序处理,而实际上他们不应该处理这些信息。这可能同样适用于您的场景,不要依赖此机制。如果你想评估某人是否可以做某事,请使用身份验证+授权。如果您想知道 ajax 调用仅发送有效选项,请验证它们。不要以比您可以适当授权操作的粒度级别公开 API。这个机制只是一个额外的措施,以防万一出现意外,而不是真正的保护。
诗。对于上面的 HMACSHA1,您可以使用固定密钥实例化它
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)