PHP 如何防止登录API被暴力破解?
$_SERVER['HTTP_X_FORWARDED_FOR'] || $_SERVER['HTTP_X_FORWARDED'] || $_SERVER['HTTP_FORWARDED_FOR'] || $_SERVER['HTTP_CLIENT_IP'] || $_SERVER['HTTP_VIA'] || in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554))) || @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 30)) { echo "你丫歇菜吧!"; }
第一,如果是开发API建议加入【访问频率】设置。例如,如果设置频率限制为每分钟1000次(可以是某个端口,每个ip等等),如果一分钟内超过这个限制,那么服务器就会返回 429: Too Many Attempts.响应。 第二,关于伪造IP地址的防范。你可以发送请求到对方ip地址,伪造的ip地址没有任何response,其次,如果在PHP里面$_SERVER['REMOTE_ADDR']是没有办法被伪造的,除非用代理,但是PHP一样可以检测代理,然后结合IP地址可防范泛洪攻击。 访问频率限制建议插件:https://github.com/GrahamCampbell/Laravel-Throttle
目前我遇到了一个问题,我正在做一套用户登录的api,将来这套api是给pc和app上共同使用的,那么问题来了,如何防止api被暴力破解?如果对方只使用一个账号进行密码匹配还好,我可以记录账号的登录次数,超过了一定次数就将该账号冻结,但是问题来了:假如我拿到600W账号+密码,一次遍历输入,很有可能就撞到一个匹配的账户,限制ip也不可靠,因为伪造ip实在太简单,那么该怎么解决这个问题呢?
如果每次都设置验证码,用户体验太差,验证码被机器识别也只是时间问题,不知道大家怎么解决的?
6.4更新:我其实一直想的是,如果可以拿到机器的唯一标识,类似mac地址的东西最好,这样就可以避免攻击者在一台机器上刷api,无论他不停换ip换账号都没用,可惜拿不到,于是就想问问大厂们是怎么解决的。