鍍金池/ 問答/PHP  iOS  Android  HTML/ 如何防止登錄API 被暴力破解?

如何防止登錄API 被暴力破解?

目前我遇到了一個問題,我正在做一套用戶登錄的api,將來這套api是給pc和app上共同使用的,那么問題來了,如何防止api被暴力破解?如果對方只使用一個賬號進行密碼匹配還好,我可以記錄賬號的登錄次數(shù),超過了一定次數(shù)就將該賬號凍結(jié),但是問題來了:假如我拿到600W賬號+密碼,一次遍歷輸入,很有可能就撞到一個匹配的賬戶,限制ip也不可靠,因為偽造ip實在太簡單,那么該怎么解決這個問題呢?
如果每次都設(shè)置驗證碼,用戶體驗太差,驗證碼被機器識別也只是時間問題,不知道大家怎么解決的?

6.4更新:我其實一直想的是,如果可以拿到機器的唯一標識,類似mac地址的東西最好,這樣就可以避免攻擊者在一臺機器上刷api,無論他不停換ip換賬號都沒用,可惜拿不到,于是就想問問大廠們是怎么解決的。

回答
編輯回答
礙你眼

1.可以設(shè)置密碼復雜規(guī)則(包含字母+特殊符號+數(shù)字+大小寫)
2.設(shè)置控制同一時間段內(nèi)密碼錯誤登錄次數(shù)

2017年2月13日 06:42
編輯回答
有你在

可以對賬號與常用ip綁定 新的ip 進行驗證碼驗證 至于破解難度 就看你驗證碼的難度了 也此基礎(chǔ)上加上頻率限制

2018年6月6日 22:28
編輯回答
久礙你

就是校驗驗證碼,但不是每次都校驗,只有登錄錯誤次數(shù)超過一定限制(比如說3次),才會要求校驗驗證碼。
即保證了用戶體驗,也保證了系統(tǒng)安全。

2018年5月15日 15:04
編輯回答
臭榴蓮

拖動驗證碼的體驗,還是不錯的。
淘寶或者阿里云上經(jīng)常,能看到鼠標拖動的驗證碼

2017年10月26日 16:21
編輯回答
巫婆

第一,如果是開發(fā)API建議加入【訪問頻率】設(shè)置。例如,如果設(shè)置頻率限制為每分鐘1000次(可以是某個端口,每個ip等等),如果一分鐘內(nèi)超過這個限制,那么服務器就會返回 429: Too Many Attempts.響應。
第二,關(guān)于偽造IP地址的防范。你可以發(fā)送請求到對方ip地址,偽造的ip地址沒有任何response,其次,如果在PHP里面$_SERVER['REMOTE_ADDR']是沒有辦法被偽造的,除非用代理,但是PHP一樣可以檢測代理,然后結(jié)合IP地址可防范泛洪攻擊。

訪問頻率限制建議插件:https://github.com/GrahamCamp...
IP檢測:

       $_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 "你丫歇菜吧!";
    }
2018年3月6日 19:53