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

ARTICLE DETAIL

資訊詳情

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

企業(yè)級(jí)登錄全流程設(shè)計(jì):認(rèn)證授權(quán)、會(huì)話管理與安全防護(hù)實(shí)踐

企業(yè)級(jí)登錄全流程設(shè)計(jì):認(rèn)證授權(quán)、會(huì)話管理與安全防護(hù)實(shí)踐 1. 從零搭建企業(yè)級(jí)登錄先搞清楚我們?cè)诮鉀Q什么問題登錄這個(gè)功能單看好像就是“輸入賬號(hào)密碼、點(diǎn)一下按鈕”這么簡單但一旦放到企業(yè)級(jí)場(chǎng)景里它立刻變成整個(gè)系統(tǒng)中最敏感、最容易出事故、也最容易被攻擊者盯上的模塊。我見過太多項(xiàng)目在聯(lián)調(diào)階段才發(fā)現(xiàn)登錄流程設(shè)計(jì)得支離破碎有的把會(huì)話狀態(tài)塞進(jìn)本地存儲(chǔ)被腳本一鍋端有的密碼校驗(yàn)邏輯寫得比業(yè)務(wù)代碼還隨意還有的登錄接口被刷到數(shù)據(jù)庫連接池直接打滿。這些問題如果能在動(dòng)手寫代碼之前把整體流程想清楚大部分都能提前規(guī)避。先說清楚一個(gè)概念企業(yè)級(jí)用戶登錄指的是面向企業(yè)內(nèi)部員工、外部合作方、或者大規(guī)模C端用戶的統(tǒng)一身份認(rèn)證入口。它和“小網(wǎng)站搞個(gè)session存一下用戶ID”最大的區(qū)別在于企業(yè)級(jí)登錄要考慮的不只是“怎么驗(yàn)證密碼”還要考慮多端兼容、會(huì)話安全、單點(diǎn)登錄SSO、權(quán)限隔離、審計(jì)追蹤、防暴力破解、高可用部署這樣一整套體系。換句話說登錄不是一個(gè)“功能點(diǎn)”而是一條完整的安全鏈路。這篇文章我會(huì)從方案選型、核心代碼實(shí)現(xiàn)、踩坑記錄、到線上排查技巧完整走一遍企業(yè)級(jí)登錄流程的設(shè)計(jì)與落地。如果你正在做企業(yè)內(nèi)部系統(tǒng)、SaaS平臺(tái)、或者任何對(duì)安全要求比較高的Web應(yīng)用這篇文章應(yīng)該能幫你少走不少彎路。我會(huì)盡量把原理講透代碼部分也會(huì)給到可以直接改改就用的程度。2. 整體方案設(shè)計(jì)為什么我選擇了這套登錄架構(gòu)2.1 核心需求拆解登錄不只是校驗(yàn)密碼動(dòng)手設(shè)計(jì)之前我習(xí)慣先把需求拆成四個(gè)維度認(rèn)證Authentication、授權(quán)Authorization、會(huì)話管理Session Management、審計(jì)Audit。這四個(gè)詞聽起來很像但實(shí)際是四件完全不同的事。認(rèn)證解決的是“你是誰”的問題常見手段就是賬號(hào)密碼、短信驗(yàn)證碼、掃碼登錄、OAuth第三方授權(quán)授權(quán)解決的是“你能干什么”的問題比如登錄之后能訪問哪些菜單、哪些接口會(huì)話管理解決的是“怎么維持登錄狀態(tài)”的問題包括Token怎么發(fā)、怎么存、怎么續(xù)期、怎么失效審計(jì)解決的是“出了問題怎么追溯”的問題包括登錄日志、操作日志、異常行為記錄。很多項(xiàng)目的登錄模塊做得不好根本原因就是把這四個(gè)維度混在了一起。比如有的團(tuán)隊(duì)把用戶的權(quán)限列表直接塞進(jìn)JWT里美其名曰“無狀態(tài)設(shè)計(jì)”結(jié)果權(quán)限一改Token還得等過期才生效有的團(tuán)隊(duì)把會(huì)話存在內(nèi)存里服務(wù)一重啟全部用戶掉線。所以我做方案設(shè)計(jì)的第一步就是先把這四個(gè)維度分開畫清楚再?zèng)Q定每部分用什么技術(shù)承載。2.2 方案選型從Session到JWT再到混合方案登錄會(huì)話方案的主流選項(xiàng)大致有三類傳統(tǒng)Session、純JWT、以及Session JWT混合。我分別說下它們的適用場(chǎng)景和坑。傳統(tǒng)Session方案服務(wù)端把會(huì)話ID種在Cookie里用戶信息存服務(wù)端內(nèi)存或Redis。優(yōu)點(diǎn)是實(shí)現(xiàn)簡單、服務(wù)端可控性強(qiáng)、想踢誰踢誰缺點(diǎn)是分布式環(huán)境下要解決Session共享問題而且Cookie在跨域場(chǎng)景下比較麻煩。這個(gè)方案適合傳統(tǒng)服務(wù)端渲染的Web應(yīng)用比如企業(yè)內(nèi)部管理后臺(tái)。純JWT方案服務(wù)端把用戶信息簽進(jìn)Token里客戶端保存Token每次請(qǐng)求帶上來。優(yōu)點(diǎn)是天然適合前后端分離和移動(dòng)端服務(wù)端不需要存會(huì)話狀態(tài)擴(kuò)展性好缺點(diǎn)是Token沒法主動(dòng)失效除非引入黑名單機(jī)制而且如果往Token里塞太多東西請(qǐng)求頭會(huì)變得很大。這個(gè)方案適合開放API平臺(tái)、多端共用的服務(wù)。我實(shí)際項(xiàng)目里用得最多的是第三種混合方案。登錄成功后簽發(fā)短期JWT作為訪問憑證同時(shí)把刷新令牌Refresh Token存在Redis里有效期設(shè)置得長一些。短期Token過期后客戶端用刷新令牌換新Token。這樣既保留了JWT適合多端、擴(kuò)展性好的優(yōu)點(diǎn)又通過刷新令牌的Redis存儲(chǔ)實(shí)現(xiàn)了“可控的登錄狀態(tài)”——管理員可以刪除Redis里的刷新令牌達(dá)到強(qiáng)制下線效果。提示純JWT不是說不能用但它在企業(yè)級(jí)場(chǎng)景里有一個(gè)很尷尬的問題你沒辦法在服務(wù)端把已經(jīng)發(fā)出的Token作廢。如果遇到安全事件需要緊急踢掉所有在線用戶純JWT方案得靠改密鑰才能實(shí)現(xiàn)那代價(jià)就太大了。2.3 為什么企業(yè)級(jí)登錄必須做“多因子”設(shè)計(jì)我說的多因子不是指一定要上短信或者掃碼而是說至少要有兩層驗(yàn)證邏輯。第一層是“你知道什么”也就是賬號(hào)密碼第二層我建議至少做到“你擁有什么”比如手機(jī)驗(yàn)證碼、或者已經(jīng)綁定過的設(shè)備信息。對(duì)于后臺(tái)管理類系統(tǒng)這一步幾乎是必須的。有一次我負(fù)責(zé)給一個(gè)內(nèi)部運(yùn)營平臺(tái)加登錄功能一開始只做了賬號(hào)密碼上線第二天就有同事反饋說自己密碼被改了。查日志發(fā)現(xiàn)是有人拿弱口令字典在掃登錄接口剛好掃中了幾個(gè)用生日當(dāng)密碼的賬號(hào)。后來我上了登錄失敗次數(shù)限制、密碼復(fù)雜度策略、以及二次驗(yàn)證才把這個(gè)口子堵住。這里的教訓(xùn)是企業(yè)級(jí)系統(tǒng)的登錄入口永遠(yuǎn)默認(rèn)被攻擊者盯著安全設(shè)計(jì)不是“要不要做”的問題而是“怎么做才不拖累體驗(yàn)”的問題。3. 核心代碼實(shí)現(xiàn)一套可以落地的登錄流程3.1 技術(shù)棧說明我用Java技術(shù)棧做示例原因很簡單企業(yè)級(jí)后端項(xiàng)目Java的占比依然很高Spring Boot Spring Security Redis這套組合在業(yè)界非常成熟。但本文講的流程設(shè)計(jì)思路是完全語言無關(guān)的你用Node.js、Python、Go也能對(duì)應(yīng)落地。Spring Boot 2.7.xSpring SecurityJWTjjwt 0.11.5RedisSpring Data RedisMyBatis-Plus用于查詢用戶信息可替換成任何ORM密碼加密BCrypt3.2 表結(jié)構(gòu)設(shè)計(jì)用戶的密碼不該出現(xiàn)在用戶表里先看表結(jié)構(gòu)。很多新手會(huì)直接把密碼字段放在用戶表里這在企業(yè)級(jí)設(shè)計(jì)里是不推薦的。我習(xí)慣把“賬號(hào)信息”和“身份憑證”分開存儲(chǔ)這樣后續(xù)如果需要支持多種登錄方式——密碼登錄、短信登錄、企業(yè)微信掃碼登錄——擴(kuò)展起來不會(huì)動(dòng)用戶主表。-- 用戶基礎(chǔ)表 CREATE TABLE sys_user ( id BIGINT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(64) NOT NULL UNIQUE, real_name VARCHAR(64), status TINYINT NOT NULL DEFAULT 1 COMMENT 1:啟用 0:禁用, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- 用戶憑據(jù)表存密碼、上次修改時(shí)間等信息 CREATE TABLE sys_user_credential ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, credential_type VARCHAR(16) NOT NULL DEFAULT PASSWORD, password_hash VARCHAR(256) NOT NULL, last_reset_time DATETIME, failed_attempts INT DEFAULT 0, lock_until DATETIME, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_user_type (user_id, credential_type) );這兩個(gè)表的關(guān)系是一對(duì)多一個(gè)用戶可以有多種類型的憑證。密碼只存BCrypt加過密的哈希值不存明文這一點(diǎn)沒有任何商量余地。BCrypt是自適應(yīng)哈希算法可以調(diào)節(jié)計(jì)算成本暴力破解的代價(jià)非常高比MD5、SHA-256這類純哈希方案安全很多。3.3 登錄接口實(shí)現(xiàn)從校驗(yàn)到發(fā)Token的完整鏈路登錄接口的核心邏輯分六步我一個(gè)個(gè)拆開講。第一步參數(shù)校驗(yàn)。接收用戶名、密碼、驗(yàn)證碼如果有先做基礎(chǔ)格式校驗(yàn)比如用戶名不能含特殊字符、密碼不能為空、驗(yàn)證碼是否正確。驗(yàn)證碼的校驗(yàn)要放在密碼校驗(yàn)之前這樣可以把大部分自動(dòng)化攻擊擋在密碼校驗(yàn)之外減少密碼哈希的計(jì)算消耗。第二步查詢用戶。根據(jù)用戶名查用戶主表查不到就直接返回“用戶名或密碼錯(cuò)誤”——這里注意千萬不能提示“用戶不存在”否則攻擊者就能通過接口批量探測(cè)哪些賬號(hào)是真實(shí)存在的。第三步校驗(yàn)用戶狀態(tài)。用戶狀態(tài)為禁用、已鎖定、已刪除都直接拒絕登錄。這一步要在密碼校驗(yàn)之前做因?yàn)槊艽a校驗(yàn)更昂貴而且對(duì)已禁用用戶做密碼校驗(yàn)也沒有意義。第四步校驗(yàn)密碼。用BCrypt的matches方法比對(duì)明文密碼和哈希值。失敗則記錄失敗次數(shù)連續(xù)失敗達(dá)到閾值就鎖定賬號(hào)一段時(shí)間。第五步簽發(fā)Token。密碼校驗(yàn)通過后生成訪問Token和刷新Token。第六步記錄登錄日志返回Token給前端。核心代碼我用Spring Security的Filter鏈來實(shí)現(xiàn)但為了展示完整邏輯先寫出最直白的Controller版本方便理解每一步。RestController public class AuthController { Autowired private UserService userService; Autowired private TokenService tokenService; Autowired private LoginLogService loginLogService; PostMapping(/api/auth/login) public ResponseEntityLoginResponse login(RequestBody Valid LoginRequest request) { // 第一步基礎(chǔ)校驗(yàn)由 Valid 注解完成這里省略 // 第二步查詢用戶 User user userService.findByUsername(request.getUsername()); if (user null) { throw new BusinessException(用戶名或密碼錯(cuò)誤); } // 第三步用戶狀態(tài)校驗(yàn) if (user.getStatus() 0) { throw new BusinessException(賬號(hào)已被禁用請(qǐng)聯(lián)系管理員); } // 第四步密碼校驗(yàn) Credential credential userService.findCredential(user.getId()); if (credential null || !PasswordUtil.matches(request.getPassword(), credential.getPasswordHash())) { handleLoginFailure(request.getUsername()); throw new BusinessException(用戶名或密碼錯(cuò)誤); } // 檢查是否鎖定 if (credential.getLockUntil() ! null credential.getLockUntil().isAfter(LocalDateTime.now())) { throw new BusinessException(賬號(hào)已鎖定請(qǐng)稍后再試); } // 第五步簽發(fā)Token TokenPair tokenPair tokenService.createTokenPair(user.getId(), request.getLoginDevice()); // 第六步記錄日志 loginLogService.recordLogin(user.getId(), request.getUsername(), LoginResult.SUCCESS, RequestUtil.getClientIp()); return ResponseEntity.ok(new LoginResponse( tokenPair.getAccessToken(), tokenPair.getRefreshToken(), tokenPair.getExpiresIn())); } }這里有個(gè)非常重要的細(xì)節(jié)密碼錯(cuò)誤和用戶不存在時(shí)返回給前端的提示文案要完全一樣統(tǒng)一為“用戶名或密碼錯(cuò)誤”。這是登錄接口防用戶枚舉的標(biāo)準(zhǔn)做法。你可以自己建個(gè)測(cè)試賬號(hào)故意輸錯(cuò)密碼和故意輸錯(cuò)用戶名看返回信息是否一致如果一致說明這個(gè)接口在信息泄露層面是安全的。BCrypt匹配的代碼很簡單但我想特別說下它內(nèi)部做了什么。BCrypt匹配過程不只是簡單地做一次哈希比較它會(huì)從存儲(chǔ)的哈希串里解析出鹽值和代價(jià)因子然后用相同的鹽值重新計(jì)算輸入的密碼最后再比較結(jié)果。代價(jià)因子越高單次計(jì)算耗時(shí)越長暴力破解的成本就越高。我給內(nèi)部系統(tǒng)配置的代價(jià)因子是10大約耗時(shí)100毫秒左右如果是面向用戶的C端系統(tǒng)建議配到12雖然登錄會(huì)慢一點(diǎn)點(diǎn)但安全性提升明顯。3.4 令牌發(fā)放與刷新JWT Redis的混合會(huì)話方案接下來是令牌部分這也是整個(gè)登錄流程里我最想重點(diǎn)講的環(huán)節(jié)。訪問Token我習(xí)慣設(shè)置15分鐘有效期刷新Token設(shè)置7天有效期刷新Token存在Redis里Key的格式是refresh:token:{userId}:{jti}Value存的是刷新Token本身的哈希值同時(shí)設(shè)置過期時(shí)間。這樣做有三個(gè)好處。第一訪問Token短命即使被竊取攻擊者能利用的時(shí)間窗口很短第二刷新Token存在服務(wù)端管理員可以刪除Redis中的Key來實(shí)現(xiàn)強(qiáng)制下線第三刷新Token用jtiJWT ID作為標(biāo)識(shí)每次刷新可以旋轉(zhuǎn)令牌舊令牌直接失效能有效防止Token重放。TokenService的核心代碼如下Service public class TokenService { Value(${jwt.access-token-expire}) private long accessTokenExpire; // 毫秒默認(rèn) 90000015分鐘 Value(${jwt.refresh-token-expire}) private long refreshTokenExpire; // 毫秒默認(rèn) 6048000007天 Autowired private StringRedisTemplate redisTemplate; private static final String REFRESH_KEY_PREFIX refresh:token:; public TokenPair createTokenPair(Long userId, String device) { // 生成訪問Token String accessToken createAccessToken(userId, device); // 生成刷新Token String refreshToken createRefreshToken(userId, device); return new TokenPair(accessToken, refreshToken, accessTokenExpire); } private String createAccessToken(Long userId, String device) { long now System.currentTimeMillis(); return Jwts.builder() .setSubject(String.valueOf(userId)) .claim(device, device) .setIssuer(your-system) .setIssuedAt(new Date(now)) .setExpiration(new Date(now accessTokenExpire)) .signWith(SignatureAlgorithm.HS256, secretKey) .compact(); } private String createRefreshToken(Long userId, String device) { String jti UUID.randomUUID().toString().replace(-, ); long now System.currentTimeMillis(); String refreshToken Jwts.builder() .setSubject(String.valueOf(userId)) .setId(jti) .claim(device, device) .setIssuer(your-system) .setIssuedAt(new Date(now)) .setExpiration(new Date(now refreshTokenExpire)) .signWith(SignatureAlgorithm.HS256, secretKey) .compact(); // 刷新Token存入Redis String redisKey REFRESH_KEY_PREFIX userId : jti; // 只存哈希值不存完整Token減少Redis內(nèi)存占用 redisTemplate.opsForValue().set(redisKey, DigestUtils.sha256Hex(refreshToken), refreshTokenExpire, TimeUnit.MILLISECONDS); return refreshToken; } public RefreshResult refreshAccessToken(String oldRefreshToken) { // 解析舊刷新Token Claims claims; try { claims Jwts.parserBuilder() .setSigningKey(secretKey) .build() .parseClaimsJws(oldRefreshToken) .getBody(); } catch (JwtException e) { throw new BusinessException(登錄狀態(tài)已過期請(qǐng)重新登錄); } String userId claims.getSubject(); String jti claims.getId(); String device claims.get(device, String.class); // 校驗(yàn)Redis中的刷新Token是否匹配 String redisKey REFRESH_KEY_PREFIX userId : jti; String storedHash redisTemplate.opsForValue().get(redisKey); if (storedHash null || !storedHash.equals(DigestUtils.sha256Hex(oldRefreshToken))) { throw new BusinessException(登錄狀態(tài)已過期請(qǐng)重新登錄); } // 旋轉(zhuǎn)刷新Token刪除舊Key生成新Token對(duì) redisTemplate.delete(redisKey); TokenPair newTokenPair createTokenPair(Long.parseLong(userId), device); return new RefreshResult(newTokenPair.getAccessToken(), newTokenPair.getRefreshToken(), newTokenPair.getAccessExpiresIn()); } public void revokeByUserId(Long userId) { // 管理員強(qiáng)制下線刪除該用戶所有刷新Token SetString keys redisTemplate.keys(REFRESH_KEY_PREFIX userId :*); if (keys ! null !keys.isEmpty()) { redisTemplate.delete(keys); } } }刷新接口的邏輯很簡單前端拿到401響應(yīng)后帶上刷新Token請(qǐng)求/api/auth/refresh服務(wù)端驗(yàn)證刷新Token有效且Redis中有對(duì)應(yīng)記錄然后刪除舊刷新Token生成新的一對(duì)Token返回。這里有一個(gè)細(xì)節(jié)刷新接口本身也要做防盜用處理我要求前端必須在每次刷新時(shí)把舊刷新Token從本地移除并立即替換為新Token。如果檢測(cè)到同一個(gè)刷新Token被使用了兩次說明可能存在Token被竊取的風(fēng)險(xiǎn)我會(huì)把該用戶名下所有的刷新Token全部作廢并要求重新登錄。注意生產(chǎn)環(huán)境里令牌接口必須走HTTPS否則Token在傳輸過程中被截獲前面做的一切安全工作都等于零。這一點(diǎn)不需要討論是強(qiáng)制要求。3.5 密碼加密與校驗(yàn)BCrypt為什么是默認(rèn)選擇密碼存儲(chǔ)方式在企業(yè)級(jí)登錄里是一個(gè)永恒的話題。我見過有人用MD5加鹽來存儲(chǔ)也見過直接明文存儲(chǔ)的“事故現(xiàn)場(chǎng)”——那種系統(tǒng)的審計(jì)報(bào)告我甚至不敢仔細(xì)看。這里我直接給結(jié)論新系統(tǒng)一律用BCrypt舊系統(tǒng)從MD5遷移到BCrypt的方案我也在下面的坑點(diǎn)里詳細(xì)說明。BCrypt的核心特點(diǎn)有三個(gè)。第一內(nèi)置鹽值。每次加密都生成隨機(jī)鹽值同樣的密碼兩次加密的結(jié)果不一樣所以攻擊者無法通過彩虹表直接破解。第二計(jì)算成本可調(diào)。通過代價(jià)因子cost factor控制哈希計(jì)算次數(shù)代價(jià)因子每加1計(jì)算時(shí)間大約翻倍。第三自帶格式。BCrypt的哈希字符串形如$2a$10$7EqJtq8hPqXfYvLbI5Xh0u...其中$2a是算法標(biāo)識(shí)10是代價(jià)因子后面是鹽值和哈希值。BCrypt的使用代碼public class PasswordUtil { // 加密 public static String encode(String rawPassword) { return BCrypt.hashpw(rawPassword, BCrypt.gensalt(10)); } // 校驗(yàn) public static boolean matches(String rawPassword, String encodedPassword) { return BCrypt.checkpw(rawPassword, encodedPassword); } }使用時(shí)的注意點(diǎn)BCrypt有輸入長度限制超過72字節(jié)的密碼會(huì)被截?cái)嗨詷I(yè)務(wù)上要限制密碼最大長度。另外如果你的系統(tǒng)需要從MD5或SHA-256遷移到BCrypt不能簡單地把舊哈希直接換成BCrypt——用戶下次登錄時(shí)需要能校驗(yàn)舊密碼同時(shí)又能無縫升級(jí)。我常用的方案是給用戶憑據(jù)表加一個(gè)credential_version字段舊用戶是V1用MD5校驗(yàn)首次用V1版本密碼成功登錄后立刻把密碼重新用BCrypt加密同時(shí)把版本改為V2后續(xù)登錄走V2校驗(yàn)。這樣用戶無感知地完成了密碼存儲(chǔ)升級(jí)不需要讓所有人都重置密碼。4. 登錄鏈路中的安全防護(hù)細(xì)節(jié)那些看不見的攻防4.1 暴力破解防護(hù)不只是限制失敗次數(shù)暴力破解防護(hù)只做“失敗次數(shù)鎖定”是遠(yuǎn)遠(yuǎn)不夠的。攻擊者如果控制了一批代理IP或者借用分布式節(jié)點(diǎn)來攻擊單純按IP限流很容易被繞過。更靠譜的做法是分層防護(hù)。第一層驗(yàn)證碼。登錄頁的圖形驗(yàn)證碼或滑塊驗(yàn)證碼在前端發(fā)起登錄請(qǐng)求時(shí)必須攜帶。服務(wù)端校驗(yàn)驗(yàn)證碼通過后才繼續(xù)走賬號(hào)密碼校驗(yàn)。驗(yàn)證碼可以放在Redis里5分鐘有效一次性使用。第二層賬號(hào)維度限制。同一賬號(hào)連續(xù)失敗5次鎖定15分鐘鎖定時(shí)間隨失敗次數(shù)遞增比如第6到第10次失敗鎖30分鐘超過10次鎖24小時(shí)。這個(gè)策略要把攻擊者的成本抬得足夠高又不至于影響正常用戶。第三層IP維度的頻率限制。同一IP在單位時(shí)間內(nèi)的登錄請(qǐng)求次數(shù)超過閾值就拒絕比如每分鐘不超過30次每小時(shí)不超過100次。具體閾值要根據(jù)你系統(tǒng)的實(shí)際用戶量調(diào)整核心是防止集中的自動(dòng)化請(qǐng)求。防暴力破解的核心代碼Aspect Component public class LoginAttemptAspect { Autowired private StringRedisTemplate redisTemplate; // 賬號(hào)失敗鎖定Key private static final String ACCOUNT_FAIL_KEY login:fail:account:; // IP失敗鎖定Key private static final String IP_FAIL_KEY login:fail:ip:; public void recordFailure(String username, String ip) { // 賬號(hào)維度 String accountKey ACCOUNT_FAIL_KEY username; Long accountCount redisTemplate.opsForValue().increment(accountKey); if (accountCount ! null accountCount 1) { redisTemplate.expire(accountKey, 15, TimeUnit.MINUTES); } if (accountCount 5) { // 鎖定賬號(hào)15分鐘 String lockKey login:lock:account: username; redisTemplate.opsForValue().set(lockKey, 1, 15, TimeUnit.MINUTES); } // IP維度 String ipKey IP_FAIL_KEY ip; Long ipCount redisTemplate.opsForValue().increment(ipKey); if (ipCount ! null ipCount 1) { redisTemplate.expire(ipKey, 1, TimeUnit.MINUTES); } if (ipCount 30) { // 該IP臨時(shí)拒絕登錄 String ipBlockKey login:block:ip: ip; redisTemplate.opsForValue().set(ipBlockKey, 1, 5, TimeUnit.MINUTES); } } }這套方案在我維護(hù)過的系統(tǒng)里跑了兩三年效果很穩(wěn)定。有個(gè)值得注意的細(xì)節(jié)失敗次數(shù)計(jì)數(shù)器在Redis里要設(shè)置過期時(shí)間不能全程累計(jì)。否則正常用戶可能在連續(xù)幾天內(nèi)偶爾輸錯(cuò)幾次密碼就被累計(jì)到鎖定閾值體驗(yàn)很差。4.2 登錄態(tài)安全防固定會(huì)話攻擊與Token泄露登錄態(tài)安全還有一個(gè)容易忽略的點(diǎn)固定會(huì)話攻擊。攻擊者可以先在自己瀏覽器里登錄一個(gè)合法賬號(hào)拿到一個(gè)有效的會(huì)話ID然后誘導(dǎo)受害者使用這個(gè)會(huì)話ID去登錄。如果系統(tǒng)在登錄成功后沒有更換會(huì)話ID攻擊者就能用同一個(gè)會(huì)話ID冒充受害者。JWT方案同樣存在這個(gè)問題所以我在登錄成功后簽發(fā)的Token里會(huì)帶一個(gè)隨機(jī)字符串jti并確保每次登錄都重新生成不同設(shè)備、不同會(huì)話之間互相獨(dú)立。還有一個(gè)和業(yè)務(wù)強(qiáng)相關(guān)的細(xì)節(jié)賬號(hào)同時(shí)多端登錄怎么處理。有的系統(tǒng)要求一個(gè)人只能同時(shí)在一個(gè)設(shè)備上登錄新的登錄會(huì)踢掉舊的有的系統(tǒng)允許多端共存但要做設(shè)備管理列表。我建議做設(shè)備管理查登錄日志時(shí)能清晰看到“哪個(gè)用戶、什么時(shí)間、用什么設(shè)備登錄”這在安全審計(jì)時(shí)非常重要。我的實(shí)現(xiàn)是在刷新Token里加入設(shè)備標(biāo)識(shí)登錄時(shí)前端傳入設(shè)備編號(hào)不傳則根據(jù)User-Agent生成唯一標(biāo)識(shí)。記錄設(shè)備信息不是為了炫技而是為了讓用戶能在“賬號(hào)安全中心”里看到自己的登錄設(shè)備列表一旦發(fā)現(xiàn)陌生設(shè)備可以直接踢下線。4.3 登錄日志與審計(jì)出了事拿得出數(shù)據(jù)登錄日志這塊很多團(tuán)隊(duì)會(huì)拖到出安全事故后才想起來補(bǔ)。但企業(yè)級(jí)系統(tǒng)的登錄入口我一定會(huì)在設(shè)計(jì)階段就把審計(jì)日志做進(jìn)去。登錄日志至少需要包含這些字段用戶ID、用戶名、登錄時(shí)間、登錄IP、設(shè)備信息、登錄結(jié)果成功/失敗、失敗原因。我的日志表設(shè)計(jì)如下CREATE TABLE sys_login_log ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT, username VARCHAR(64), login_ip VARCHAR(64), device_info VARCHAR(256), user_agent VARCHAR(512), login_result TINYINT COMMENT 1:成功 2:密碼錯(cuò)誤 3:賬號(hào)鎖定 4:驗(yàn)證碼錯(cuò)誤, fail_reason VARCHAR(128), login_time DATETIME, INDEX idx_user_time (user_id, login_time), INDEX idx_ip_time (login_ip, login_time) );寫日志的時(shí)機(jī)要選好成功日志在Token簽發(fā)后記錄失敗日志在每一步失敗分支里記錄。日志的數(shù)據(jù)量會(huì)增長很快我建議按天做分區(qū)保留最近90天超過時(shí)間的歸檔到冷存儲(chǔ)。審計(jì)日志絕對(duì)不能只存在應(yīng)用服務(wù)器本地磁盤要統(tǒng)一匯總到日志中心否則服務(wù)器一旦重新部署數(shù)據(jù)就丟了。我個(gè)人在實(shí)際排查問題時(shí)發(fā)現(xiàn)用戶忘記密碼是最常見的工單類型。有了登錄日志客服可以直接看到用戶是不是被鎖定、鎖定時(shí)間到什么時(shí)候能很快判斷是攻擊導(dǎo)致的鎖定還是用戶自己輸錯(cuò)太多次。這個(gè)價(jià)值在實(shí)際運(yùn)維中非常明顯。5. 實(shí)操過程記錄從零搭建到線上穩(wěn)定運(yùn)行5.1 環(huán)境準(zhǔn)備我這邊使用的環(huán)境是一臺(tái)4核8G的開發(fā)機(jī)安裝CentOS 7系統(tǒng)、Docker、MySQL 8.0、Redis 6.0。企業(yè)級(jí)登錄模塊的開發(fā)和部署我建議至少把MySQL和Redis用Docker單獨(dú)跑起來方便重置環(huán)境。簡單貼一下啟動(dòng)命令# 啟動(dòng)MySQL docker run -d --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORDyourpassword \ -e MYSQL_DATABASEenterprise_auth \ mysql:8.0 # 啟動(dòng)Redis docker run -d --name redis6 \ -p 6379:6379 \ redis:6.0 --requirepass yourredispassword表結(jié)構(gòu)按照上面的SQL建好之后插入一個(gè)測(cè)試賬號(hào)INSERT INTO sys_user (username, real_name) VALUES (tester, 測(cè)試用戶); INSERT INTO sys_user_credential (user_id, credential_type, password_hash) VALUES (1, PASSWORD, $2a$10$...); -- 用BCrypt加密后的值5.2 登錄接口調(diào)試過程我習(xí)慣用Postman做初步調(diào)試。登錄接口的請(qǐng)求體{ username: tester, password: Test123456, captcha: 8F2A }調(diào)試時(shí)重點(diǎn)關(guān)注三個(gè)響應(yīng)登錄成功的200響應(yīng)、密碼錯(cuò)誤的401響應(yīng)、賬號(hào)鎖定的403響應(yīng)。響應(yīng)體里的錯(cuò)誤碼要設(shè)計(jì)清楚前端才能根據(jù)不同錯(cuò)誤類型給出不同提示。我常用的錯(cuò)誤碼定義是1001驗(yàn)證碼錯(cuò)誤1002用戶名或密碼錯(cuò)誤1003賬號(hào)已鎖定1004賬號(hào)已禁用1005登錄狀態(tài)已過期前端根據(jù)錯(cuò)誤碼提示相應(yīng)文案而不是直接把后端的錯(cuò)誤信息透出。這里有一個(gè)細(xì)節(jié)后端的錯(cuò)誤信息盡量別給前端展示統(tǒng)一轉(zhuǎn)成錯(cuò)誤碼否則會(huì)存在信息泄露風(fēng)險(xiǎn)也容易被攻擊者利用細(xì)節(jié)來枚舉用戶狀態(tài)。5.3 配置Spring Security放行登錄接口Spring Security默認(rèn)會(huì)攔截所有請(qǐng)求登錄接口本身要放行但刷新接口不能直接放行——刷新接口要單獨(dú)走一套校驗(yàn)邏輯。我的配置思路是Configuration EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() .antMatchers(/api/auth/login).permitAll() // 登錄接口放行 .antMatchers(/api/auth/captcha).permitAll() // 驗(yàn)證碼接口放行 .anyRequest().authenticated() .and() .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class); } }JWT過濾器的邏輯是從請(qǐng)求頭Authorization里取Token解析成功就向SecurityContext寫入認(rèn)證信息解析失敗則返回401。過濾器的代碼不復(fù)雜但有一個(gè)細(xì)節(jié)Token過期返回的401和未攜帶Token返回的401響應(yīng)體的錯(cuò)誤碼要一致不能給攻擊者區(qū)分“這個(gè)接口需要登錄”和“這個(gè)Token剛好過期”的機(jī)會(huì)。5.4 前端登錄流程對(duì)接前端拿到Token后的存儲(chǔ)位置我這里直接給出結(jié)論訪問Token只能放在內(nèi)存里刷新Token放在HttpOnly Cookie里。如果前端把兩個(gè)Token都放進(jìn)localStorage一旦出現(xiàn)跨站腳本漏洞Token會(huì)整個(gè)被偷走。放在HttpOnly Cookie里的刷新Token腳本拿不到安全級(jí)別高很多。我設(shè)計(jì)的前端登錄對(duì)接邏輯是頁面加載時(shí)先嘗試用刷新Token靜默換取訪問Token換不到就跳轉(zhuǎn)登錄頁登錄頁成功后拿到訪問Token刷新Token通過Set-Cookie種入。每次請(qǐng)求時(shí)攜帶訪問Token收到401時(shí)嘗試刷新刷新成功則重放原請(qǐng)求刷新失敗則跳回登錄頁。這套流程跑起來很順滑用戶基本感覺不到會(huì)話快過期這件事。6. 常見問題與排查技巧實(shí)錄6.1 用戶登錄后頻繁掉線這是我自己排查過最多的問題類型之一?,F(xiàn)象是用戶登錄成功但沒過多久就收到401。排查步驟我建議按下面順序走第一步看訪問Token過期時(shí)間是否太短。如果你把訪問Token設(shè)成了5分鐘甚至更短那用戶操作稍微磨蹭一點(diǎn)Token就過期了。我建議至少15分鐘配合刷新機(jī)制使用。第二步看前端是否正確處理了401刷新邏輯。很多前端代碼只在攔截器里做了“彈回登錄頁”沒有做“先用刷新Token靜默換新Token”。這種實(shí)現(xiàn)下Token一過期用戶就得重新登錄。正確做法是先嘗試靜默刷新刷新失敗再跳登錄頁。第三步看服務(wù)端時(shí)鐘是否同步。如果應(yīng)用服務(wù)器的時(shí)間比認(rèn)證授權(quán)服務(wù)器快或者慢Token的exp和iat字段就會(huì)出現(xiàn)偏差導(dǎo)致明明沒過期卻被判為過期。用NTP確保服務(wù)器時(shí)間同步這步常被忽略。6.2 Redis里刷新Token明明存在但刷新一直失敗我遇到過一次很詭異的場(chǎng)景刷新Token發(fā)過去了Redis里也能查到Key但服務(wù)端一直報(bào)“登錄狀態(tài)已過期”。查了很久最后發(fā)現(xiàn)是解析JWT的密鑰配置不一致——簽發(fā)Refresh Token用的密鑰和應(yīng)用啟動(dòng)時(shí)加載的密鑰不是同一個(gè)。如果你把密鑰放在配置中心務(wù)必確認(rèn)各環(huán)境配置的一致性。另一個(gè)可能原因是Redis的Key過期策略。我在前面代碼里給刷新Token設(shè)置了7天過期但如果用戶在7天內(nèi)頻繁活躍我一直建議在每次刷新時(shí)順帶延長刷新Token的過期時(shí)間也就是“滑動(dòng)過期”。如果沒做滑動(dòng)過期用戶哪怕天天在用系統(tǒng)登錄狀態(tài)也會(huì)在第7天準(zhǔn)時(shí)失效。這個(gè)體驗(yàn)很糟糕。我的做法是每次刷新成功后重新設(shè)置刷新Token的過期時(shí)間為7天。6.3 驗(yàn)證碼明明對(duì)了卻總是提示錯(cuò)誤驗(yàn)證碼問題的高發(fā)原因有兩個(gè)。第一驗(yàn)證碼使用一次后沒有刪除Redis中的緩存導(dǎo)致同一個(gè)驗(yàn)證碼可以重復(fù)使用前端又每次提交同一個(gè)驗(yàn)證碼后端一刪就再也對(duì)不上了所以會(huì)“明明對(duì)了但提示錯(cuò)誤”。第二驗(yàn)證碼的存儲(chǔ)Key生成的邏輯不一致。比如生成時(shí)用captcha:{uuid}校驗(yàn)時(shí)用captcha:uuid大小寫或分隔符不一致自然匹配不上。寫代碼時(shí)我強(qiáng)烈建議統(tǒng)一封裝一個(gè)驗(yàn)證碼服務(wù)生成和校驗(yàn)都走同一套Key拼接邏輯不要一個(gè)地方手寫一個(gè)Key。6.4 跨域場(chǎng)景下的Cookie和Token問題前后端分離的項(xiàng)目前端部署在app.example.com后端部署在api.example.com這是最常見的跨域場(chǎng)景??缬虮旧聿浑y但有一個(gè)坑刷新Token放在HttpOnly Cookie里跨域請(qǐng)求時(shí)默認(rèn)不會(huì)攜帶Cookie。需要在后端配置CORS時(shí)設(shè)置allowCredentials(true)同時(shí)前端請(qǐng)求要帶上withCredentials。如果前端和后端的主域名不同比如前端是example.com后端是auth.anotherdomain.comCookie跨域攜帶就要設(shè)置Domain屬性。但Cookie的Domain不能跨完全不同的頂級(jí)域名這種場(chǎng)景下要么做代理轉(zhuǎn)發(fā)要么改用其它會(huì)話方案。我在實(shí)際項(xiàng)目里更推薦的做法是前端Nginx把/api路徑反向代理到后端服務(wù)這樣瀏覽器看到的請(qǐng)求是同源的Cookie方案能用CORS也不用額外開放。簡單直接問題最少。6.5 密碼升級(jí)遷移踩坑記錄最后分享一個(gè)舊系統(tǒng)改造的案例很有代表性。某系統(tǒng)原來用MD5存儲(chǔ)密碼用戶量好幾萬不可能讓所有人重置密碼。我接手后做了兩步改造第一步新增credential_version字段默認(rèn)V1。登錄接口邏輯改成根據(jù)用戶當(dāng)前版本走對(duì)應(yīng)的校驗(yàn)邏輯。V1的走M(jìn)D5校驗(yàn)校驗(yàn)成功后立即用BCrypt重算密碼哈希把版本升到V2。這樣所有用戶在自己下次登錄時(shí)完成無感升級(jí)。第二步在系統(tǒng)中加入密碼強(qiáng)度校驗(yàn)。新注冊(cè)或修改密碼時(shí)強(qiáng)制要求密碼長度不少于8位且包含大小寫字母、數(shù)字、特殊字符中至少三類。歷史不良密碼在升級(jí)時(shí)也要求用戶重置一次。整個(gè)遷移過程平穩(wěn)落地沒有產(chǎn)生一條“密碼失效”的工單。7. 最后的幾點(diǎn)心得登錄功能寫到這里我覺得最有價(jià)值的反而不是代碼而是對(duì)整個(gè)系統(tǒng)的安全邊界意識(shí)。企業(yè)級(jí)登錄流程涉及的東西非常多——Token策略、密碼存儲(chǔ)、暴力破解防護(hù)、審計(jì)日志、跨域處理、密碼升級(jí)——每一項(xiàng)單拎出來都不算難但組合在一起任何一個(gè)環(huán)節(jié)的疏忽都會(huì)成為攻擊者的突破口。我個(gè)人的體會(huì)是設(shè)計(jì)登錄模塊時(shí)永遠(yuǎn)要問自己三個(gè)問題如果數(shù)據(jù)庫泄露用戶的密碼安全嗎如果Token被截獲攻擊者能獲取哪些數(shù)據(jù)如果登錄接口被刷系統(tǒng)能支撐住嗎這三個(gè)問題全部能給出清晰答案你的登錄模塊才算真正達(dá)到了企業(yè)級(jí)要求。還有一點(diǎn)想強(qiáng)調(diào)登錄這個(gè)模塊改起來牽扯面很大上線前一定要做完整的回歸測(cè)試尤其是Token刷新、賬號(hào)鎖定、強(qiáng)制下線這幾個(gè)場(chǎng)景。我踩過最痛的一次坑就是上線時(shí)只測(cè)了“登錄成功”這條快樂路徑完全沒有覆蓋“Token過期后續(xù)期”的場(chǎng)景結(jié)果線上第一個(gè)小時(shí)就收到一堆“系統(tǒng)自動(dòng)退出”的反饋灰溜溜地回滾版本。從那以后我給自己立了個(gè)規(guī)矩登錄模塊的功能清單里永遠(yuǎn)把異常場(chǎng)景放到和正常場(chǎng)景同等重要的位置去測(cè)試。這篇文章里的代碼和方案我都實(shí)際用過可以直接作為你項(xiàng)目里的初始版本去改造。如果你的場(chǎng)景和我的有些差異比如用了別的后端語言或者需要考慮更復(fù)雜的權(quán)限模型核心的流程設(shè)計(jì)和安全思路依然可以復(fù)用。登錄是系統(tǒng)的門面值得你多花些心思去打磨。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91九色丨风韵犹存| 久久精品毛片免费不卡| 2020中文在线一区二区三区| 本道在线| 亚洲日韩XXX| 91oumei| 国产亚洲欧美每日在线| 九九热九九| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 国产一区二区三区免费视频在性观看| 国产精品乱码久久久久久久久| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | av东京热男人的天堂| 五月综合色| 亚洲啪啪视频一区二区| 国语av狠狠色丁香婷婷综合激情| 欧美大香蕉97| 亚洲AV永久无码精品成人调教| 日韩欧美亚洲一区二区三区影院| 天天肏夜夜肏| 久久久久久久久久久999| 蜜乳AV色欲AVAV无码| 一级成人性爱| 中文AV制服乱伦| 欧美97网| 久久风骚城市人| 亚洲综合伊人| 亚洲男人久久综合天堂| 日韩少妇无码| 伊人九九九| 日韩青久久| 精品中文一区二区| 欧美性少妇| 久肏视频字幕| 人妻第一页| 久久熟女嫩草成人片免费 | 加勒比综合a∨| 91日日| 97中文天堂| 99只有精品| 自拍偷拍2025在线观看| 久久婷婷热| 欧美很很操视频| 九九色影院| 国产无套粉嫩白浆在| 中文字幕日本久久| 欧美在线视频99| 综合一区中亚洲国产成人综合精品| 91伊人久| 欧美在线干| 婷婷五月天小说| 色999人与兽| 欧美少妇熟女| 91久久堂| 欧美淫乱视频| 中文字幕欧美丝袜07资源| 欧美+日产+中文| 超碰九7免费| 91亚洲综合| 91在线免费精品视频| A级国产欧美激情在线| 国产女人和拘做爰视频 | 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 日韩免费在线视频观看| 婷婷五月天补不补| 18禁久极品美女久久哦哟呀!| 超碰视97中文| 天天综合网网欲色| 啪啪免费| 夜夜操二区| 黄色二级片网站| 久久大线蕉一区| 韩国嫰模上门援交视频| 日韩精品啪啪啪| 国产精品久久久无码AV网站| 操逼日韩无码| 性欧美| a级免费在线观看| 亚洲国产奇米影视久久| 啊啊啊啊啊在线观看网址 | 亚洲av噜噜噜噜噜噜| 国产精品久久久久久久久久梁医生| 日逼视频日本| 97在线资源| 欧洲久久一二线| 欧美大香蕉专区网| 人妻熟妇久草在线| 伊人操| 人人 操人人 操人人| 国产农村一一级特黄毛片| 亚洲欧洲小说图片视频 | 欧洲与亚洲欧美精品中文字幕| 大香网站| 日本少妇va7777| 神马久久啊啊| 欧美激情综合| 亚洲日韩精品在线播放| 美女91在线观看| 72av视频| 无码高清专| 96国产污污污丝袜| 思思热在线视频在线| 日韩在线观看中文字幕视频| 久久久久密臀视频| 女人与公拘交酡2020视频| www黄片免费看com| 淫乱图区| 狠狠操官网| 91精品电影18| 精精品人妻一区二区三区| 91成人久久| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚 | 丁香五月天久久精品视频一区二区三区| 99热在线只有精品| 日本一区二区成人在线| 欧美色爱综合| 婷婷色中文字幕| 大香蕉男人的天堂| 亚洲欧美在线观看无码| 男女91| 日韩精品字幕| 天堂精品小草| 欧美日韩另类在线| 久草资源欧美在线视频| 911av网站免费观看| 国产精品久久久蜜臀| 国产97在线视频| 超碰av人人人| 丝袜人妻av一区二区| 精品无码一区二区| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 欧美黄色大香蕉一区二区| 综合久久99亚洲人妻中文在线| 日韩一级性爱无码| 色综合 加勒比| 影音先锋乱| 欧美97se| 久久久com| 丝袜亚洲综合| 国产精品久久发布| 日本性爱欧美性爱| 使劲用力艹少妇视频一区二区 | 久久人人爽av亚洲精品天堂桃色| 大香蕉乱伦视频网| 黄片www视频免费| 日本999精品视频| 十八禁av无码免费网站APP| 日韩欧美丝袜诱惑| 91+欧美| 操一操摸一摸| 天堂综合| 超碰97资源中文字幕| 国产日韩欧美操逼视频 | 欧美国产伊人久久久久| 好爽视频在线观看| 国产乱不卡| 天天爽天天操| 久久精品国产亚洲妲己影视| 日本二三四区| 欧美999999| 尤物一级在线免费观看| 韩国三级色呦呦| 超碰这里只有精品| 99热精品免费| 亚洲欧美日韩免费电影| 男人的天堂1024| 欧美在线大香蕉| 日本午夜久久电影| 88xx成人精品视频| 日产精品久久久一区二区| 伊人五月天青青草婷婷| 全球成人中文在线| 另类图片欧美激情综合| 福利大香蕉| www.五月天| 无码不卡八戒| 丰满人妻一区二区三区免费 | 天堂涩涩| 91九九九馒头| 日本99久久| 日本狂喷奶水在线播放212| 青青草依人大香蕉| 久久综合久色欧美综合狠狠| 麻豆AV96熟妇人妻| 亚洲综合小说另类图欧美视频激情小说色五月天 | 国产亚洲色婷婷久久99精品91 - 百度| 丁香婷婷激情五月天无毒不卡 | 狠狠爱夜夜| 久久久九九九九| 最新欧洲欧美日本激情网站| 极品白嫩美女白浆成人福利在线看| 亚洲精品国产精品成人| 亚州欧美在线| 蜜桃网熟妇| 91成人社区| 亚洲s在线观看| 欧美日韩第一页| 激情抓乳插进去啪啪啪日韩 | 99无码视频| 欧美十八禁在线看| 艹比视频国产精品| 性色av蜜臀av色欲aV| 澳门黄片一香蕉视频| 欧美色性情| 91色欧美| 成人性交免费视频| 97超碰超碰| 日本男人天堂| 清纯唯美亚洲综合| aa片毛片| 9国产超碰| 大香蕉一区二区在线观看.| 97视频在线看| 国产精品懂色tv影视免费观看| 日日骚一区二区三区| 一区超碰一区| 亚洲情色 欧美| 久久精品国产97欧美精品亚洲| 97网址97| 人妻少妇精品无码专区二区密桃| 久久人妻一区二区三区高清| 另类老少妇| 操死我了啊啊啊| 欧美天天在线| 9精品久久久久| 日日夜夜骑| 欧在线一二区| 91精品国产91综合久久蜜臀| 亚洲一区中文精品| 影视综合无码少妇| 懂色AV蜜臀无码精品APP| 少妇高潮对白在线观看| 大鸡巴久久久| 日日躁狠狠躁天天躁精品| 97在线观| 成人精品久久久午夜福利| 大香蕉www.超碰| 日本欧美亚洲高清在线看| 极品极品色影院| 99中出在线| 级品肉射| 超碰97人妻自拍| 超碰人妻久久| 国产51色综合久久免费| www.久久久久| 日日黄色三级网站| 久久99九九九九6666免费观看软件| 青青草久草| 翔田千里爆乳巨臀无码| 欧亚乱色熟女一区二区| 国产一区二区三区中文字幕| 久久同城AV| 久热热| 都市久久精品激情亚洲| 99久久网站| 久久久久七视频| 久久久久99精品成人片蜜臀 | 国产亚洲精品美女| 97欧美视频| 粉嫩在线一区二区懂色| 啊啊啊啊啊好大好舒服想要| 五月婷亚洲精品天堂| 亚洲欧美综合区自拍另类| 亚洲天堂电影精品一区| 亚洲AV不卡在线观看| 黄色大片视频在线免费看| 欧美日韩 强奸乱伦| 欧美色偷拍| 亚洲精品久久久久久| 永久电影三级在线观看| 欧美精品99久久久| 天堂av最新电影网| 欧洲亚洲天堂精品| 一区中文字幕二区日韩| 亚精品无码毛片一区二区三区| 福利天天都操| 亚洲熟女精品| 青青草原综合久久大伊人精品| 97欧美久久久久久久| 日韩欧美亚洲自拍偷拍| 色情五月综合婷婷| 亚洲脚交| 日本午夜操逼| 极品色电影院| 男女性感激情网站| 亚洲污污网站| 无码日韩人妻av一| 91爰爱欧美| 成人AV超碰免费在线| 亚洲色图超碰在线| 日韩大香蕉| 亚洲精品久久久久久久蜜桃臀| 天天插夜夜爽| 欧美综合娱乐久久| 国产美女口爆吞精| 黄片www.| 亚洲国产成人7777| 欧美日韩国第一区| 无码人妻精品酒店| 人妻熟女字幕一区二区| 亚洲欧美不卡线| 99久久综合网| 亚洲se91| 欧美少妇性乱| 在免费jIzzjIzz在线视频| 精品一区二区三区四区外站| 国模少妇一区二区三区| 久久丝袜| 一道本东京热加勒比一区二区三区| 女性91网站| 九九久久久九九| 色综合国产在线观看| 久久久久久久久久久97| 岛国黄片网站| 国产噜噜噜噜噜久久久久久久久| 牛牛aV| 91痴汉| 伊人综合色网| av在线播放国产一区| 亚洲欧洲日产国产综合网| 无码高清国产AV| 精品视频一区二区| 麻豆AV一区二区| 18禁无码永久免费无限制| 超碰人妻中文在线| 99无码| 人人人摸人人| 最新9久久久9免费视频| 精品区9| 国产精品一区二区亚洲人成毛片| 嗯~啊~快点 死我视频免费看网站| 亚洲性爱无码乱伦av| 色噜噜国产精品视频一区二区| 91丝袜在线观看视频在线观看| WWW操逼| 欧美人妻熟女在线| 亚洲精品欧美专业| 99色视频| 亚洲国产精品9999在线观看| 久久线上视频免费看| 干B视频伊人网| 十八禁的黄污污免费网站| 情色大香蕉| 亚洲综合图文| 丁香五月成人| 美国aaaaa一级黄片| 天天爱天天操| 日本免费二区三区| 人妻 制服 日韩 中文 在线| 日韩乱码Av| 欧美aaaaaaa| 91美女视频| 在线小视频| 九九十八精品| 国产人伦精品一区二区三区 | 玖玖在线视频| 亚洲成a人在线观看久| 精品久久久久久久| 97久久久久久久久久| 久九九九九九九热| 女优视频第10页| 404操逼福利视频| 操b在线观看| 久热这里只有精品9| 欧美A√综合网| 口爆综合网| 国产无马av| 亚洲精品天堂久久A∨51成人漫 | 天天享受天天看| 亚洲精品丝袜-不卡成人免费……| 国产精品视频麻豆入口| 中文字幕精品免费一区二区| 涩五月婷婷| 97欧美久久久久久久| 久九九九九九九热| 中文字幕 av v| 色婷五月| 人妻丝袜无 码视频专区| 日韩性爱再线视频| 色九九综合| 精品国产肉丝袜在线拍国语| 亚洲精品aa久久伊人| 美女极品一区二区三区| 岛国毛片手机在线观看| 欧美日韩日产免费网站看| 欧美福利视频啊啊啊啊| 欧美影院一区二区三区| 久久久久久久久久久六六| 九九热精品免费视频| 亚洲色图欧美视频| 99热只有这里有精品| 亚洲.欧美.丝袜.中文.综合| 青娱乐国产精品| 欧美色网| 亚洲一区二区三区不卡国产欧美| 天天艹天天日| 亚洲日韩美女中文字幕乱| 天堂中文日本在线观看| 人妻精品视频一区二区| 激情五月综合| 中美日韩毛片| 亚洲影视第一页| 97久久超碰日韩精品| 精品久久97观看在线视频| 夜夜躁狠狠躁日日躁av| 一级日本牲交大片好爽在线看| 免费啪啪av| 久久精品三级影视| 成 人 影视 一区 二区 三区 四区| 日本不卡高清免v欧美日韩在线观看| 毛片17S| 人妻在线大香蕉| 欧美高清在线| 国产成人在线观看网址| 日本人妻中文字幕| 日韩女模中文造逼| 久久超碰、| 老女人91| 亚洲精品免费中文字幕| 殴美大黄片| 久久久啊啊| 色综合99999| 三级色影综合网| {男男暴菊gay无套网站| 亚洲成人免费在线| 久久国99999| 无码二级三级| 日本熟女中文字幕一区| 插入综合网| 91天射| 99re免费| 天天日天天插| 青青伊人加勒比海| 欧洲亚洲国产综合在线| 日韩国语字幕| 九九九国产精品| 国产精品久久久久久久久久梁医生| 国产女人成人精品视频| 九九九精品一区二区无码| 天天噜| 97免费在线视频在线观看| 久草热制服丝袜在线观看| 中日韓欧美高清| 粉嫩粉嫩一区性色AV片| 麻豆乱码久久精| 欧美日韩另类在线| 国产在线视频二区| 殴美牲| www.av不卡中文字幕| 日韩综合无码一区久久92| 影音先锋中文字幕日本好一区二区| 天美传媒av 在线| 97天天在线| 成人AV超碰免费在线| 亚洲91极品| 亚洲图片视频小说| 人妻系列无码专区中文有码| 诱惑人妻欧美一区在线播放| 任你爽视频| 久久视频少妇美女| 十八禁的黄污污免费网站| 大香蕉在线视频15| 97超碰色| 色婷婷aV一区二区三区麻豆综合| 蜜臀久久久99久久久久 | 97综合久第一页| 国产成年免费大片黄在线观看| 亚洲综合影视| 老熟女搡BBBB搡BBBB视频| 精品人妻1237| 色波多| xxx亚洲午夜天堂| 国产深喉视频一区二区| 岛国小电影| 大香蕉一级黄色片久久| 欧美日韩免费专区在线| 日韩免费看在线黄色片| 久操网在线| 亚洲乱伦图片视频| 97资源站久久| 天堂岛av| 超碰在线欧美性爱激情| 天天综合网入口~91| 秋霞一级A片黄色视频| 国内操逼视频二区| 粉嫩av在线一区二区| 综合色久欲| 91狠狠综合久久久| 欧美第一页| 欧美在线啊啊啊| 大黄片做爱的大的| 国产三级中文字幕粉嫩| 一区二区 韩日AV| 国产综合日韩伦理| 中文字幕人乱码中文字的预防方法 | 福利操逼| 强乱老妇中文字幕| 久久久啊啊| 国产亚洲日韩在线三区黑人| 久久这里只精品| 中文伊人大香蕉视频| 91露脸熟女专区| 国产亚洲色婷婷久久99精品91 - 百度| 日日干夜夜干| 无码一区二区精品视频久久久春药 | 老司机久久| 大香蕉五月天婷婷| 国产精品高清2021在线| 大香蕉手机在线| 日韩精品三区四区| 国产亚洲禁久一区二区| 国产一级舔足在线观看| 一级免费精品| 日本伦理一区二区| 亚洲最大无码中文字幕网站| 国产福利一区二| 超碰在线1234区| 麻豆2区1区天美| 18禁精品网站在线看| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 亚洲一区二区三区AV无码| 亚洲天堂男人天堂网| 97欧美色资源| 啊嗯好大视频在线观看| 日韩乱插| 亚洲精品无码成人久久久99| 天天综合91| 97操碰| 欧美性爱网97| 色爱欲亚洲| 亚洲宅男天堂| 精品亚洲国产成人AV制服丝袜| 国产性爱在线视频一区二区| 欧美姓爱综合网| 偷拍在线观看视频| 爱射综合| 人妻熟女一区在| 黄色一级视| 亚洲小电影免费涩涩成人在线高清 | 欧美日韩系列| 少妇内射www在线观看视频| 青草青青久久久久久国产| 天天干人妇| 曰韩操B| 乱伦熟女专区| 翔田千里A片一区二区| julia国产在线| 超碰在线综合97| 成熟熟女国产精品一区二区| 国产av青草| 国产久久一区二区午夜| 精品-91人妻子系列| 18禁网站在线播放| 中文字幕一区电影在线观看| 亚洲色系另类精品国产| 国产91亚洲精品一区二区三区| 亚洲欧美首页| 人妻另类 专区 欧美 制服| 欧美少妇人妻| 天天澡天天狠天天天做| 夜夜骑夜夜操| 欧美成年人性爱视频免费观看| 中国人高清www色视频免费| 东京热综合久久一区二区| 青青草依人大香蕉| 丝袜AV一区二区三区| 成人国产二区三区在线,男女精品。| AV在线播放网址| 99999亚洲另类| 72av视频| 尤物av网站免费在线播放| 亚洲天天综合| 97超碰磁| 久久久精品无码亚免费| 亚洲黄网在哪免费看| 日本理论在线| 天天综合亚在线| 区一在线观看| 99精品高潮| avav青青草久久夜| 91黑丝在线| 久久精品福利影院| 无码 有码 国产18p| 久草大| 91狠狠综合久久久久久| 97公开久久| 中出人妻中文字幕91在线| 精品免费囯产一区二区三区 | 九色 人妻 大香蕉| 久久99草| 日逼97| 亚洲性爱电影| 日本护士高潮| 天天摸夜夜摸| 加勒比av网| 日韩精品人妻| 亚洲国产成人精品久久久国产成人一区二区三.| 亚洲乱码尤物193YW| 91亚洲黑人| 午夜福利在线合集| 国产传媒日韩| 国产亚州精品美女久久久免费| 午夜丁香婷婷| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 日韩色香| 国产精品探花视频| 三级片大波波| 亚洲图片偷拍欧美| 无码137片内射在线影院| 另类小色呦| 欧美亚洲第1页| 国产97av| 亚洲AV无码黄色强奸| 97久精品| 日夜精品| 麻豆国产96在线| 夜夜狠狠躁日日躁色视频| 啪啪啪男女亚洲中文字幕99| 日本一级婬片试看三分钟| 日韩av色图| 人人妻人人澡人人爽久久av| 黄色区免费观看中文字幕| 久久人妻97久久久久久久| 欧美亚洲清纯| 日本午夜操逼| 青青草在线视频欧美| 九九九九九精品视频| 强奸乱伦av电影| 好吊色一区| 中文字幕一二三| 五月婷婷激情综合| 天天操熟妇| 亚洲 自拍偷拍 欧美| 亚洲成人精品久久久| 国产深夜福利| 中文字幕一区av| 欧美同性恋 的搜索结果 - 91n| www..com操老师| 精品网站99999| 亚洲欧美色图小说| 亚洲国产一级中文综合久久天堂在线免费观看| 久久久啊啊啊| 丁香六月激情综合| 久久超碰日韩精品| 欧州色图区| 四虎免费在线观看| 精品少妇后入一区二区三区四区人妻巨乳| 风间由美日韩欧美久久| 欧美一级做a爰片免费视频| 麻豆a'v电影| 无码国产精品久久久久| 青青草中出视频| 国产精品久久久久无码AV会牛| 98超碰日本| 亚洲欧美在线观看2021 | 十八禁的黄污污免费网站| 男人的亚洲天堂| 人人摸人人干人人拍97| 人妻熟女一区二区| 大香蕉丝袜一级片| 天天综合青苹果| 又黑又大又粗 | 青青草在线视频欧美| 久久精品久久九九精品| 97网址97| 婷婷丁香五月综合| 日韩欧美日韩| 97久久精品国产| 中日韩久久久| 999热日韩精品| 天堂蜜桃无码视频一区二区| 操逼无码操逼| 国产麻豆一区二三区| 欧美性爱在线无码| 97超碰欧美| 9久精品视频在线观看| 亚州AV无码国产精品| 一级AAA片一区二区三区| 校园春色之综合网| 涩涩这里只有精品视频| 大色网久久| 按摩中文字幕| 午夜男人av| 欧美偷拍| 成人在线视频一区| 亚洲黄色影视| 久久久久久久久久久免费精品 | 97碰在线视频| 亚洲成人黄色在线观看| 欧美在线干| 中文字幕一区 二 区 三 四 五 区日 日 骚| 妇女性内射冈站HDWWWCOM| 伊人四虎综合| 97国产精品国| 久久久久久AⅤ无码免费肉站 | 大香蕉欧美伊| 丁香九月激情| 91精品女厕偷拍视频| 亚洲天堂资源在线| #NAME?| 97亚洲性爱| 日韩性爱再线视频| 亚洲欧洲自拍图片专区满春格| 少妇精品久久久八区九区| 成年男人的天堂| 亚洲欧美日韩综合在线尤物| 国产精品永久免费10000| 青青草原伊人网| 欧美91网站| 无码欧美有限公司| 337p大胆噜噜噜噜噜91Av| 久久久久久性爱片| 麻豆这里只有精品| 日韩亚洲中文字幕在线| 亚洲无码电影久久久| 在线看污网站| 欧美在线|亚洲| 中文字幕久久精视频久久大全| 好吊妞转入那个网| 大香蕉黄色一区| AA特级绝黄| 欧美一级特黄淫片在线观看| 亚洲最新Av| 色欧美亚洲| 美女性91| 97欧美综合网| 欧美综合色图片| 久久久少妇诱惑精品视频| 91/欧美| 激情终合网| 久久超碰97中文字幕| 青娱乐导航AV| 啊啊啊不要啊啊受不了了视频在线 | 欧美日韩另类在线播放| 亚洲 欧美 91| 国内精品嫩模A∨私拍小视频| 性爱视频啪啪啪啪| 91青青在线视频| 中文字幕超碰CAO| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 亚洲日韩肥臀视频在线观看| 另类天堂| 91超碰人人| 天天综合网久久ww| 人人澡综合涩| 亚洲AV无码久久精品蜜桃小说| 麻豆影音天美视频| 久久久久网站-538在线视频-欧美永久乱码| 日韩三四五区| 欧美色图天堂网m| 国产亚洲日本| 国产AV线| 国产成年女黄特黄| 偷拍亚洲熟女视频播放| 亚洲AV无线| 91 刺激在线| 欧美白嫩女HD| 高清无码学生妹高潮| 热99re69精品8在线播放| 国产9 9在线 | 亚洲| 日本在线视频导航| 久久天天摸| 男人的天堂无码| 淫荡网址| 久久性爱大全| 青青草日本中文字幕| 67914在线兔费成人视频| 欧美黄色手机在线观看| 欧美性爱另类综合| 亚洲欧美色图小说| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 久草国产在线视频| 婷婷操逼| 碰人碰碰人人开房人肉| 亚洲欧洲无码bt精品合集| 五月婷婷激情网| 麻豆 亚洲 97| 美女操逼A A| 麻豆天美国美国产| 九九九九精品精| 最新中文字幕在线亚洲| 日韩中文字幕熟妇人妻| 欧美天天性| 激情四射五月天| 亚洲精品久久久久久| AV污污污污| 欧美性生活内射| 看大黄色大片原件| 综合欧美日韩在线| 国产成人一级av88| 国产一区二区三区高清视频| 操B久久| yirendaxiangjiashipin| 盗摄 精品 另类 一区| 91oumei| 日韩欧美成人大香蕉| 极品内射| 亚洲熟妇A V黑人| 日本不卡五区| 青娱乐休闲视频在线观看| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 97色视频在线| 国产成人精品一区| 国产熟妇 码视频户外直播| 国产AV激情无码久久无码 | 91国产在线精品| 男女一进一出视频久久| 久久东京国产精品视频| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 色狠狠 - 百度| 天天透伊人| 超碰97综合网| 精品久久久久久中文| 久久久久国产亚洲一区欧美色图日韩| 亚洲成人在线资源| 两性色网| 97爱b| 在线视频亚洲无码| 日韩三级一区 | 日韩偷拍一区二区三区| 亚洲 欧美都市激情| 性欧美| 91精品无码人妻系列| 日韩美女,国产传媒,视频一区| 国产资源中文字幕在线| 亚洲色人妻综合| 国产伦精品| 99这里有精品视频| 超碰人人干天天射| 婷婷色中文字幕| 91在线丝袜| 中文字幕av亚洲在线| 天美传媒av一区二区| 欧美综合娱乐久久| 色婷婷久久综合超碰| 日韩精品一区二区高清| 成人日本精品九区| 久久精品国产亚洲AV清纯| 91neishe| 99久久无码| 天天日天天射天天干| 韩国手机不卡无码三级视频| 97国产亚洲中文在线| 国内毛片无遮挡国产| 10000部十八禁看电影| 免费福利视频中文字幕| 好屌色综合| 黄色小视频日本txt| 人澡逼| 五月天大香蕉| 伊人骚琪琪亚洲天堂网站| 精品人人| 免费自拍三级综合| 国产精品九九| 99无码视频| 日日夜夜精品视频| 日本啊啊啊啊啊视频| ..日韩av毛片精品久久久| 91无码人妻| 久色网| 无遮挡男女激烈动态图| 香蕉久久精品| 亚洲av淫乱| 我想要 啊 啊 啊| 综合亚洲情色| 亚洲欧美国产成人综合不卡| 国产精品一区二区密臀| 日本九九久久99播| 国产精品久久久久久久毛片1| 青青草影视蜜久久| 91色女| 秋霞久久亚洲精品成人| 日韩91网| 激情文学欧美| 乱伦熟女区| 操屄日韩| 精品久久久久成人码免| 欧美少妇熟女| 久久毛卡| 亚洲精品97| 涩涩久久精品| 婷婷五月影院| 国产亚洲精品无码三区| 91日韩网站| 美女裸体麻豆天美蜜桃91| 日本中文字幕在线视频 | 天天综合,91综合永久| 亚洲国产av中文字幕久久 | 国产 三级自拍| 国产婷婷综合在线观看| 99这里只有精品| 欧美色66| 日本狠狠干| 91足交| 欧美亚洲自拍另类人妻| 超碰4A| 丝袜亚洲91| 国产日本熟女顶级一区二区三区视频 | 啊啊啊用力在线观看| 男男H黄动漫啪啪无遮挡网站| 亚洲中文字幕在线视频一区二区| asc国产精品| 97久久超碰国产网站| 亚洲成人网站在线观看| 亚洲国产成人福利在线观看| 久久亚洲AV无码白度| 欧美啪啪天堂| 97精品久久久久中文字幕| 任我爽视频在线观看| 色9999日韩国产| 国内毛片婷婷六月色| 9国产超碰| 国产老女人久久毛| 亚洲欧美综合网| 国产热av| 粉嫩久久久久| 99国产精品久久久久久久成人热| 九九热视频在线观看| 久久草在线综合视频| 久久综合亚洲色1080p| 性久久久| 欧美性爱综合,免费| 人人看人人摸人人色| 丝袜综合| 9/A片| a在线视频免费观看| 乱伦av.com| 青娱乐亚洲自拍| 爱妃国产亚洲视频中文字幕| 精品视频一二三中文| 天天天干977| 正宗无毛一线天嫩逼| 在线播放中文字幕| 91在线国产后入风骚翘臀美女素人| 日韩资源网| 伊人991| 91色色综合| 伊人少妇久久久| 中文无线日韩一区| 久久久久96| 欧美色老汉| 美女性91| 婷婷色综合欧美日韩| 国产成人久久精品蜜臀| 亚洲色欧美| 韩国三级一线观看久| 国产兽交视频在线播放| 免费av在线播放二区| 日韩无码三级影院| 干干干天天| 新版天堂中文资源8在线| 久久人人爽人人爽人人片Ⅴ| 毛片电影一区二区三区| 丁香六月综合激情| 日韩女优中文字幕| 精品国产72| 爱妻综合网| 97久操| 在线97视频| 无码精品久久| 无码WWW免费视频网站| 屁屁影院一区二区三区国产| 亚欧国产无码精品在线| 亚洲精品一区中文字幕乱码| 亚洲国产精品久久久久婷婷青年| 久草资源在线视频官方总站日韩丝袜美腿| 欧美曰韩国产精品| 亚洲欧洲激情| 欧美亚洲综合高清在线| 国产在线观看91精品一区| 精品一区二区成人| a在线观看| 成人无码专区精品视频| 东北女人操比视频| 日比av无码| 乱抡国产91| 日本日皮视频逼| 日本天天吊| 加勒比AV天堂| 天天天干977| 黑人精品XXX一区一二区| 日韩不卡毛片Av免费高清| 激情综合五月| 97精品综合久久网| 亚洲欧美碰碰| 欧美一级黄片视频在线| 久久五月综合| 欧美老妇女内射网址| 国产久9| 欧美的性爱网站免费| 91麻豆va国产精品| 韩国三级三级BD在线| 久久有码视频| 亚洲 欧美 偷拍 唯美| 五月丁香影院| 精品久久久不卡一区二区| 久久久久久久唑| 啪啪免费| 亚洲熟妇丝袜在线观看| 91美女高潮| 日韩成人在线性爱视频| 95人妻爽爽人人做人人澡| 婷婷美人网| aa片毛片| 91人妻PORNY九色大屁股| 麻豆一区二区三区精品| 999综合网| 极品色www影院| 欧美激情久| 久久性爱视频免费看| 激情av| 久久少妇人妻| 日韩成人精品| 青娱乐亚洲热| 欧美亚洲首页| 这里都是精品在线观看| 日日干男人的天堂| 韩国三级一线观看久| 久久久一级| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩欧美午夜一区二区| 一二三啪啪专区| 美女诱惑久久| 国产毛片精品一区二区色欲黄A片| 亚州欧美综合| 精品一区二区成人| 亚洲揄拍网| 操逼逼一区视频| 青娱乐 成人娱乐在线| 9久久精品| 国产亚洲在线观看| 超碰 欧美| 精品成人av一区二区三区在线| 激情黄色五月天| 亚洲最大成人a毛毛片| 99色在线| 午夜福利成人免费视频| 91网站18+| 天天色综亚洲91污| 中文字幕一区二区三区蜜桃视频| 免费观看国产小粉嫩喷水精品午| 欧美性爱一区| 亚洲一区二区三区不卡国产欧美| 人人澡综合涩| 日韩欧美成人午夜福利| 日韩ab网| 一区二区三区探花在线观看| 中文字幕人乱码中文字的预防方法 | 91伊人影视综合| 欧美gv在线观看| 9 7超碰在线免费观看| 蜜乳视频网站| 国产一区二区久久| 久久精视频美日韩在线视频| 日韩欧美~中文字| 99热啪啪| 久久男人天堂| 男生女生啊啊啊啊| 性爱视频啪啪啪啪| 超碰精品人妻狠狠干| 搡老熟女老女人老熟妇免费视频| 在线观看啊啊啊啊啊| 丁香五月天啪啪| 3PAV乱伦视频| 四虎视频在线观看| 粉嫩av在线一区二区| 色色97爱| 密臀在线免费观看| 亚欧性爱无码| 久久精品国产97欧美精品亚洲 | 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 天天天天干| 9色国产精品一区粉嫩| 97一区二区三区视频| 日韩女模中文造逼| 偷拍精品一区二区三区| 色麻豆AV| 国产亚洲在线观看| 强奸乱伦AV一天堂网| 男女性扦B| 伊色综合天堂色97| 日本操色导航| 日韩有码专区| 蜜桃一区二区三区| 日本一区99| 和协影院中文字幕三区| 日本一区二区做爱的视频| 亚洲a色| 你草精品在线视频| 思思热免费视频观看| 视频不卡中文字幕| 91美女視頻| 91色碰| 国产视频一区二区免费| 操国产逼| 欧美爱国产综合、| 99999久久久久9国产精品| 99精品视频在线观看免费| 欧美色图第一页| 精国久久一区二区三区98| oumeisetu综合| 国产激情av女片自拍| 人人操,人人液| 暴力av在线| 狠色婷婷久久一区二区三区_| 天天影视色香色欲| 亚洲日韩成人性爱视频| 婷婷av在线中文字幕| 青青青青青手机视频| 久草精品一区 | 色原狠狠天天天| 麻豆 亚洲 97| 欧美性后入| 射 色综合| 婷婷操逼| 白嫩国模丰满一二三区| 蜜乳Av成人片网站| 免费AV中文网在线观看| 91高清欧美| 久艹视频在线| 都市激情人妻一区二区青青操视频| 欧美制服网站美腿丝袜| 日本久久99| 97国产成人精品免费视频| 欧美亚洲色图另类国产| 人人操人人干xxx| 亚洲一二三四区| 人妻久久| 久热网| 欧美第五页| 99日免费视频中文字幕| 99精品伊人| 综合网亚| 欧美亚洲20p| 蜜桃久久久久久久| 久久久久久大| 91美女视屏| 国产日本熟女顶级一区二区三区视频| 日日日日日| 婷婷五月天综合网| 色色色综合网| 思思99热| 熟女丝袜视频| 超碰97爽| 精品一区96| 午夜精品久久久99| 91嫩草欧美| 情色五月天网| 91无码人妻| 亚洲素人综合| 男女啊啊啊| 欧美激情专区| 激情综合网亚洲| av一区二区三区不卡| 操操逼视频| 国产精品69人妻无码久久久| 日操粉逼逼| 少妇滛荡视频| 黄色AV影视| 欧美亚洲第1页|