通过GUID保护AJAX请求

时间:2009-03-17 02:34:43

标签: ajax algorithm security guid server-side

我正在编写一个Web应用程序,它将通过AJAX发出请求,并希望锁定这些调用。经过一番研究,我正在考虑使用某种形式的随机令牌(字符串)与请求一起传回(GUID?)。这是我的算法的重要部分:

  1. 将令牌分配给JavaScript变量(生成的服务器端)。
  2. 此外,将该令牌存储在数据库中并给它一个有效的时间段(即10分钟)。
  3. 如果令牌仍未使用且在其有效时间窗口内,请允许通话。
  4. 如果有效则返回请求的信息,否则,请记录请求并忽略它。
  5. 着眼安全,这有意义吗?对于令牌,GUID是否有效 - 是否应该是其他内容?是否有一种加密请求中变量的好方法?

    修改

    我知道这些AJAX请求不会真正“安全”,但我想添加基本安全性,因为我想阻止其他人使用我打算编写的服务。这个随机令牌将是针对滥用呼叫的基本前线防御。将要求(甚至提交以生成此类数据)的数据极不可能重复。

    也许我在使用GUID时错了...如何随机生成字符串(令牌)?

3 个答案:

答案 0 :(得分:5)

如果您这样做是为了信任您发送到客户端浏览器的代码,那么改变方向。您真的不想信任用户输入,其中包括您发送到浏览器的js的调用。应该在服务器上建立逻辑,这样就不会有任何错误。也就是说,asp.net使用一个带符号的字段,如果绝对必要,你可能想要这样做。

扩大一点: Asp.net对视图状态进行防篡改,该视图状态作为html隐藏字段发送(取决于配置)。我确信有更好的链接作为参考,但至少在这一个上提到:http://msdn.microsoft.com/en-us/library/ms998288.aspx

  

验证。这指定了散列   用于生成HMAC的算法   制作ViewState和表单   身份验证票据防篡改。   此属性也用于指定   用于的加密算法   ViewState加密。这个属性   支持以下选项:

     
      
  • SHA1-SHA1用于防篡改   ViewState和(如果已配置)   表格认证券。当SHA1   被选中进行验证   属性,使用的算法是   HMACSHA1。
  •   

该算法{。}}的.net类的链接。

更新2: 要进行防篡改,您需要对数据进行签名(不对其进行加密)。请注意,通常使用加密技术时,您应该避免使用自定义实现或算法。关于步骤,我会坚持:

  • 将令牌分配给JavaScript变量(生成的服务器端)。 您包含用于标识请求的信息以及发布请求的确切日期和时间。签名将验证服务器端应用程序发布的数据。
  • 如果合适,确定双重提交。

也就是说,asp.net默认验证viewstate的原因是因为devs依赖于那里的信息,因为只有应用程序才会处理这些信息。同样可能适用于您的场景,不要依赖此机制。如果您想评估某人是否可以做某事,请使用身份验证+授权。如果您想知道ajax调用仅发送有效选项,请验证它们。不要以可以适当授权操作的粒度级别公开API。这种机制只是一种额外的措施,万一有些东西滑落,而不是真正的保护。

聚苯乙烯。使用上面的HMACSHA1,您可以使用固定密钥

进行实例化

答案 1 :(得分:1)

“安全”是一个模糊的术语。你到底想要完成什么?使用GUID是防止同一请求重复提交的完美方法,但这就是全部。

如果在客户端和服务器之间传递的信息真的很敏感,那么应该通过HTTPS进行。就确保实际沟通而言,这确实是唯一的答案。

编辑:要回答关于GUID是否是“正确”方式的问题 - 没有正确的方法来执行您的建议。使用任何令牌,无论是GUID还是您自己创建的某个令牌,除了防止重复提交同一请求之外,不会产生任何影响。就是这样。

答案 2 :(得分:1)

这实际上取决于您要通过安全性来实现的目标。如果您的意思是防止未经授权使用HTTP端点,那么您可以做很少的事情,因为用户可以完全访问用于拨打电话的HTML和JavaScript。

如果您的意思是阻止某人嗅探AJAX请求中的数据,那么我只会使用SSL。

您建议的方式使用的GUID实际上只是重新发明会话ID cookie。