Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Security 是否有人认为采取以下措施来预防CSRF有任何负面影响?_Security_Csrf - Fatal编程技术网

Security 是否有人认为采取以下措施来预防CSRF有任何负面影响?

Security 是否有人认为采取以下措施来预防CSRF有任何负面影响?,security,csrf,Security,Csrf,我想知道下面的方法是否能完全防止CSRF,并与所有用户兼容 这是: 表单中只包含一个额外的参数,即:encrypteduser的用户ID+请求时间。服务器端只需解密并确保它是正确的用户ID,并且请求时间是最近的 除了有人嗅探用户流量或破坏加密之外,这是完全安全的吗?有什么缺点吗?这不是完全安全的,因为攻击站点可能会猜测用户ID。 如果使用每会话加密密钥,则该密钥是安全的。但是你需要做的就是发送原始密钥,它已经是安全的了 另外,请记住时区和不准确的时钟。这不是完全安全的,因为攻击站点可能猜测用户I

我想知道下面的方法是否能完全防止CSRF,并与所有用户兼容

这是:

表单中只包含一个额外的参数,即:encrypteduser的用户ID+请求时间。服务器端只需解密并确保它是正确的用户ID,并且请求时间是最近的


除了有人嗅探用户流量或破坏加密之外,这是完全安全的吗?有什么缺点吗?

这不是完全安全的,因为攻击站点可能会猜测用户ID。 如果使用每会话加密密钥,则该密钥是安全的。但是你需要做的就是发送原始密钥,它已经是安全的了


另外,请记住时区和不准确的时钟。

这不是完全安全的,因为攻击站点可能猜测用户ID。 如果使用每会话加密密钥,则该密钥是安全的。但是你需要做的就是发送原始密钥,它已经是安全的了


另外,记住时区和不准确的时钟。

它应该可以工作,是的。虽然我建议您在创建新用户时对UserID使用一个随机数,而不是简单的递增数,但请确保在创建用户时它是唯一的。这样,攻击者很难猜到。

应该可以,是的。虽然我建议您在创建新用户时对UserID使用一个随机数,而不是简单的递增数,但请确保在创建用户时它是唯一的。这样,攻击者很难猜到。

虽然您的方法是安全的,但它不是标准的。防止CSRF攻击的标准方法是生成包含在隐藏字段和cookie中的伪随机数,然后在服务器端验证这两个值是否匹配。看看这个。

虽然你的方法是安全的,但它不是标准的。防止CSRF攻击的标准方法是生成包含在隐藏字段和cookie中的伪随机数,然后在服务器端验证这两个值是否匹配。看看这一点。

一个主要的缺点是,如果用户在发布表单之前让浏览器打开的时间超过了您认为合理的时间范围,您的页面将“超时”。我希望网站不要催促用户提交他们的操作,除非该操作本身就是时间敏感的。

一个主要缺点是,如果用户在发布表单之前让浏览器打开的时间超过您认为合理的时间范围,您的页面将“超时”。我希望网站不要催促用户提交他们的操作,除非该操作本质上是时间敏感的。

拥有用户ID和日期时间是一个开始,但您还希望在金丝雀标记中添加一个伪随机数值,最好是具有高熵的值。基本上,您需要降低给定上下文中页面中令牌的可预测性。理论上,只有UserID和DateTime可能会在一段时间后中断,因为这不够随机。话虽如此,CSRF攻击通常是脚本化的,而不是直接监控的,因此根据应用程序的公开程度,这可能就足够了


此外,请确保使用更安全的加密算法,例如使用足以确保应用程序安全的位密钥和伪随机初始化向量。

拥有用户ID和日期时间是一个开始,但您还需要一个伪随机数值,最好在金丝雀令牌中加上高熵。基本上,您需要降低给定上下文中页面中令牌的可预测性。理论上,只有UserID和DateTime可能会在一段时间后中断,因为这不够随机。话虽如此,CSRF攻击通常是脚本化的,而不是直接监控的,因此根据应用程序的公开程度,这可能就足够了


此外,请确保使用更安全的加密算法,例如使用足以确保应用程序安全的位密钥和伪随机初始化向量。

您建议的安全系统容易受到攻击

像AES这样的分组密码通常用作非常安全的随机数生成器。他们被称为。然而,像任何随机数生成器一样,您必须担心算法的种子是什么。在这种情况下,您使用的是用户的userID+请求时间,攻击者可以知道这两个时间,您的实现没有密钥或IV,因此我假设它们为NULL。攻击者正在生成请求,因此他将始终知道请求时间。用户ID可能是主键,如果您有100个用户,那么攻击者可以伪造100个请求,其中一个可以工作。但是攻击者可能只是想强制管理员更改其密码,因为管理员的主键通常为1

不要再发明风团了,很好
随机数发生器已经建成,还有反csrf库

您提议的安全系统容易受到攻击

像AES这样的分组密码通常用作非常安全的随机数生成器。他们被称为。然而,像任何随机数生成器一样,您必须担心算法的种子是什么。在这种情况下,您使用的是用户的userID+请求时间,攻击者可以知道这两个时间,您的实现没有密钥或IV,因此我假设它们为NULL。攻击者正在生成请求,因此他将始终知道请求时间。用户ID可能是主键,如果您有100个用户,那么攻击者可以伪造100个请求,其中一个可以工作。但是攻击者可能只是想强制管理员更改其密码,因为管理员的主键通常为1



不要再发明风团,非常好的随机数发生器已经建成,还有反csrf库

如果是服务器检查服务器发出的时间,则时区不应成为问题。@amdfan:我假定他指的是客户端上的当前时间;amdfan是对的,我指的是服务器的时区,我认为攻击站点无法猜测用户ID的加密值。他们没有我的加密密钥。如果他们有我的加密密钥,那将是一个完全不同的问题。如果密文的格式允许发现和利用模式,他们可能不一定需要你的加密密钥。@Russ我的假设是加密是安全的。如果不安全,则他们会攻击加密,而不是这种防止CSRFTimezones的方法,如果是服务器检查服务器发出的时间,则不应成为问题。@amdfan:我假设他指的是客户端上的当前时间;amdfan是对的,我指的是服务器的时区,我认为攻击站点无法猜测用户ID的加密值。他们没有我的加密密钥。如果他们有我的加密密钥,那将是一个完全不同的问题。如果密文的格式允许发现和利用模式,他们可能不一定需要你的加密密钥。@Russ我的假设是加密是安全的。如果它不安全,那么他们就攻击加密,而不是这种防止CSRF的方法。此外,你可以将金丝雀放在会话中,而不是放在cookie中,尽管把它放在cookie中可以减轻将其存储在服务器+1上的需要,这是一个很好的链接。在文章的最后,他说,一个更强大,尽管更复杂,预防方法是利用服务器状态…,为什么这会使它更安全?将随机值存储在cookie和表单中是否不完全安全?@Darin经过审查,我得出结论,我强烈反对你的观点。请阅读我的答案。此外,你可以将金丝雀放在会话中,而不是放在cookie中,尽管将其放在cookie中可以减少将其存储在服务器+1上的需要,这是一个很好的链接。在文章的结尾,他说一个更强大但更复杂的预防方法是利用服务器状态…,为什么这会使它更安全?将随机值存储在cookie和表单中是否不完全安全?@Darin经过审查,我得出结论,我强烈反对你的观点。请阅读我的答案。你无法阻止CSRF攻击。您只需防止此类攻击成功。而且,没有像完全安全这样的东西。您只需将概率降至最低。@Gumbo那么您是说没有可靠的方法来阻止CSRF攻击的成功?Gumbo是说攻击者可能非常幸运,并且意外地猜到了秘密,不管它有多长时间。您无法阻止CSRF攻击。您只需防止此类攻击成功。而且,没有像完全安全这样的东西。你只需要将概率降到最低。@Gumbo那么你是说没有可靠的方法来阻止CSRF攻击的成功?Gumbo是说攻击者可能非常幸运,意外地猜到了秘密,不管它有多长时间。是的,这就是为什么合理的最近可能意味着什么,我在考虑“合理最近”意味着5天。对,这就是为什么“合理最近”可能意味着什么,我考虑过最近的时间大概是5天。自从加密后,攻击者猜不到任何东西,他没有正确的加密密钥?自从加密后,攻击者猜不到任何东西,他没有正确的加密密钥?难道这两个值的加密不会使攻击者猜不到吗?那就是取决于加密算法和加密模式。例如,使用ECB模式操作的AES不被认为是安全的,因为使用相同密钥的相同明文将产生相同的密钥
ciphertext.对,我显然会使用安全的加密算法。确保使用已知的安全算法,并遵守使用该算法的最佳实践。这两个值的加密不会使攻击者无法猜测吗?这取决于加密算法和加密模式。例如,使用ECB模式操作的AES不被认为是安全的,因为使用相同密钥的相同明文将产生相同的密文。对,我显然会使用安全的加密算法。请确保使用已知的安全算法,并在使用时遵循最佳做法。@Rook,他没有使用用户的userID+请求时间。在他的问题中,OP表示他使用encrypteduser的用户ID+请求时间。当然,他没有具体说明加密意味着什么,但如果他使用AES,攻击者将极难伪造令牌,即使他知道用户id和请求时间,因为他不知道用于加密和解密的秘密。@Darin所以你同意他提议的系统很容易受到攻击而不受攻击吗熵的其他来源。@Rook,他没有使用用户的userID+请求时间。在他的问题中,OP表示他使用encrypteduser的用户ID+请求时间。当然,他没有具体说明加密意味着什么,但如果他使用AES,攻击者将极难伪造令牌,即使他知道用户id和请求时间,因为他不知道用于加密和解密的秘密。@Darin所以你同意他提议的系统很容易受到攻击而不受攻击吗熵的其他来源。