前言
最近的項目開始進行安全測試,其中有一個安全問題是這樣的。
應該增加用戶登錄失敗處理功能,限制非法登錄次數。
建議是增加mysql數據庫的登陸失敗的鎖定功能。
相信大家也都會遇到這樣的問題,在這里寫一下,方便大家直接使用。
設置方法
登錄mysql數據庫
mysql -u root -p
輸入如下命令,安裝插件
install plugin CONNECTION_CONTROL soname 'connection_control.so';
install plugin CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS soname 'connection_control.so';
查看安裝的插件
我們發下,最下面增加了兩個插件
修改my.cnf文件
vim /etc/my.cnf
在文件中,我們增加如下兩行
connection-control-failed-connections-threshold=5 #登陸失敗次數限制
connection-control-min-connection-delay=300000 #限制重試時間,此處為毫秒,注意按需求換算,此處為5分鍾
重啟mysql
service mysql restart
重新登錄數據庫,查看是否生效
show variables like '%connection_control%';
驗證
輸入密碼錯誤5次后,將不可以再輸入密碼
至此登錄限制就完成了
擴展
靜態安裝插件
上面提供的方式為動態安裝,靜態安裝方式如下:
vim /etc/my.cnf
增加如下配置
plugin-load-add = connection_control.so
插件卸載
UNINSTALL PLUGIN CONNECTION_CONTROL;
UNINSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
插件參數
connection_control_failed_connections_threshold:失敗登陸次數達到此值后觸發延遲。值域:[0, INT_MAX32(2147483647)],0表示關閉此功能。默認值為3。
connection_control_max_connection_delay:登陸發生延遲時,延遲的最大時間;此值必須大於等於connection_control_min_connection_delay。值域:[1,INT_MAX32(2147483647)]。默認值:INT_MAX32。單位:毫秒。
connection_control_min_connection_delay:登陸發生延遲時,延遲的最小時間,此值必須小於等於connection_control_max_connection_delay。值域:[1000, INT_MAX32(2147483647)]。默認值:1000。單位:毫秒。
延遲的時間如何計算
一旦連續的失敗登陸次數超過設定閾值,那么就會產生延遲,並且延遲隨着失敗次數增加而增加,上限為connection_control_max_connection_delay;
具體的計算方式如下:
MIN ((failed_attempts - threshold) * MIN_DELAY), MAX_DELAY)
總結
至此,文章結束,歡迎大家留言或者關注公眾號一起討論。