久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

PHP登錄安全實戰(zhàn):TOTP多因素認證、風(fēng)控攔截與Redis會話一致性

PHP登錄安全實戰(zhàn):TOTP多因素認證、風(fēng)控攔截與Redis會話一致性 前陣子接手一個老 PHP 電商項目老板讓我把登錄安全做扎實。當時我對多因素認證、風(fēng)控攔截、會話一致性這三塊也只是有個大概認知網(wǎng)上現(xiàn)成的庫又不敢直接塞進生產(chǎn)環(huán)境干脆從零開始寫一套。正好手上有個 PHP 8.3 的空閑服務(wù)配合 Redis 直接把整條認證鏈路捋了一遍。這篇文章就用“庖丁解牛”的方式把登錄體系拆成三塊骨頭——多因素認證怎么做、風(fēng)控攔截怎么評分、會話一致性怎么保證——每一塊我都會給代碼、給思路、給踩坑記錄。內(nèi)容偏實操適合那些有 PHP 基礎(chǔ)、但還沒完整構(gòu)建過認證體系的開發(fā)者看完可以直接照著落地也能理解每個設(shè)計決策背后的原因。1. 項目解牛三個模塊為什么必須放一起做很多人會把“多因素認證”“風(fēng)控攔截”“會話一致性”當成三個獨立需求分開做這是非常容易踩坑的地方。用戶的登錄行為是一條完整鏈路三者的關(guān)系是前后串聯(lián)的請求先進入風(fēng)控引擎風(fēng)控決定你要不要做二次認證二次認證通過之后再建立會話。拆開做最終聯(lián)調(diào)時一定會出現(xiàn)接口對不齊、狀態(tài)不同步的問題。所以從設(shè)計第一天起就要把它們當成一個閉環(huán)看。1.1 先捋清楚需求的三條主線多因素認證解決的是“密碼泄露”問題。就算用戶的賬號密碼被釣魚、撞庫撞出來了沒有第二個因素攻擊者依然進不來。我這邊選了 TOTP基于時間的一次性密碼作為主認證方式因為在沒有服務(wù)商依賴的前提下它完全離線可用客戶不用等短信也不會被通道延遲坑。風(fēng)控攔截解決的是“碰撞與自動化攻擊”問題。密碼錯誤 100 次和密碼錯誤 1 次兩者風(fēng)險完全不一樣。風(fēng)控引擎就是在正式認證前給這次請求打分分數(shù)決定走什么處置策略。它的價值不僅在于防黑客還能防止正常用戶被暴力破解影響。會話一致性解決的是“登錄態(tài)在多機、多端下的漂移”問題。生產(chǎn)環(huán)境至少兩臺 Web 服務(wù)器如果 Session 存在本地文件里負載均衡一轉(zhuǎn)發(fā)用戶就被“強制下線”了。把 Session 搬到 Redis 之后不管請求打到哪臺機器都能讀到同一份登錄數(shù)據(jù)。1.2 技術(shù)選型與目錄結(jié)構(gòu)我全程用的是 PHP 8.3 Redis 7 nginx路由自己寫不依賴重型框架。核心邏輯全部用原生 PHP 實現(xiàn)二維碼生成用endroid/qr-code其他的能省則省。為什么要刻意去掉框架因為框架的封裝會把很多關(guān)鍵機制藏起來比如 Session 生命周期、Cookie 屬性、序列化方式這些恰恰是登錄體系最容易出問題的地方。用原生實現(xiàn)一遍你能清楚看到每一步發(fā)生了什么。項目目錄結(jié)構(gòu)大致長這樣auth-system/ ├─ public/ │ └─ index.php ├─ app/ │ ├─ Auth/ │ │ ├─ Totp.php │ │ ├─ OneTimeCode.php │ │ ├─ RiskEngine.php │ │ └─ SessionManager.php │ ├─ Support/ │ │ ├─ Base32.php │ │ └─ RedisClient.php │ └─ Config.php ├─ composer.json └─ .env每個類的職責很純粹Totp處理時間同步驗證碼OneTimeCode負責短信/郵件驗證碼和備份碼RiskEngine做信號采集和風(fēng)險評分SessionManager統(tǒng)一接管 Redis 里的會話讀寫。這種職責劃分也方便以后替換實現(xiàn)比如風(fēng)控規(guī)則想升級成機器學(xué)習(xí)打分只需要改RiskEngine內(nèi)部邏輯。1.3 一次登錄請求的完整生命周期把流程在腦子里過一遍后面所有代碼都是給這個流程服務(wù)的用戶提交賬號密碼服務(wù)端先校驗賬號是否存在、密碼哈希是否匹配。密碼校驗通過后立刻進入風(fēng)控引擎。風(fēng)控會采集當前設(shè)備的指紋、IP 地理位置、User-Agent、歷史失敗次數(shù)等信號。風(fēng)控引擎輸出風(fēng)險評分。0 到 35 分直接放行35 到 70 分要求二次認證70 分以上直接拒絕。如果需要二次認證就觸發(fā) TOTP 或短信驗證碼流程用戶提交一次性驗證碼。認證通過后調(diào)用session_regenerate_id(true)重建會話把用戶身份和登錄時間寫入 Redis并下發(fā) Cookie。用戶后續(xù)請求會帶著 Session IDRedis 里讀出來校驗是否過期、是否被強制下線然后做滑動續(xù)期。這個鏈路里風(fēng)控在認證之前認證在會話建立之前。順序不能反——如果先建會話再做風(fēng)控風(fēng)控一旦把用戶攔截會話狀態(tài)就會出現(xiàn)半登錄半匿名的尷尬局面。2. 多因素認證從 TOTP 到驗證碼的完整鏈路多因素認證這塊我推薦優(yōu)先做 TOTP。它不依賴短信通道用戶裝一個 Google Authenticator、Microsoft Authenticator 或者 1Password 就能用。TOTP 的完整落地包含四個部分核心算法、密鑰綁定、校驗邏輯、兜底方案。下面逐個拆。2.1 TOTP 的核心算法HMAC 與時間窗口TOTP 的本質(zhì)不是加密而是“用時間和密鑰計算一個動態(tài)短碼”。它的底層是 HOTPHMAC-Based One-Time Password區(qū)別只在于 HOTP 把計數(shù)器傳進去TOTP 把當前時間戳整除 30 得到的結(jié)果當作計數(shù)器。為什么是 30 秒這是 RFC 6238 推薦的默認時間步長太長用戶等得煩躁太短用戶輸入時間不夠。核心計算代碼我用 PHP 實現(xiàn)關(guān)鍵點都注釋了final class Totp { public const STEP 30; public function __construct( private readonly string $secret, // base32 解碼后的原始密鑰字節(jié) private readonly int $digits 6, private readonly int $window 1, ) {} public function codeAt(float $timestamp): string { // 當前時間步長 $counter intdiv((int) floor($timestamp), self::STEP); // 計數(shù)器必須是 8 字節(jié)大端序RFC 4226 里高位補零 $bin pack(N2, 0, $counter); // HMAC-SHA1輸出 20 字節(jié) $hash hash_hmac(sha1, $bin, $this-secret, true); // 動態(tài)截斷取 hash 最后一個字節(jié)的低 4 位作為偏移量 $offset ord($hash[19]) 0x0f; // 從偏移量開始取 4 字節(jié)最高位強制為 0避免符號位干擾 $value ((ord($hash[$offset]) 0x7f) 24) | ((ord($hash[$offset 1]) 0xff) 16) | ((ord($hash[$offset 2]) 0xff) 8) | (ord($hash[$offset 3]) 0xff); // 取模得到 6 位數(shù)字不夠前面補零 return str_pad((string) ($value % 10 ** $this-digits), $this-digits, 0, STR_PAD_LEFT); } }有兩點我想特別說明。第一pack(N2, 0, $counter)這種寫法專門兼容 32 位 PHP把高 32 位置零低 32 位存計數(shù)器不會因為$counter超出整型范圍而飄移。第二動態(tài)截斷是 HOTP 規(guī)范里的固定套路不是隨便取的 4 字節(jié)它保證了就算 HMAC 的某些位被翻轉(zhuǎn)取到的偏移也不會跑出哈希邊界。2.2 密鑰生成、Base32 與掃碼綁定TOTP 的種子密鑰必須是服務(wù)端為每個用戶獨立生成的不能用固定的字符串。我用random_bytes(20)生成 160 位隨機數(shù)這個強度已經(jīng)超過大多數(shù)需要。生成的字節(jié)沒法直接給用戶看Google Authenticator 的掃碼解析要求密鑰必須 Base32 編碼。Base32 編碼算法不復(fù)雜只是把任意字節(jié)流按 5 位一組重新映射到 A-Z 2-7 這 32 個字符上。我提供一個可直接復(fù)用的編碼函數(shù)function base32_encode(string $data): string { $alphabet ABCDEFGHIJKLMNOPQRSTUVWXYZ234567; $binary ; foreach (str_split($data) as $char) { $binary . sprintf(%08b, ord($char)); } $result ; foreach (str_split($binary, 5) as $chunk) { $result . $alphabet[bindec(str_pad($chunk, 5, 0))]; } return $result; }同樣的校驗的時候需要 Base32 解碼把用戶掃碼得到的字符串轉(zhuǎn)回原始密鑰字節(jié)我這里給出的解碼函數(shù)要跟編碼函數(shù)配對使用function base32_decode(string $data): string { $alphabet ABCDEFGHIJKLMNOPQRSTUVWXYZ234567; $map []; for ($i 0; $i 32; $i) { $map[$alphabet[$i]] $i; } $data strtoupper(rtrim($data, )); $binary ; foreach (str_split($data) as $char) { $binary . str_pad(decbin($map[$char] ?? 0), 5, 0, STR_PAD_LEFT); } $result ; foreach (str_split($binary, 8) as $byte) { if (strlen($byte) 8) { $result . chr(bindec($byte)); } } return $result; }綁定階段的核心是生成 otpauth URI。這個 URI 是一串標準的配置文本認證器 App 看到它就知道往哪個 App 生成二維碼$secretBytes random_bytes(20); $secret base32_encode($secretBytes); $issuer MyApp; $account userexample.com; $uri sprintf( otpauth://totp/%s:%s?secret%sissuer%sdigits%dperiod%d, rawurlencode($issuer), rawurlencode($account), $secret, rawurlencode($issuer), 6, 30, ); // 然后用 endroid/qr-code 把這個 $uri 生成二維碼渲染到前端配套composer require endroid/qr-code把$uri傳給二維碼庫輸出 base64 圖片。這里有一個非常容易忽略的步驟綁定只是把密鑰存進數(shù)據(jù)庫還不夠一定要讓用戶立刻提交一次當前驗證碼服務(wù)端驗證通過才算綁定完成。這個“綁定即驗證”的設(shè)計可以防止二維碼在傳遞過程中被劫持或者用戶掃錯碼綁定成別人的種子。2.3 校驗邏輯容錯、防重放與防時序攻擊校驗的核心代碼是verify它做的事情很簡單算出當前時間窗口的驗證碼和用戶提交的比對如果不一致就往前、往后各滑動一個窗口再比對。為什么要有滑動窗口因為用戶掃碼、打開認證器、手動輸入這幾個動作會消耗時間等提交到服務(wù)端時30 秒的時間窗口可能已經(jīng)翻篇了。public function verify(string $code, float $timestamp): bool { if (!preg_match(/^\d{ . $this-digits . }$/, $code)) { return false; } $current intdiv((int) floor($timestamp), self::STEP); for ($i -$this-window; $i $this-window; $i) { $candidate $this-codeAt(($current $i) * self::STEP); if (hash_equals($candidate, $code)) { return true; } } return false; }hash_equals不是可選項不能用替代。原因很簡單比較字符串時只要發(fā)現(xiàn)第一個不同字符就立刻返回 false攻擊者可以通過測量響應(yīng)時間反推驗證碼的字符hash_equals會固定比較完所有字節(jié)時序上不給攻擊者留縫隙。校驗通過之后還有一道防線防重放。同一個驗證碼在同一個時間窗口內(nèi)只能使用一次否則只是一個被動截獲的驗證碼也能反復(fù)登錄。實現(xiàn)方式是驗證成功后把當前時間窗口記為“已使用”寫入 Redis$replayKey mfa:totp:replay:{$userId}:{$current}; $ok $redis-set($replayKey, 1, [NX, EX self::STEP * ($this-window 1)]); if (!$ok) { throw new RuntimeException(該驗證碼已使用請刷新后重試); }set命令帶上NX參數(shù)表示只有 key 不存在時才寫入。第二次使用相同窗口的驗證碼set會返回 false說明被重放了。EX的過期時間設(shè)為窗口前后可接受的范圍避免 Redis key 堆積。2.4 短信郵件驗證碼與備份碼的兜底方案TOTP 雖然穩(wěn)但用戶一旦換手機就會遇到“新手機還沒綁定、舊手機不在身邊”的尷尬。所以必須提供兜底方案。第一種兜底是短信或郵件驗證碼。它的實現(xiàn)比 TOTP 簡單很多生成一個 6 位隨機數(shù)字存進 Redis 并設(shè)置 5 分鐘過期然后調(diào)用短信或郵件服務(wù)商接口發(fā)送。這里有兩個關(guān)鍵細節(jié)發(fā)送限流和一次性使用。$code (string) random_int(100000, 999999); // 60 秒內(nèi)同一賬號只能發(fā)一次 $limitKey mfa:sms:limit:{$userId}; if (!$redis-set($limitKey, 1, [NX, EX 60])) { throw new RuntimeException(發(fā)送太頻繁請稍后再試); } $redis-setex(mfa:sms:code:{$userId}, 300, password_hash($code, PASSWORD_BCRYPT)); // $smsProvider-send($user-phone, $code);為什么要對同一個賬號限制發(fā)送頻率因為短信通道要花錢攻擊者可以利用接口無限轟炸既浪費成本又可能把運營商的通道封掉。為什么要用password_hash存驗證碼而不是明文因為 Redis 里可能有過期數(shù)據(jù)被 dump 的風(fēng)險任何時候都不要把明文驗證碼留在存儲層。第二種兜底是備份碼。備份碼的生成邏輯是生成 10 到 20 個隨機碼展示給用戶一次數(shù)據(jù)庫里只存每個備份碼的哈希。為什么不能存明文備份碼的殺傷力和密碼等同數(shù)據(jù)庫一旦泄露明文備份碼就直接白給。驗證的時候把用戶輸入的備份碼哈希之后比對匹配成功就從庫里刪除這條記錄保證只能用一次。3. 風(fēng)控攔截采集信號、計算風(fēng)險、分級處置風(fēng)控引擎的定位是“認證之前的一道閘門”。它不關(guān)心用戶密碼對不對它只判斷這次請求本身是否可疑。我從三個層面來拆信號怎么采集、分數(shù)怎么算、觸發(fā)之后怎么處置。3.1 信號采集設(shè)備指紋、IP 情報與行為數(shù)據(jù)設(shè)備指紋是風(fēng)控最基礎(chǔ)的數(shù)據(jù)源。前端頁面加載時采集瀏覽器信息包括 User-Agent、語言、時區(qū)、屏幕分辨率、canvas 渲染結(jié)果、已安裝字體等然后用 SHA-256 把這些信息拼起來做一次哈希得到一個設(shè)備指紋。代碼示意如下// 前端采集后通過接口上報 $deviceSignals [ ua $_SERVER[HTTP_USER_AGENT] ?? , lang $_SERVER[HTTP_ACCEPT_LANGUAGE] ?? , screen 1920x1080, timezone -480, canvas hash-string-from-canvas, ]; $fingerprint hash(sha256, json_encode($deviceSignals));但要注意這個 fingerprint 是客戶端算出來傳給服務(wù)端的理論上可以被偽造。所以不能直接把這個哈希當成身份憑證。更嚴謹?shù)淖龇ㄊ欠?wù)端用 HMAC 密鑰對它簽發(fā)一個設(shè)備 ID后續(xù)請求都帶著這個簽名后的設(shè)備 ID 關(guān)聯(lián)用戶。IP 側(cè)的情報可以通過 GeoIP 庫拿到國家、城市、經(jīng)緯度。比如 GeoLite2 離線庫就可以。為什么不在這里拋具體服務(wù)商因為生產(chǎn)環(huán)境可能用云廠商的安全產(chǎn)品也可能內(nèi)網(wǎng)部署離線庫只要最終能給一個 0 到 100 的 IP 風(fēng)險分就行。行為數(shù)據(jù)是最容易獲得也最誠實的。密碼錯誤次數(shù)、驗證碼錯誤次數(shù)、同一 IP 的登錄頻率、請求路徑異常程度這些數(shù)據(jù)通過 Redis 計數(shù)指標就能拿到。它們的價值在于反映“趨勢”單個錯誤可能是手滑短時間內(nèi) 20 次錯誤就是自動化腳本在跑。3.2 風(fēng)險評分模型規(guī)則加權(quán)而不是玄學(xué)第一版風(fēng)控不需要上機器學(xué)習(xí)規(guī)則加權(quán)就夠了。原因有兩條一是新業(yè)務(wù)根本沒有歷史標注數(shù)據(jù)供模型訓(xùn)練二是規(guī)則引擎可解釋、可調(diào)試客戶投訴“為什么被攔截”時你能立刻給出原因。我這里擬定了一套評分規(guī)則信號評分區(qū)間說明IP 基礎(chǔ)風(fēng)險0-30GeoIP 識別為 IDC、代理則高分設(shè)備新度0-25該賬號歷史從未出現(xiàn)過此設(shè)備指紋失敗次數(shù)0-25最近 10 分鐘密碼失敗次數(shù)每次 5上限 25地理位置跳躍0-20上次登錄城市與本次距離超過 500 公里訪問軌跡異常0-15UA 異常、請求路徑不符合登錄流程黑名單100命中已知黑名單直接攔截需要聲明的是這個權(quán)重表是“基于常見實踐的配置范例”你可以按照業(yè)務(wù)特征調(diào)整但調(diào)的時候要關(guān)注每種規(guī)則誤傷多少正常用戶。核心代碼就非常直白final class RiskEngine { public function evaluate(array $signals): RiskResult { $score 0; $score $signals[ip]-score(); $score $signals[device_new] ? 25 : 0; $score min(25, $signals[fail_count] * 5); $score $this-geoJumpScore($signals[geo_before], $signals[geo_now]); if ($signals[ip]-isBlacklisted()) { return RiskResult::blocked(blacklist ip); } return RiskResult::scored($score); } }地理位置跳躍的計算用 Haversine 公式就可以。不要看經(jīng)緯度差大就拍大腿決定用戶很可能坐飛機出差這個信號要配合“IP 是否 IDC、本次登錄是否新設(shè)備”一起看。單獨一個維度超過 500 公里就加分是很粗的規(guī)則比較靠譜的寫法是距離大于閾值并且設(shè)備是新設(shè)備才給較高的權(quán)重。3.3 三種處置方式觀察、驗證、阻斷評分出來后處置策略分成三檔0 到 35 分直接放行但把這次請求打上低風(fēng)險標簽寫日志。35 到 70 分進入二次認證流程要求 TOTP 或短信驗證碼通過了再放行。70 分以上拒絕登錄提示環(huán)境異?;蚵?lián)系客服人工處理。第二檔里有一個值得注意的細節(jié)如果用戶本來就要做多因素認證那風(fēng)控評分高時不應(yīng)該“再讓他做一次認證”而是應(yīng)該在同一個認證流程里提升挑戰(zhàn)難度。比如低風(fēng)險時只要 TOTP中高風(fēng)險時強制 TOTP 加備份碼確認。這樣才能真正形成兩重防線而不是做兩遍無用功。同樣重要的是“后臺日志先行”。我給風(fēng)控引擎加了一個影子模式所有評分結(jié)果都記錄到日志表但初期不實際攔截。上線跑兩周之后把誤報和漏報的案例抽出來調(diào)權(quán)重再逐步開啟攔截。風(fēng)控系統(tǒng)翻車的重災(zāi)區(qū)不是技術(shù)不夠而是規(guī)則直接拍死了正常用戶還渾然不覺。3.4 用 Redis 做滑動窗口計數(shù)滑動窗口計數(shù)的核心是“統(tǒng)計最近 N 秒內(nèi)的事件數(shù)量”。我舉個密碼失敗次數(shù)的例子。初始密碼校驗失敗時執(zhí)行$failKey risk:fail:{$userId}:{$ip}; $count $redis-incr($failKey); // 注意只有第一次累加時才設(shè)置過期時間 if ($count 1) { $redis-expire($failKey, 600); }關(guān)鍵坑就在if ($count 1)這一句。如果我在每次累加之后都無腦執(zhí)行expire($failKey, 600)那么持續(xù) 10 分鐘內(nèi)每產(chǎn)生一次失敗key 的過期時間都會往后順延 10 分鐘這個“滑動窗口”就永遠滑不到頭了。只有當 key 是新建的時候設(shè)置過期才能保證 10 分鐘不動之后窗口自動清零。另一個常用場景是 IP 登錄頻率限流每分鐘最多 20 次登錄嘗試$loginKey risk:login:{$ip}; $count $redis-incr($loginKey); if ($count 1) { $redis-expire($loginKey, 60); } if ($count 20) { throw new RuntimeException(嘗試過于頻繁請稍后再試); }這種計數(shù)方式很簡單但也有并發(fā)問題兩個請求同時incr可能出現(xiàn)一個進程看到$count 1而另一個看到$count 2的競態(tài)。好在 Redis 的INCR是原子操作設(shè)置過期時以“第一個拿到 1 的進程”為準基本夠用。如果想更嚴謹可以用 Lua 腳本把“累加、設(shè)置過期、判斷閾值”打包成一個原子操作執(zhí)行。4. 會話一致性登錄態(tài)在多機環(huán)境不漂移會話一致性是這一套系統(tǒng)能不能在生產(chǎn)環(huán)境扛住的關(guān)鍵。你把認證和風(fēng)控都做好了結(jié)果用戶一刷新就掉線體驗同樣廢掉。這一章解決的核心問題是怎么讓所有請求都讀到同一個登錄態(tài)以及登錄態(tài)什么時候失效。4.1 為什么不能用默認 SessionPHP 默認的 Session 是把數(shù)據(jù)序列化后寫到本地文件里的。單機開發(fā)沒問題一旦上了負載均衡請求被轉(zhuǎn)發(fā)到另一臺機器那邊讀不到你的 Session 文件用戶就被判定為未登錄。表現(xiàn)就是用戶明明才登錄成功下一頁又跳回登錄頁。解決辦法是把 Session 數(shù)據(jù)統(tǒng)一存到 Redis。最簡單的做法是在php.ini里改配置session.save_handler redis session.save_path tcp://127.0.0.1:6379?database2這個辦法快但不夠靈活。我更喜歡在代碼里實現(xiàn)一個SessionHandlerInterface這樣能統(tǒng)一控制 key 前綴、過期時間并且方便在強制下線時精準刪除指定會話。實現(xiàn)見下一節(jié)。4.2 自定義 Redis 會話處理器先看代碼這一段是整個會話一致性的地基final class RedisSessionHandler implements SessionHandlerInterface { public function __construct( private readonly Redis $redis, private readonly int $ttl 7200, private readonly string $prefix PHPSESSID:, ) {} public function open(string $path, string $name): bool { return true; } public function close(): bool { return true; } public function read(string $id): string|false { return $this-redis-get($this-prefix . $id) ?: ; } public function write(string $id, string $data): bool { return (bool) $this-redis-setex($this-prefix . $id, $this-ttl, $data); } public function destroy(string $id): bool { return $this-redis-del($this-prefix . $id) 0; } public function gc(int $max_lifetime): int { return 0; } }注冊方式也很簡單$redis new Redis(); $redis-connect(127.0.0.1, 6379); $redis-select(2); session_set_save_handler(new RedisSessionHandler($redis, 7200), true); session_start();這里我把 TTL 設(shè)為 7200 秒也就是 2 小時。但每個會話應(yīng)該有一個“最后活躍時間”的概念不能簡單地 2 小時一刀切。下一節(jié)會講滑動續(xù)期。寫入時用setex設(shè)置過期時間Redis 會在到達 TTL 后自動刪除 key這就是絕對超時的基礎(chǔ)框架。4.3 登錄成功后的 session 重建與會話數(shù)據(jù)模型登錄成功那一刻一定要調(diào)用session_regenerate_id(true)。這個方法會生成一個新的 Session ID并把舊的 Session 內(nèi)容遷移過來同時刪掉舊 ID。這么做的目的是防 Session 固定攻擊——攻擊者把固定 Session ID 種給用戶用戶登錄成功后攻擊者就可能復(fù)用同一個 ID。重建 ID 之后攻擊者手里的舊 ID 直接失效。然后是會話數(shù)據(jù)模型。很多新手會把用戶對象整個塞進$_SESSION這是錯的。序列化整個用戶對象不僅體積大還有可能出現(xiàn)類屬性被篡改的風(fēng)險。我的做法是把最小必要數(shù)據(jù)放進去$_SESSION[user_id] 101; $_SESSION[auth_level] mfa_verified; $_SESSION[risk] [ score 20, device_id f3a9b8..., ]; $_SESSION[login_at] time(); $_SESSION[last_seen] time();為什么last_seen要單拎出來因為滑動續(xù)期邏輯要用到它。注意auth_level在這里非常有用它區(qū)分“已經(jīng)通過 MFA”和“還沒通過 MFA”的會話。如果風(fēng)控評分中途升高你可以只把auth_level改成pending讓用戶在下次操作時重新認證而不是直接銷毀整個會話。4.4 會話續(xù)期、超時與主動踢人續(xù)期要解決兩個矛盾用戶希望長時間不重登安全團隊希望空閑會話盡快過期。我的方案是“絕對超時 2 小時 空閑超時 15 分鐘”。每次請求進來判斷l(xiāng)ast_seen距離當前時間是否超過 900 秒if (time() - $_SESSION[last_seen] 900) { // 有活動續(xù)期重置 session 的 TTL $_SESSION[last_seen] time(); $handler new RedisSessionHandler($redis, 7200); $handler-write(session_id(), session_encode()); }這里千萬注意不能每次請求都重置 TTL否則一個掛著不動的瀏覽器也會因為 15 分鐘內(nèi)恰好有自動請求而無限續(xù)期。續(xù)期的觸發(fā)條件必須是“用戶確實在做有效操作”比如點了菜單、打開了新頁面而不是后臺定時器發(fā)的心跳。主動踢人的實現(xiàn)要靠會話索引。登錄成功后把當前 Session ID 加入該用戶的會話集合$activeSessionsKey session:user:{$userId}; $redis-sAdd($activeSessionsKey, session_id());強制下線時遍歷集合逐個刪除 Redis 里的 Session keyforeach ($redis-sMembers($activeSessionsKey) as $sid) { $redis-del(PHPSESSID:{$sid}); } $redis-del($activeSessionsKey);這種設(shè)計同時支持“踢所有設(shè)備”和“只踢某臺設(shè)備”。如果業(yè)務(wù)要求同一賬號只能一個會話在線登錄成功時刪掉集合里除當前 Session ID 之外的所有 ID 就行。要注意的是刪除 Redis 里的 Session 只是單向的攻擊者手里的 Cookie 并不會立刻消失但因為 Session 讀取不到任何數(shù)據(jù)下一次請求就會被判定為未登錄安全性不會受影響。5. 常見問題與避坑清單這章內(nèi)容是我實際跑這套系統(tǒng)時遇到的真問題一個一個列出來省得你再踩一遍。5.1 TOTP 時間漂移與容錯窗口TOTP 完全不依賴網(wǎng)絡(luò)但它依賴時間。如果服務(wù)器時鐘不準驗證永遠過不了。生產(chǎn)環(huán)境一定要配 NTP 同步排查時可以用timedatectl status看當前時間偏差。用戶設(shè)備時間偏差大時我通過把window參數(shù)調(diào)到 2 解決也就是前后各允許 2 個窗口共 2.5 分鐘容錯。但這個窗口越大重放風(fēng)險越高我實際生產(chǎn)只開 1超過 1 的讓用戶重新同步設(shè)備時間。5.2 session.save_path 與多機同步Redis 存 Session 之后多機同步最大的坑不是 Redis 本身而是 PHP 序列化格式。如果一臺服務(wù)器session.serialize_handler是php另一臺是php_binary它們寫入 Session 數(shù)據(jù)的格式就不一樣Redis 里的同一份數(shù)據(jù)可能被另一臺機器解析失敗。統(tǒng)一在每臺機器的 php.ini 里配置session.serialize_handler php session.save_handler redis然后再啟動服務(wù)。注意 Redis key 前綴我用PHPSESSID:就是為了和默認文件 Session 的 key 命名區(qū)分開也方便排查時直接redis-cli查看。5.3 風(fēng)控誤殺與規(guī)則調(diào)優(yōu)風(fēng)控引擎上線頭一個月業(yè)務(wù)方天天來找我“為什么這個客服賬號登錄被擋了”。查下來基本都是誤殺。誤殺最常見的原因有三個代理 IP 走辦公網(wǎng)絡(luò)、用戶出差更換城市、新設(shè)備首次登錄。我的調(diào)優(yōu)方法是給規(guī)則加“影響系數(shù)”比如“設(shè)備新度”這一條只對密碼風(fēng)險等級較高的賬號加成對普通用戶即使新設(shè)備也最多加 10 分而不是 25 分。早期寧可漏一點也不要一開始就大殺四方。5.4 PHP 環(huán)境相關(guān)的幾個真實報錯裝 PHP 8.3 時如果編譯 zip 擴展容易碰到no package libzip found這通常不是 PHP 的問題而是系統(tǒng)缺少 libzip 開發(fā)包。CentOS 上執(zhí)行yum install libzip-develDebian 上執(zhí)行apt install libzip-dev再重新編譯就能過。Windows 下則是另一個畫風(fēng)啟動時報vcruntime140.dll 14.0 is not compatible with PHP 8.3原因是 VC 運行庫版本太老去微軟官網(wǎng)裝 VC 2015-2022 Redistributable 就能解決。這類環(huán)境問題看似和認證邏輯無關(guān)但排查起來能浪費一整天提前寫在清單里免得大家走彎路。5.5 Cookie 和 HttpOnly 等安全屬性Session 就算放進了 Redis如果 Cookie 能被 JS 偷偷讀走登錄態(tài)照樣不安全。我在項目里固定設(shè)置這幾項ini_set(session.use_strict_mode, 1); ini_set(session.use_only_cookies, 1); ini_set(session.cookie_httponly, 1); ini_set(session.cookie_samesite, Lax); // 線上確認 HTTPS 之后才會開啟 ini_set(session.cookie_secure, $isHttps ? 1 : 0);use_strict_mode的作用是拒絕用戶提交的未知名 Session ID從源頭減少固定會話偽造的可能。cookie_httponly則禁止 JavaScript 讀取 CookieXSS 就算打進來也偷不走登錄態(tài)。cookie_samesiteLax能在跨站請求時把 Cookie 擋在門外對 CSRF 有不錯的抑制效果。最后一條要特別小心開發(fā)環(huán)境沒有 HTTPS 時千萬不要把cookie_secure開成 1否則 Cookie 根本種不進去你會看到“登錄成功然后立刻掉線”的詭異現(xiàn)象。把這三塊從零到一完整實現(xiàn)一遍之后最值錢的東西不是哪段代碼而是你終于知道一次登錄背后到底發(fā)生了什么風(fēng)控打分、TOTP 校驗、會話重建、Redis 里 key 的增刪改查每一步都有明確的存在理由。以后再看任何現(xiàn)成的登錄 SDK 或者框架內(nèi)置的 auth 模塊你不會再有一層黑盒恐懼反而能一眼判斷出它設(shè)計的優(yōu)劣。最后再分享一個小技巧這套系統(tǒng)的調(diào)試階段一定要在 Redis 里給 session、風(fēng)控計數(shù)、MFA 狀態(tài)分別指定不同的 database 或 key 前綴比如PHPSESSID:、risk:、mfa:。這樣線上出了故障你能直接redis-cli看一個 key 的 TTL 和內(nèi)容不需要在 PHP 代碼里打斷點翻哪臺機器的日志。我自己這回就是這么救回一次線上大事故的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
yy少妇精品久久| 玖色AV| 美女的肌被草喷水视频| 色九九九九九九| 综合夜夜| 91丝袜美腿片| 天天插夜夜操| 久久国产对白激情浪潮| 国产精品爽爽v| 久久9 9 9精品| 中文字幕一区二区在线日韩精品| 成人黄页| 国产熟女二区| 欧美性爱1080p| 精品人妻一区二区三区-国产| 波多野结衣之双飞调教在线播放| 国产激情在线观看| 欧美天天在线| 91人妻PORNY九色大屁股| …亚洲黄色厕厕女女在线播…| 99999精品成人| 去干网最新版| 中国特猛少妇色xxx| 一级特黄aaa大片在线观看成人一级片在线观看| 自拍视频大全亚洲专媒视频/一区二区三区 | 欧美中出| 操人妻视频| 成人国产精品三级A片| 人人操人人干xxx| 超碰 欧美| 97看操| 一本色道久久天天射天天干| 久久美女国产| 一区操逼| 久久高潮妇女视频| 日日干夜夜欢| 国产超碰国产97| 美女网站91| 97伦乱| 操人妻少妇中文| 国产一区二区成人av在线播放| 人人妻天天做天天爽| 日本一片一区| 国产女人9999| 另类一区| 激情网五月天| 99在线精品视频| 日本123区操B视频| 久久国产视频性吧 | 无码乱人伦中文视频| 国产亚洲色婷婷久久99精品91 - 百度| 久久精9| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 婷婷香蕉欧美在线一区二区三区| 91视频国品一二三区| 最新国内自拍av免费| CCYY草草影院地址入口| 国产精品呦一区二区三区| 99久久久久久亚洲精品不卡| 一区二区三区亚洲| 免费伦费视频在线观看| 亚洲第一页色| 小草三级久久观看| 色综合中文字幕不卡| 日韩AV中文字幕电影| 日本在线不卡123| 精品久久99| 欧美天天插| 欧美超碰9798| 人妻少妇精品久久久| 亚洲性猛| 久久久久久久久国产| 精品传媒在线一区| 久久久久骚| 爱干爱射网啊啊啊| 国产中文字幕在线观看| 酒色综合网| 欧美区亚洲区偷拍区| 欧美日韩啪啪电影| 久久精品性| 丁香五月激情综合| 青青草日本中文字幕| 国产二区三区粉嫩在线| 欧洲亚洲人妻无码高清久久三区四区| 青操影院| 丁香五六月啪啪| 91成人久久| 白嫩少妇| 免费一级毛片在线视频观看| 欧美伦乱爱| 羞答答AV中文字| 91色综合| 日本羞羞的视频在线播放 | 欧美色图成人网一区二区 | 亚洲 在线| 大香蕉伊人网| 中文字幕日韩人妻视频一区二区三区| 欧美九9 9 9| 天美一二三在线观看Av| 亚州综合在线| 中国乱伦一区二区| 97一区二区三区视频| 色与欲影视天天看综合网| 操逼逼一区视频| 国产成人网址| 亚洲大色堂| 亚洲情色 自拍| 蜜桃狠狠色伊人亚洲综合网站| 久久亚洲AV成人精品无码| 综合熟女| 午夜欧美精品久久久| 乱伦一二三| 日本 欧美 亚中文字幕| 国产AV线| 岛国毛片手机在线观看| 神马久久久久久久久久久久| 91综合在线| 天天干天天做| 亚洲人妻爽爽爽| 国产亚洲精品第一最新| 欧美人人AAA| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 精品无码久久久久久久杏吧| 久久久久久性爱视频| 国模久久在线| 影音先锋每日最新资源在线观看| 欧美1727免费观看视频| 人妻人久久精品中文字幕| 国产精品久久久久久高清无码免费看 | 一区操逼日比视频| 欧美综合第一| 诱惑网综合| 99999亚洲另类| 性色生活片久久毛片婬片免费放女人一级毛片| 超碰97资源大奶| 亚洲欧美首页| 一级人妻性爱视频| 丝袜天堂| 成人草草视频| 被体育老师抱着c到高潮| 美女露胸露屁股| 亚洲久久久久| 亚洲淫乱骚妇AV| 欧美在线永久天堂| 夜夜国产一区| 啊v视频在线观看| 色原狠狠天天天| 日韩不卡av一二三| 精品二区久久| 久操不卡视频| 99久久久无码国产精品性啊聊| 日韩三级一区| 97超碰碰| 日本999精品| 久久久久亚洲三级电影| 色综合久久夜色精品国产天堂| 中文乱码字字幕在线第5页| 99青草| 九九九精品成人免费视频小说| 少妇毛片久久| 伊人午夜福利视频| 亚洲最新a在线观看| 啊啊啊轻点在线观看| 人人操人人摸人| 我想要啊 啊 啊| 乱伦系列一区二区| 综合色欧美| 日韩另类色图| 天天激情综合站| 一牛一区二区三区久久| 九九99精品| 春色91| 91中文精品日韩欧美在线| 91人人| 男人天堂站| 十八岁啪啪视频免费看| 麻豆成人AV| 久热69九色熟妇97| www..com操老师| 91精品操美女| 99综合自拍| av国产无码| 精品人妻一区二区三区四区不卡在| 日韩一级特黄av毛片| 久久久久78| 日韩丝袜高跟制服在线观看| 日韩av乱伦| 人人性爱视频免费| 加勒比伊人| 无码男人天堂| 亚洲欧洲色情高清| 99精品成人免费看| 色吧5亚洲| 91精品人妻一区二区三区蜜桃臀| 国产精品视频白浆免费| 人人人摸人人| 一级做受视频免费是看美女| 超碰久草| 国产女人9999| 1204av韩国| 日本色婷婷| 18禁精品网站在线看| 男女国产精品| 97人人夜| 日韩专区久久久| 99国产精品免费| 人人操av| 九月色婷婷| 激情五月综合开心五月| 欧美96在线|欧| 欧美熟妇亚洲版| 丝袜夫妻自拍| 国产少妇与亚洲av| 狠狠狠狠狠| 欧美日韩性爱无码| 国产精品久久久久久无码红治院| 欧美日韩性爱电影在线| 中文字幕人妻资源在线| 欧美黄色片在线播放| 91青青草| 97超碰超碰| 欧美在线电影| 成人性交午夜免费片| 我想要啊 啊 啊| 狠狠亚洲| 国产成人精品一区| 欧美肥臀在线| 欧美亚洲韩国视频十五区| 制服中出中文人人精品| 91女网站| 成人网欧美风情| 综精品久久久aaaa| 九九九九九九九九九九九免费国产| 欧州色图区| 91精品国产综合久久久蜜臀| 久草婷婷| 中文久久96| 亚洲无限观看| 天天内射| 青青草中日韩在线| 毛片麻豆91糖心精品毛情片| 亚洲成A∨人影院在线欢看| 国产av波波国产精品| 最新三级网址| 精品国产精品一区二区| 蜜桃在线观看一区二区三区| 欧美白嫩在线放| 激情九月婷婷| 无码乱人伦中文视频| 人人看人人插| 八人操人人摸人人看| 99老司机精品视频在线观看| 国产精品久久伊人| 玖玖97综合 | 超碰这里有精品| 人人操人人操人妻人| 97香蕉网| www.99在线| 亚洲色图91欧美日韩| 综精品久久久aaaa| julia国产在线 | 久久一区二区高清免费| 超碰久热| 91欧美美女日韩国产婷婷| 久久国语| 日韩无码一区二区三区| 黄骗免费| 九色婷婷| 18禁久极品美女久久哦哟呀!| 青青草一区二区三区四| 亚洲成人精品在线一区| 欧美专区日本专区| 日日夜夜青青草母狗| 无码人妻丰满熟妇区毛片| 精品国产乱子伦一区二区三区,精品一| 亚洲成人黄色在线观看| 激情五月丁香五月| 天天爱综合网| 免费A片三p视频| 婷婷激情五月天小说网| 中文字幕88av在线| 欧美综合自拍| 日韩另类| 亚洲天堂资源| 1级午夜影院费免区| 婷婷丁香久久| 2019午夜福利视频| 国产日韩欧美中文在线播放| 青青11操操操操操操操操| 好舒服视频| juliaann丝袜| 国产高清吃奶免费视频网站| 欧美色九九| 久久精品国产亚洲AV高清演员表| 欧美制服网站美腿丝袜| 九九九九九九精品| 色99视频| 91色射| 郑州宾馆老熟女露脸啪啪| 久久乐| 日日做夜狠狠爱欧美黑人| 91美女精品| 欧美性爱中文字幕无线码| 蜜臀精品1区2区| 久久久久久综合久久伊人蜜月| 操逼天美3区| 久久久99久9| 国产sv美女内射| 最新日产中文在线麻豆| 加勒比综合a∨| 亚洲在线91| 丁香久久| 国产精品久久蜜乳av| 欧美性爱十八禁| 羞答答AV中文字| 欧美经典一区二区三区| 日韩精品电影| 美女自卫慰黄网站免费| 国产2.3.4区| 天堂中文日本在线观看| 国产精品69久久久久久久| 91被操| 操逼999| 日韩无码a片| 偷窥自拍亚洲色图| 无码最新| 九九九综合精品| 亚洲熟女精品| 2019午夜福利视频| 日本特黄f c2| A级片日韩欧美国产欧美视频精选观看| 久草精品热视| 91精品亚洲内射孕妇| 99色日| 日本免费中文字幕在线| 2019亚洲男人天堂| 亚洲国产第一页综合视频| 欧美不在线| 91暧暧| 中文字幕日韩人妻视频一区二区三区 | 久9爱精品| www.久久| 久久超碰国产一区二区三区| 色999偷自拍拍| 日韩成人精品视频自拍| 色婷视频| 亚洲色婷婷久久91| 东方亚洲在线操逼天堂| 97色冈| 久久久久久久伊人精品| 欧美—性—交—色| 99热97| 丝袜熟女一区二区三区| 黑人猛交| 嗯嗯啊啊日韩精品| 精品免费1| 日韩国产欧美伦理在线| 91天天综合日韩欧美| 麻豆天美传媒在线视频天堂| 国产亚洲综合欧美一区| 久久这里是精品| 老鸭窝成人免费毛片视频| 久久久久久久久久久久久久久性生活视频| 亚洲欧洲综合av在线| 日韩天天综合| 日韩视频小说在线观看| 亚洲最大黄网| 99在线精品观看99| 狠狠超| 熟女熟妇伦久久影院毛片一区二区| 首页亚洲国产高跟丝袜诱惑视频| 日本精品无码三级网站| 亚洲人妻久久久| 狠狠色丁香| 久久大黄片| 嗯嗯啊啊啊啊轻点视频| 少妇 综合| 亚洲第一免费视频| 人妖欧美一区二区| 天美麻豆黄色录像| 欧美暴力猛交| 亚洲激情色片| 大香蕉在线86| 天天香香欲综合| 屌逼麻豆| 六月丁香五月婷婷| 色色色色网站| 人人插人人摸人人| 玖玖资源综合在线视频| 欧美日韩 强奸乱伦| 秋霞一级鲁丝片A片| 麻豆成人AV| 夜夜黄| 日韩色图 一区二区| 婷婷激情啪啪| 久久久久久久久久久久久9999| 欧美性爱另类综合| 91天堂色男人的天堂| 伦理第一页| 婷婷午夜成人色中色| 2017大香蕉国产精品久久| 99免费视频| 日韩 女同 综合| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 美女t无毒不卡不卡| 97国产天堂岛| 日韩中文字幕视频在线观看| 国产中文字幕曰本毛片| 九九探花视频在线观看| 大香网站| 凹凸视频特色日本特黄| 久久乐| 久热99| 激情五月婷婷| 小草精彩毛片| 男人的天堂色偷偷青青草视频婷婷网| 99在线免费视频| 人妻少妇久久久| 香蕉在线一区二区三区| 一牛影视久久久一区二区三区| 91精品电影18| 欧美精品久久96人妻无码| 热久久99999| 国产成人精品午夜福利| 日本一卡二区在线| 欧美亚洲丝袜人妻制服中文99| 欧美熟女逼久久久久久| 日韩欧美麻豆 | 国内三级自拍小视频在线观看| 中文字幕天堂在线| 粉嫩粉嫩一区性色AV片| 99热自拍| 国产无遮挡| oumeizonghese,www| 精彩久久中文| 国产精品福利视频| 黄色电影在线播放综合网站| 人妻精品一区二区在线| 午夜精品久久久久久久男人的天堂 | 在免费jIzzjIzz在线视频| 日韩激情啪啪| 人人色97| 女人18精品一区二区三区| 97国产超碰| 日韩激情啪啪啪| 久久综合五月天| 青青操在线亚洲视频观看欧美在线 | 男女啊啊啊| 高清无码久操视频| 国产特级毛片AAAAAA高潮流水| 一区在线国产播放| 色女99一级片在线观看| 天美麻豆一区二区三区| 美国一区二区三区视频| 午夜男人天堂| 欧美桃色网| 成·人免费午夜在线观看| 青娱乐国产精品| 久久9精品视频| 五月天精品| 欧美国产精品| 人人妻人人爽一区二区三区| 97在线观看播放视频| 色色激情五月天| 天天干天天日天天射黄色| 国产AV人人夜夜澡人人爽麻豆| 国产精品国产拍高清AV| 蜜桃视频精品一区二区| 走光一区92下载| 天天综合97| 久热大香蕉| 在线情色电影 91大 | 色婷婷六月| 国产诱惑| 亚洲精品无码久久AV| 午夜男人一级A片7777| 男人 天堂 日 亚洲| 大香蕉92| 欧美黄片欧美黄片xxx| 日韩三级在线观看mp4| 一级二级在线观看| 黑丝少妇| 先锋女优在线观看视频| 亚洲激情av| 黄页网站成人免费| 熟妇操花| 黑丝制服中文字幕| 九九99久久| 欧美中日韩XXXX| 亚洲天堂人妻熟妇视频| 亚洲国产精品久久久久婷婷青年| 火箭成精品视频884必出精品| 婷婷久久久| 91国产丝袜白虎| 大屁股xxxxx| 99热线麻豆| 91精品国产长腿丝袜美女| 草莓精品视频在线免费观看| 亚洲不卡av在线| 操碰97| 日本高清电影欧美色图| 国产高清亚洲日韩一区| 尻女朋友一夜| 亚洲,日韩,欧美,成人播放| 青青操青娱乐| 亚川综合视频| 超碰在线1234区| 自偷自拍的亚洲视频| 久久精品国产97欧美精品亚洲| 亚洲欧美经典一区二区| 久久久一区二区三区四区五区| 日韩另类色图| 国产视频一区二区三区在线免费观看 | 欧美大的香蕉有线电视视频| 亚洲.欧美.丝袜.中文.综合| 黄色无码高清黄色无码网站| 天天摸夜夜操视频| 中字乱伦AV| 老司机福利青青草| 在线五区| 久久久工口| 伦伦成年午夜免费视频| 男人的天堂视频精品乱在线| 99国产精品在线观看| 不卡av在线中文字幕| 啊啊啊啊,啊啊好多水| 中文字幕在线观看丝袜| 97超碰超| 亚洲日韩欧美一区二区| 91无码中出人妻视频| 青青青国产手线观看视频2| 午夜性| 首页中文字幕中文字幕免费| 性一级黄色录像片网站导航| 国精综合一二三区影视| 日本色色网| 老熟女搡BBBB搡BBBB视频| 污污污8888| 亚洲一区中文字幕一区| 欧美18 在线观看| 熟女熟妇一区二区三区视频| 日日干天天干夜夜爽| 97久久久精品| 高潮内射在线| 亚洲国产无码精品首页久久久| 100啪啪视频大全| 殴美性天天| 96久久久精品| 天天弄欧美| 日韩三级视频一区二区三区| 亚洲一卡2卡3卡4卡乱码网站 | 91色久| 岛国网址国产| 97超碰磁| 国产综合色精品在线观看| 五月天欧美色图| 国产黄色动态精品| 欧美在线观看综合国产| 一级特黄aaa大片在线观看成人一级片在线观看 | 久久一区,青青青青草视频在线播放| 极品白嫩美女白浆成人福利在线看| 男人亚洲91首页在线| 欧美天天综合站| 玖玖久久久| 国产乱弄免费在线视频。| 国产精品午夜福利视频| 中文乱码99| 日韩三级久久久| 久操热线| 美女黄频a美女大全免费皮| 亚洲免费成人在线高清无码视频| 国产成人在线观看网址| 91丝袜在线观看| 亚洲中亚日激情视频| 麻豆国产第一| 丰满熟女一区二区三区在线播放| 天天综合网日韩7799| 99re这里只有精品中心播放| av九九| 亚洲精品久久久久久久蜜桃臀| 女人喷水视频在线观看| 顶级丝袜熟女一区二区三区| 日本三级网页| 精品免费视频国产一区| 欧美不卡在线一区二区| 中文字幕一二区二三区人妻专区| 超碰免费人妻人人| 久久无码一区二区二三区性色| 一级一性爱免费视频| 久久性爱视频免费看| 日日操免费视频| AV在线性爱| 国产深夜福利| 欧美区亚洲区偷拍区| 日本成人A片网站| 亚洲一级黄色毛片| 亚洲精品国产日韩无码AV永久免| 色网在线视频观看免费| 老子午夜伦不卡影院| 在线岛| 中文字幕精品资源在线| 亚洲婷婷五月天| 亚洲综合在线高清| 天天拍天| 久久精品99| 老熟女天天操| 亚洲色资源| 免费一级a毛片久久久久久鸭绿欲| 国产黄色动态精品| 亚洲精品一区二区三区在线播放| 色色色综合| 97人人夜夜精品视频| 黄色成人网久久久久久| 91成人精品在线播放| 99热日本| 天天干天天日天天射黄色片| 综合大香蕉美。| 啊啊啊爽爽| 久久透逼视频| 久久精品99| AV天堂男人的天堂| 国产夫妻性生活视频| 中文字幕二区| 久久黄片国产一区二区| 日本人妻A片成人免费看片| 亚洲欧美一区二区不卡视频播放| 高清无码网址| 97一本大道亚洲一区| 南澳成人一级片在线播放| 欧美啪啪色吧在线| 黑人嘿嘿嘿超爽免费视频| 狠狠 91| 欧美大片一区二区三区| 亚洲美女AV无码| 啪一啪免费视频| 国产精品色哟哟| 91黑丝操| 7777奇米影视久久| 色呦呦、国产精品| 色欲天天婬色婬香WWW夜色| 国产情侣自拍在线播放| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 91干熟女| 丝袜狂射91| 久久精品国产亚洲5555| 欧美色棕合| 久操免费电影| 大屁股xxxxx| 91影视亚洲| 久久久久久国产无码精品| AV天堂电影网| 加勒比海色香蕉婷婷| a在线视频免费观看| 久久超碰av在线| 国产v片在线免费观看| 久久婷婷综合国际产色怕| 久久大线蕉一区| 亚洲不卡三级手机播放| 美女诱惑1区2区| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 久久久久久性爱免费视频| 欧美很很操视频| 丝袜天堂网| 亚洲综合中文字幕有码| 亚洲人人夜夜澡人人爽| 欧美人妻久久精品二区三区| 大香蕉欧美国产日韩高潮| 欧洲黄色网| 久久精品72| 99久久精品无码一区二区毛片免费 | 99久久无色码| 精品亚洲一区在线观看| 成人日韩中文字幕| 国产视频一区二区三区在线免费观看| 欧美日韩黄色片一区二区三区四区人与兽做爱| 欧美色图自拍| 熟女高潮合集-永久久久-成人AV| 免费自拍三级综合| 天天射夜夜| 久久久精品无码亚免费| KK色在线影院| 夜夜操二区| 青春草莓视频在线观看网址| 97资源超碰| 韩日色费| 青青草玖玖爱| 国产97色在线| 加勒比综合网| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 欧美 亚洲 另类 综合| 翔田千里一区二区三区奶水| 天海翼久久| 亚洲AV成人无码一区二区三区在线观看| 国产精品另类一区大香蕉| 婷婷99狠狠| 欧美黄色手机在线观看| 久久深夜无码| 熟女人妇一区二区三区| 男人天堂2019| 久久水蜜臀亚洲AV无码精品| 国产综合网站在线播放 | 久久99亚洲精品久久99果| 96一区二区| 亚洲AV无码久久精品蜜桃小说| 久久性爱网站| 超碰九7| 日本精品性生活久久久| 久久老子无码午夜伦不卡| 日本一二区不卡| 亚洲电影91| 曰韩精品九九无码| 狠狠操夜夜| 欧美淫乱视频| 午夜精品久久久久久久99热影院| 91少妇通奸网站| 欧美视频边做饭边橾| 97网色| 日韩淫色网| 95精品在线| 国产浮力影院第1页| 大鸡巴久久| 97一区二区三区视频| 国产精品一区二区校花| 亚洲91在线| 热久久无毒不卡| 国产一区二区三区不卡手机在线| 欧美强奸一区二区诱惑| 人人性爱视频免费| 久久精品国产亚洲粉嫩| 艾草av| 免费精品99| 日韩Va亚洲va欧美Ⅴa久久| 国产视频人人网| 伊人宅男大香蕉| 日本新免费二区三区| 亚洲欲色9532548967一区| 欧美日本国产日韩激情视频| 可以免费看黄片的视频| 亚洲毛片基地专区| 欧美热图99| 九九九草| 成人精品视频| 久久99手机免费视频| 成人资源中文字幕在线观看天天| 麻豆天美电影一区二区| 性爱视频久久| 中国国产精品一区视频| 大乔未久88一区| 欧美一区二区亚洲天堂| 五月丁香亭亭| 色狠人在线99| 草莓精品视频| 91久久青青草原精品| 久久网亚洲| 久久久111| 五月天久久婷婷亚洲| 伊人亚洲国产一成人久久精品,久久| 亚洲自拍天堂| 国产精品盗摄 偷窥盗摄| 精品无码欧美三级| 日韩熟女无码| 欧美东京热青青草| 日韩三级av片| 少妇精品久久久八区九区| 97超碰超欧美。| 国产亚洲日本| 天美传媒av一区二区| 99国产天美| 91熟女综合| 亚州色阁| 九月AV| 91成人国产综合久久精品蜜月| 亚洲自拍另类丝袜综合| 亚洲男人天堂2012| 亚洲欧美校园另类春色| 丰满少妇一区二区三区专区| 青青草在线视频人人想人人上| 色综合98| 97久久精品国产| 亚洲色香| 国产风韵犹存熟妇三区| 亚州熟妇精品| 亚洲少妇自拍中文字幕懂色| 亚州欧美在线| 亚洲本色精品一区二区久久| 嫩草在线视频| 色青青久久影视| 欧美人妻一区| 极品五月天噜噜| 97国伦国色| 色娱乐色呦呦夜夜夜夜av| 东京男人天堂| 免费在线看黄片av| 国产精品亚洲天堂网址| 麻豆这里只有精品| 日本九九久久99播| 国产精品午夜精品| 亚洲国产成人精品女人久久久| 思思热在线视频免费| 404操逼福利视频| 综合熟女| 97国产天堂岛| 综合一区二区影视| 久久男人的天堂| 国产精品干干干| 欧美性爱五月天| 日韩情色AV| 亚洲做性| 国产精品熟女一区二区三区| 亚洲国产91精品一区二区久久| 奇米狠999| 爽爽歪在线视频| 久久视频,这里只有精品 | 最新日产中文在线麻豆| 亚洲综合激情五月久久| 和协影院中文字幕三区| 天天操天天舔| 亚洲啪啪视频一区二区| 人妻少妇蜜桃视频欧美一区| 91国精产品| 日韩无码一级黄色av片| 欧亚免费视频| 亚洲激情色片 | 综合亚洲欧美精品日韩?v| 欧美成人一区二区三区在线播放 | 亚洲诱惑| 亚洲色图 欧美| 国产成人在线观看综合| 亚洲天堂第一页| 96麻豆精品一区二区三区| 99在线无码精品秘 入口黑人| 99久久这里只有精品| AV中文字幕三四五| 性色av蜜臀av色欲aV| 97se综合网| 91 丝袜在线播放| 久久久九九网站| 亚洲成人妻日韩在线| 试看日韩黄片| 999久久久精品国产| 2020中文字幕在线| 人妻一区视频| 欧美伦乱爱| 四虎午夜影院| 高树玛利亚无码流出| 在线小说视频一区| 丝袜人妻av一区二区| 高凊专区人人操| 91亚洲人| 日韩性爱网址| 91爱看| 成人精品一区二区91毛片不卡| 国产AV人人 夜夜人人澡| 91欧美www| 久久久 国产精品| 中文字幕一区二区三区蜜桃视频| 黄在线| 2019午夜福利视频| 手机在线人成免费视频| 91黑丝美女| 日韩国产在线观看av| 久久超碰98| 在线无码操| 亚洲色图欧美色图综合| 波多野结衣一级视频| 操亚州| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 国产精品久久久久久夜夜夜| 日韩成人无码| 好看的91视频| 天天色天天干天天射| 久久久久元码视频| 亚洲二区精品在线观看| 亚洲成人AB| 亚洲综合在线视频| 97亚洲精品| 欧美精品 - 91爱爱| 蜜乳AV.COM| 人妻黑丝袜电影| 亚洲五月婷婷| 青青草毛片| 久久久久亚洲精品| 美日韩男女操屄视频| 亚洲吊色| 午夜精品视频777| 国产白丝av| 少妇69中文| 中文字幕av乱伦| 人人妻人人色一区二区三区| 9九九九九视频在线观看| 岛国黄片网站| 夜夜国自区| 日韩人妻少妇中文字幕| 中文字幕视频在线观看| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 欧美猛交黑寡妇中文字幕| 亚洲图片欧洲图片aⅴ| 人妻熟女一区二区在线视频| 人人喜人人妻| caoni国产亚洲av| 亚洲区小说| 精品久久久久黄少妇| 涩涩这里只有精品视频| 91情色在线| 91色爽欧美| 免费无码国产精品v片在线观看| 六月丁香久久| 精品久久无码午夜福利| 亚洲影院成人| 91偷拍欧美亚洲| 国产精品三级视频网站| a亚洲欧美色欲| 精品制服美女中文一区二区三区| 激情图片亚洲色图| 婷婷九月色| 国产99精品一区二区三区免费| 941超碰| 91骚妇| 日本有码久久| 大香蕉一线视频| 久久亚洲AV无码专区首页| 火箭成精品视频884必出精品| 国产精品久久久久久久免牛肉蒲团| 天天干夜夜操网| 狠狠色噜噜狠狠狠狠2018| 日韩久久艹| 国产精品久久久亚洲一区| 麻豆啪啪啪视频| 超碰午夜| 俞拍久久国应视频| 青女在线| 一二三啪啪专区| 九月婷婷综合| 国产情侣自拍在线播放| 日韩在线一区高清在线| 中国人高清www色视频免费| 极品少妇久久久久| 懂色av中文字幕一区二区三区天美| 福利风月五月天影院| 99精品网| 国产欧美一级在线观看| 精品久久久久久AV无码| 无码二级三级| 操死我了啊啊啊| 久久久久元码视频| 中文字幕AV片| 超碰综合色| 91AV天堂| 久草毛片电影怡| 青久操| 色哟哟的毛片| 亚洲精品一区中文字幕乱码| 色五月激情网| 操一区| 日韩在线观看中文字幕视频| 黄色片,com| 中文字幕三四区| 东京热天堂网| 天天草天天日| 久久性爱视频免费看| 乱伦熟女论坛| av爱爱爱| 日韩性爱视频在线免费观看| 97人人夜夜精品视频| 牛牛操视频逼| 亚洲欧美中文一区二区三| 思思热久久成人| 太久视频| 妺妺跟我一起洗澡没忍住| 欧美v亚洲v日韩v最新在线二区| 操比国产| 尤物黄色在线观看网站| 久久草在线综合视频| 亚洲成人综合在线| 自拍偷拍 日韩欧美| 亚洲乱色熟女一区| www.久久最新地址| 秋霞视频一区二区| 九九九九久久久| 精品视频123区小说区| 宅男午夜在线视频| 亚洲图片欧美91N| 97人人中文网| 日韩中文字幕宗合在线| 少妇久久久免费| 亚洲成成熟女人综合一区二区| 伊人九九九| 97免费在线观看| 999精品国产高清一区二区| 成人精品一区二区91毛片不卡 | 尤物黄色在线观看网站| 国产又黄又爽又刺激久久久久久| 天天色天天干天天射| 爱射综合| 欧美久久婷婷| 9久9久| 思思久热在线精品66| 熟女五十路一区二区三| 天天肏夜夜肏| 97久久免费| 四虎在线免费视频| 日日爱99| 超碰人人操97碰| 乱论91| 亚洲综合色男人网| 久草男人天堂| 久草精品国产蜜臀| 高清无码91| 亚洲色阁| 成人性爱免费播放| 亚洲精品天堂久久A∨51成人漫| 亚洲操操| 91亚州日韩高清| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 国厂麻豆77q4| 97久久国产| 色97干| 日本高清_区二区三区| 香蕉在线一区二区三区| 色婷婷成人综合| 亚洲综人| 国产又黄又爽| 中文?日韩?免费?精品| AV电影在线播放| 天天摸天天舔天天操| 蜜臀一二三区| 男人天堂黄片| 久久人妻97久久久久久久| 中文字幕乱偷人妻久久艾草网| 日韩欧美性爱电影在线观看| 青青草丝袜在线视频| 后入式在线免费观看60秒| 超碰欧美97| 色色婷| 中文?日韩?免费?精品| 国产av又色又爽又黄| 岛国AV一区二区电影| 不卡视频一区蜜桃视频 | 中国操逼无码| 男人的天堂2018东京热啪啪啪| 久久久久久久久久久精| 日韩高清黄片| 久久9精品视频| 综合第一页| 色五月婷婷久久| 亚洲玖玖爱| 青草青草久热| a片亚洲一本通视频| 7777奇米影视久久| 98色网| 狠狠操使劲操| 日韩亚洲美女一区久久| 高清视频一区| www.狠狠| 麻豆精品.欧美精品.日韩精品.| 国产AV高清AV无码| 国产97综合| 国产 日韩 欧美高清| 久久一区二区加油站| 人人看欧美性爱| 欧美性天天影院| 色伊人91| 精品一区99999| 久久久久成人亚洲国产| 果冻传媒A片一二三区| 免费国产电影一区二区| 五月婷婷hd| 少妇啪啪自拍| 欧美色图在线视频少妇| 一级A啪啪啪啪| 一区二区三区色综合| 五月丁香婷婷综合| 另类欧美色| 国产精品青草综合久久| 国产精品97视频| 欧美综合自拍成人自拍第二十页| 婷婷超| 大鸡吧尹人在线| 亚州一区二区| 中文字幕丝袜人妻| 俄罗斯一区二区视频在线观看| 天天躁狠狠躁av| 91九色精品熟女内射| 一本大道久| 97精品综合久久| 天天噜| 伊人国产av| 国产熟女免费观看久久| 91天天综合在线| 久久综合乱子伦国产免费| 国产成人 综合亚洲 天堂| 99久久综合| yazhououmeizongya| 欧美男人的天堂| 99啪| 台湾成人无码AV| 色www精品视频在线观看| 美女被艹尤物视频| 综合网亚洲| 男人的天堂久久狠| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 久草加勒比一区在线| av婷婷色网| 最新三级网址| 最新制服中文第一页| 欧美老妇女内射网址| 亚洲色图殴美色图激情乱伦| 青青草中文字幕| 97综合国产精品高潮久久| 欧美精品久久久久久久久88| 校园春色 欧美| 久久精品国产精品| 色九月婷婷| 国产午夜精品理论片a大结局| 操淫穴亚洲五月丁香| 精品超碰中文在线| 丰满岳乱妇一区二区三区| 天天爱天天操| 亚洲欧洲无码97久久精品| 99热啪啪| 久操网视频| 日韩免费a级毛片无码a∨| 精品一区99999| 欧美永久激情一区二区| 狠狠综合网| 色久桃花影院在线观看| 午夜免费福利视频一区| 女人天堂av在线播放| 韩国国产欧美情侣视频在线| 精品无码一区二区三区| 亚洲第一页色网| 爱爱久久| 欧美一区二区成人一卡| 日韩精品一区二区三区四虎影视| 国内偷拍精品一区二区| 99re6在线视频播放免费精品| 精品无码久久久久| 欧洲与亚洲欧美精品中文字幕| 骚逼高潮久久精品| 超清中文乱码字幕| 91M一社| 亚洲啪啪啪啪视香蕉| 无码久| 久久蜜色情在线视频xxx免费观看| 成人AV素股で擦久久| 99在线免费视频| 做爱A级亚欧| 伊人久久在线视频观看| yazhouzaixian| 久久久女人| 欧美色图99| 大肉棒导航| 夜夜国产一区| 麻豆性爱视频在线播放| 91neishe| 亚洲五月婷婷| 久久人妻丝袜一区二区三| 夜夜操狠狠操| 嗯嗯啊啊视频在线看| 一本道综合色图|