Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
Php 我需要保护登录吗?_Php_Mysql_Captcha - Fatal编程技术网

Php 我需要保护登录吗?

Php 我需要保护登录吗?,php,mysql,captcha,Php,Mysql,Captcha,我有登录页面。我需要用Captcha保护它吗?或者我应该如何处理它 例如,如果一个人知道一个用户名,他可以使用curl或其他任何工具,并尝试多次猜测密码。它将使用许多MySQL查询,并且会占用我的资源 那么,我应该使用验证码登录吗?或者我应该存储用户在$u会话中尝试猜测密码的次数,如果他猜错了10次密码,我会显示验证码?在$\u会话中使用此类信息安全吗?也许我应该允许这个人每10秒登录一次$\u会话?它会100%安全吗?或者你有什么建议 编辑:请阅读我在Eljakim帖子下的评论。不要担心mys

我有登录页面。我需要用Captcha保护它吗?或者我应该如何处理它

例如,如果一个人知道一个用户名,他可以使用curl或其他任何工具,并尝试多次猜测密码。它将使用许多MySQL查询,并且会占用我的资源

那么,我应该使用验证码登录吗?或者我应该存储用户在$u会话中尝试猜测密码的次数,如果他猜错了10次密码,我会显示验证码?在$\u会话中使用此类信息安全吗?也许我应该允许这个人每10秒登录一次$\u会话?它会100%安全吗?或者你有什么建议


编辑:请阅读我在Eljakim帖子下的评论。

不要担心mysql查询,但要担心用户密码。在用户每次尝试登录(失败)时向DB插入行,并在他/她每次尝试再次登录时选择这些行。如果登录尝试>5->restrict to login

不使用会话方法

验证码可能会有所帮助,但它会激怒你的普通用户

您可能希望在数据库中记录(比如)过去10分钟内从特定IP地址或特定用户名尝试了多少次无效登录。如果超过某个特定阈值,只需暂时阻止该用户名或IP地址


在课程中不要这样做!攻击者可能不会发送支持会话的cookie,也可能只是欺骗它们。

就个人而言,我不会选择验证码来处理多次失败的登录尝试。相反,您可以在数据库中保留一个计数器,并在每次登录尝试失败时递增它。当您达到确定的失败次数(5或10或其他)时,您可以在数据库中创建一个锁定期或十分钟,在此期间您将不接受该用户的登录


这将保护您的用户不受密码强制<代码>$\u会话在此处无效,因为用于暴力强制的工具不可能接受或接受会话cookie。

您可以在此处使用多层安全性。一种选择是,比如说,每X分钟只允许5次登录尝试。这将阻止大多数暴力分子。(你也可以通过IP或其他方式禁止已知的暴力工具)添加验证码显然会更有帮助。在多次错误尝试之后,只需使用PHP的一些图像功能显示一个模糊的图像即可。您添加的功能越多,就越安全。但请注意,验证码对许多合法用户来说是一件麻烦事。

我是否可以建议添加对
sleep()
的调用,以增加登录加载程序的额外挫折感

即使只是两秒钟的睡眠,也会增加你所描述的暴力攻击所需的时间。

3件事:

  • 使用Recaptcha(由谷歌运行)了解更多信息
  • 在超时一到两个小时之前,每小时只允许从唯一IP地址进行一定次数(10)的登录尝试
  • 在成功登录时设置cookie,如果用户有此cookie,则不显示验证码,以免打扰普通访问者

  • 这将解决所有的黑客企图。根据您的流量和收到的黑客攻击次数,您可能希望使用这些数字。

    将尝试次数存储在$\u会话中并不安全。如果我不接受我的bruteforce脚本中的cookie,我将为每个请求获得一个新会话

    如果您试图防止任何类型的DOS攻击:将每个IP的请求量限制在每个时间间隔的适当数量


    如果您只是试图防止密码被粗暴使用:请使用验证码或将登录失败的次数存储在数据库中。(可能在尝试3次失败后阻止用户一个小时左右?

    我总是从两个选项中选择一个,pin码如-three failed password,然后通过电子邮件向用户发送新密码。
    或者,有一个2^的冷却期(失败的登录-5)-将非常快给予巨大的延迟。即7失败将导致2^(7-5)=4秒aso延迟。

    这是最好的方法吗?我对$\u会话的想法不安全吗?谢谢。是的,你也可以在会话中存储他的尝试,但他每次尝试登录init时都可以清除cookie。这似乎是一个很好的主意,其他人对此有何看法?我只是补充了一下作为评论。。。我不建议这样做,也许是记录某人的IP。。因此,如果他们的尝试失败,您可以添加sleep(5)。让sleep只针对那些被认为是攻击者的人实现肯定更好。我想我应该给出这个想法的概要:)除非你在密码正确的情况下也要睡觉,否则这是行不通的。任何有头脑的攻击者都会使用多个线程,如果在1或2秒内没有成功登录,只需关闭连接。+1只需使用表存储登录尝试,而不要将其存储在cookie中。如果你懒惰,你可以在你的login script.php中添加sleep(4),这将大大减缓暴力攻击的速度。@Eljakim:如果我这么做,我仍然需要检查数据库中用户的数据,这将消耗大量主机资源,对吗?我刚刚意识到我实际上不能使用sleep,因为我使用ajax登录,所以它可以向该页面发送许多请求?@嘿,好吧,运行一个查询的资源非常少。真正的黑客不会使用你的Ajax代码!真正的黑客会绕过这一点,直接攻击你的PHP脚本。两个小时完全没有必要。每次登录尝试之间只需几秒钟的延迟,就可以使任何暴力尝试完全无价。@hoppa取决于谁在编写攻击程序/脚本。我已经写过每个调用之前都等待了几分钟的胡片,所以这是很重要的,因为运行一个破坏者/蛮力程序的成本很低,一旦你设置它,你就可以忘记它直到它达到你想要达到的目的。