TP5結合Redis換成對接口的訪問頻率進行限制

用途:為了在程序上對某些驗證接口上防止暴力破解,或者降低數(shù)據(jù)的壓力可以使用這個簡單的請求訪問限制。
注意事項:首先要TP5開啟緩存,服務器要有Redis,或者用tp5默認的文件緩存也可以。

use think\Cache;
/**
 * 接口請求限制
 * $time:一個完全相同的請求多長時間內(nèi)不能重復請求
 * $limit:一段時間內(nèi)不能重復訪問相同接口的次數(shù)
 */
function requestAccess($time=3,$limit=30){
    //獲取訪問用戶的IP
    $ip=md5(request()->ip());
    //獲取訪問的接口路徑
    $path=request()->path();
    //將IP和訪問的接口路徑md5加密成一個字符串,這樣子就代表同一個客戶訪問的接口。
    $UV=md5($ip.$path);
    //每個IP和接口每分鐘不能超過的次數(shù)
    $cacheIp=Cache::get($UV)?:0;
    if($cacheIp){
        if($cacheIp>$limit){
            return false;
        }else{
            Cache::inc($UV,1);
        }
    }else{
        Cache::set($ip,1,60);
    }
   //將每個請求的IP地址、參數(shù)和路徑拼接成同一個用戶的一個完全相同的接口。
    $post=json_encode(request()->post());
    $name=md5($path.$post);
    //每個相同的數(shù)據(jù)多少時間內(nèi)不能請求
    $cache=Cache::get($name);
    if($cache==$ip){
        return false;
    }else{
        Cache::set($name,$ip,$time);
        return true;
    }
}

PS:以上代碼是自己瞎琢磨的,如果有更好的實現(xiàn)方式,歡迎大家分享交流。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容