精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringSecurity系列之降低 RememberMe 的安全風險

開發 架構
持久化令牌就是在基本的自動登錄功能基礎上,又增加了新的校驗參數,來提高系統的安全性,這一些都是由開發者在后臺完成的,對于用戶來說,登錄體驗和普通的自動登錄體驗是一樣的。

[[394666]]

在上篇文章中,我們提到了 Spring Boot 自動登錄存在的一些安全風險,在實際應用中,我們肯定要把這些安全風險降到最低,今天就來和大家聊一聊如何降低安全風險的問題。

降低安全風險,我主要從兩個方面來給大家介紹:

  1. 持久化令牌方案
  2. 二次校驗

當然,還是老規矩,閱讀本文一定先閱讀本系列前面的文章,這有助于更好的理解本文:

好了,我們就不廢話了,來看今天的文章。

1.持久化令牌

1.1 原理

要理解持久化令牌,一定要先搞明白自動登錄的基本玩法,參考(Spring Boot + Spring Security 實現自動登錄功能)。

持久化令牌就是在基本的自動登錄功能基礎上,又增加了新的校驗參數,來提高系統的安全性,這一些都是由開發者在后臺完成的,對于用戶來說,登錄體驗和普通的自動登錄體驗是一樣的。

在持久化令牌中,新增了兩個經過 MD5 散列函數計算的校驗參數,一個是 series,另一個是 token。其中,series 只有當用戶在使用用戶名/密碼登錄時,才會生成或者更新,而 token 只要有新的會話,就會重新生成,這樣就可以避免一個用戶同時在多端登錄,就像手機 QQ ,一個手機上登錄了,就會踢掉另外一個手機的登錄,這樣用戶就會很容易發現賬戶是否泄漏(之前看到松哥交流群里有小伙伴在討論如何禁止多端登錄,其實就可以借鑒這里的思路)。

持久化令牌的具體處理類在 PersistentTokenBasedRememberMeServices 中,上篇文章我們講到的自動化登錄具體的處理類是在 TokenBasedRememberMeServices 中,它們有一個共同的父類:

而用來保存令牌的處理類則是 PersistentRememberMeToken,該類的定義也很簡潔命令:

  1. public class PersistentRememberMeToken { 
  2.  private final String username; 
  3.  private final String series; 
  4.  private final String tokenValue; 
  5.  private final Date date
  6.     //省略 getter 

這里的 Date 表示上一次使用自動登錄的時間。

1.2 代碼演示

接下來,我通過代碼來給大家演示一下持久化令牌的具體用法。

首先我們需要一張表來記錄令牌信息,這張表我們可以完全自定義,也可以使用系統默認提供的 JDBC 來操作,如果使用默認的 JDBC,即 JdbcTokenRepositoryImpl,我們可以來分析一下該類的定義:

  1. public class JdbcTokenRepositoryImpl extends JdbcDaoSupport implements 
  2.   PersistentTokenRepository { 
  3.  public static final String CREATE_TABLE_SQL = "create table persistent_logins (username varchar(64) not null, series varchar(64) primary key, " 
  4.    + "token varchar(64) not null, last_used timestamp not null)"
  5.  public static final String DEF_TOKEN_BY_SERIES_SQL = "select username,series,token,last_used from persistent_logins where series = ?"
  6.  public static final String DEF_INSERT_TOKEN_SQL = "insert into persistent_logins (username, series, token, last_used) values(?,?,?,?)"
  7.  public static final String DEF_UPDATE_TOKEN_SQL = "update persistent_logins set token = ?, last_used = ? where series = ?"
  8.  public static final String DEF_REMOVE_USER_TOKENS_SQL = "delete from persistent_logins where username = ?"

根據這段 SQL 定義,我們就可以分析出來表的結構,松哥這里給出一段 SQL 腳本:

  1. CREATE TABLE `persistent_logins` ( 
  2.   `username` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL
  3.   `series` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL
  4.   `token` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL
  5.   `last_used` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  6.   PRIMARY KEY (`series`) 
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 

首先我們在數據庫中準備好這張表。

既然要連接數據庫,我們還需要準備 jdbc 和 mysql 依賴,如下:

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-starter-jdbc</artifactId> 
  4. </dependency> 
  5. <dependency> 
  6.     <groupId>mysql</groupId> 
  7.     <artifactId>mysql-connector-java</artifactId> 
  8. </dependency> 

然后修改 application.properties ,配置數據庫連接信息:

  1. spring.datasource.url=jdbc:mysql:///oauth2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai 
  2. spring.datasource.username=root 
  3. spring.datasource.password=123 

接下來,我們修改 SecurityConfig,如下:

  1. @Autowired 
  2. DataSource dataSource; 
  3. @Bean 
  4. JdbcTokenRepositoryImpl jdbcTokenRepository() { 
  5.     JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl(); 
  6.     jdbcTokenRepository.setDataSource(dataSource); 
  7.     return jdbcTokenRepository; 
  8. @Override 
  9. protected void configure(HttpSecurity http) throws Exception { 
  10.     http.authorizeRequests() 
  11.             .anyRequest().authenticated() 
  12.             .and() 
  13.             .formLogin() 
  14.             .and() 
  15.             .rememberMe() 
  16.             .key("javaboy"
  17.             .tokenRepository(jdbcTokenRepository()) 
  18.             .and() 
  19.             .csrf().disable(); 

提供一個 JdbcTokenRepositoryImpl 實例,并給其配置 DataSource 數據源,最后通過 tokenRepository 將 JdbcTokenRepositoryImpl 實例納入配置中。

OK,做完這一切,我們就可以測試了。

1.3 測試

我們還是先去訪問 /hello 接口,此時會自動跳轉到登錄頁面,然后我們執行登錄操作,記得勾選上“記住我”這個選項,登錄成功后,我們可以重啟服務器、然后關閉瀏覽器再打開,再去訪問 /hello 接口,發現依然能夠訪問到,說明我們的持久化令牌配置已經生效。

查看 remember-me 的令牌,如下:

這個令牌經過解析之后,格式如下:

  1. emhqATk3ZDBdR8862WP4Ig%3D%3D:ZAEv6EIWqA7CkGbYewCh8g%3D%3D 

這其中,%3D 表示 =,所以上面的字符實際上可以翻譯成下面這樣:

  1. emhqATk3ZDBdR8862WP4Ig==:ZAEv6EIWqA7CkGbYewCh8g== 

此時,查看數據庫,我們發現之前的表中生成了一條記錄:

數據庫中的記錄和我們看到的 remember-me 令牌解析后是一致的。

1.4 源碼分析

這里的源碼分析和上篇文章的流程基本一致,只不過實現類變了,也就是生成令牌/解析令牌的實現變了,所以這里我主要和大家展示不一樣的地方,流程問題,大家可以參考上篇文章。

這次的實現類主要是:PersistentTokenBasedRememberMeServices,我們先來看里邊幾個和令牌生成相關的方法:

  1. protected void onLoginSuccess(HttpServletRequest request, 
  2.   HttpServletResponse response, Authentication successfulAuthentication) { 
  3.  String username = successfulAuthentication.getName(); 
  4.  PersistentRememberMeToken persistentToken = new PersistentRememberMeToken( 
  5.    username, generateSeriesData(), generateTokenData(), new Date()); 
  6.  tokenRepository.createNewToken(persistentToken); 
  7.  addCookie(persistentToken, request, response); 
  8. protected String generateSeriesData() { 
  9.  byte[] newSeries = new byte[seriesLength]; 
  10.  random.nextBytes(newSeries); 
  11.  return new String(Base64.getEncoder().encode(newSeries)); 
  12. protected String generateTokenData() { 
  13.  byte[] newToken = new byte[tokenLength]; 
  14.  random.nextBytes(newToken); 
  15.  return new String(Base64.getEncoder().encode(newToken)); 
  16. private void addCookie(PersistentRememberMeToken token, HttpServletRequest request, 
  17.   HttpServletResponse response) { 
  18.  setCookie(new String[] { token.getSeries(), token.getTokenValue() }, 
  19.    getTokenValiditySeconds(), request, response); 

可以看到:

  1. 在登錄成功后,首先還是獲取到用戶名,即 username。
  2. 接下來構造一個 PersistentRememberMeToken 實例,generateSeriesData 和 generateTokenData 方法分別用來獲取 series 和 token,具體的生成過程實際上就是調用 SecureRandom 生成隨機數再進行 Base64 編碼,不同于我們以前用的 Math.random 或者 java.util.Random 這種偽隨機數,SecureRandom 則采用的是類似于密碼學的隨機數生成規則,其輸出結果較難預測,適合在登錄這樣的場景下使用。
  3. 調用 tokenRepository 實例中的 createNewToken 方法,tokenRepository 實際上就是我們一開始配置的 JdbcTokenRepositoryImpl,所以這行代碼實際上就是將 PersistentRememberMeToken 存入數據庫中。
  4. 最后 addCookie,大家可以看到,就是添加了 series 和 token。

這是令牌生成的過程,還有令牌校驗的過程,也在該類中,方法是:processAutoLoginCookie:

  1. protected UserDetails processAutoLoginCookie(String[] cookieTokens, 
  2.   HttpServletRequest request, HttpServletResponse response) { 
  3.  final String presentedSeries = cookieTokens[0]; 
  4.  final String presentedToken = cookieTokens[1]; 
  5.  PersistentRememberMeToken token = tokenRepository 
  6.    .getTokenForSeries(presentedSeries); 
  7.  if (!presentedToken.equals(token.getTokenValue())) { 
  8.   tokenRepository.removeUserTokens(token.getUsername()); 
  9.   throw new CookieTheftException( 
  10.     messages.getMessage( 
  11.       "PersistentTokenBasedRememberMeServices.cookieStolen"
  12.       "Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack.")); 
  13.  } 
  14.  if (token.getDate().getTime() + getTokenValiditySeconds() * 1000L < System 
  15.    .currentTimeMillis()) { 
  16.   throw new RememberMeAuthenticationException("Remember-me login has expired"); 
  17.  } 
  18.  PersistentRememberMeToken newToken = new PersistentRememberMeToken( 
  19.    token.getUsername(), token.getSeries(), generateTokenData(), new Date()); 
  20.  tokenRepository.updateToken(newToken.getSeries(), newToken.getTokenValue(), 
  21.     newToken.getDate()); 
  22.  addCookie(newToken, request, response); 
  23.  return getUserDetailsService().loadUserByUsername(token.getUsername()); 

這段邏輯也比較簡單:

首先從前端傳來的 cookie 中解析出 series 和 token。

根據 series 從數據庫中查詢出一個 PersistentRememberMeToken 實例。

如果查出來的 token 和前端傳來的 token 不相同,說明賬號可能被人盜用(別人用你的令牌登錄之后,token 會變)。此時根據用戶名移除相關的 token,相當于必須要重新輸入用戶名密碼登錄才能獲取新的自動登錄權限。

接下來校驗 token 是否過期。

構造新的 PersistentRememberMeToken 對象,并且更新數據庫中的 token(這就是我們文章開頭說的,新的會話都會對應一個新的 token)。

將新的令牌重新添加到 cookie 中返回。

根據用戶名查詢用戶信息,再走一波登錄流程。

OK,這里和小伙伴們簡單理了一下令牌生成和校驗的過程,具體的流程,大家可以參考上篇文章。

2.二次校驗

相比于上篇文章,持久化令牌的方式其實已經安全很多了,但是依然存在用戶身份被盜用的問題,這個問題實際上很難完美解決,我們能做的,只能是當發生用戶身份被盜用這樣的事情時,將損失降低到最小。

因此,我們來看下另一種方案,就是二次校驗。

二次校驗這塊,實現起來要稍微復雜一點,我先來和大家說說思路。

為了讓用戶使用方便,我們開通了自動登錄功能,但是自動登錄功能又帶來了安全風險,一個規避的辦法就是如果用戶使用了自動登錄功能,我們可以只讓他做一些常規的不敏感操作,例如數據瀏覽、查看,但是不允許他做任何修改、刪除操作,如果用戶點擊了修改、刪除按鈕,我們可以跳轉回登錄頁面,讓用戶重新輸入密碼確認身份,然后再允許他執行敏感操作。

這個功能在 Shiro 中有一個比較方便的過濾器可以配置,Spring Security 當然也一樣,例如我現在提供三個訪問接口:

  1. @RestController 
  2. public class HelloController { 
  3.     @GetMapping("/hello"
  4.     public String hello() { 
  5.         return "hello"
  6.     } 
  7.     @GetMapping("/admin"
  8.     public String admin() { 
  9.         return "admin"
  10.     } 
  11.     @GetMapping("/rememberme"
  12.     public String rememberme() { 
  13.         return "rememberme"
  14.     } 
  1. 第一個 /hello 接口,只要認證后就可以訪問,無論是通過用戶名密碼認證還是通過自動登錄認證,只要認證了,就可以訪問。
  2. 第二個 /admin 接口,必須要用戶名密碼認證之后才能訪問,如果用戶是通過自動登錄認證的,則必須重新輸入用戶名密碼才能訪問該接口。
  3. 第三個 /rememberme 接口,必須是通過自動登錄認證后才能訪問,如果用戶是通過用戶名/密碼認證的,則無法訪問該接口。

好了,我們來看下接口的訪問要怎么配置:

  1. @Override 
  2. protected void configure(HttpSecurity http) throws Exception { 
  3.     http.authorizeRequests() 
  4.             .antMatchers("/rememberme").rememberMe() 
  5.             .antMatchers("/admin").fullyAuthenticated() 
  6.             .anyRequest().authenticated() 
  7.             .and() 
  8.             .formLogin() 
  9.             .and() 
  10.             .rememberMe() 
  11.             .key("javaboy"
  12.             .tokenRepository(jdbcTokenRepository()) 
  13.             .and() 
  14.             .csrf().disable(); 

可以看到:

  1. /rememberme 接口是需要 rememberMe 才能訪問。
  2. /admin 是需要 fullyAuthenticated,fullyAuthenticated 不同于 authenticated,fullyAuthenticated 不包含自動登錄的形式,而 authenticated 包含自動登錄的形式。
  3. 最后剩余的接口(/hello)都是 authenticated 就能訪問。

OK,配置完成后,重啟測試,測試過程我就不再贅述了。

好了,今天從兩個方面和小伙伴們分享了在 Spring Boot 自動登錄中,如何降低系統風險,感興趣的小伙伴趕快試一把吧~

 

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2023-06-09 14:01:56

2022-07-14 09:20:24

供應鏈網絡攻擊

2019-03-29 15:11:13

2014-04-11 11:18:23

2011-07-18 09:01:47

2011-08-30 14:57:41

2018-12-18 09:20:44

欺騙技術物聯網安全物聯網

2021-05-08 10:44:35

SpringSecur登錄詳情

2010-11-29 09:49:59

2010-09-26 09:57:41

2021-12-12 11:49:02

電子商務安全網絡犯罪

2019-03-17 16:18:39

影子物聯網物聯網IOT

2009-01-15 09:55:00

局域網安全風險

2021-08-31 16:05:19

數據安全數據風險網絡安全

2016-10-28 13:21:36

2010-04-06 15:14:08

2009-11-30 11:40:52

2022-03-29 14:57:49

網絡安全疫情漏洞

2022-05-11 10:21:47

物聯網安全網絡安全物聯網

2011-03-17 11:24:18

點贊
收藏

51CTO技術棧公眾號

久久久久北条麻妃免费看| 亚洲精品免费在线播放| 国产精品久久久| 久久嫩草捆绑紧缚| 国产精品论坛| 国产午夜精品理论片a级大结局| 久久99国产精品久久久久久久久| 国产福利精品一区二区三区| 暖暖在线中文免费日本| 久久综合五月天婷婷伊人| 午夜精品一区二区三区在线视| gogo亚洲国模私拍人体| xxx欧美xxx| 一区二区三区成人在线视频| 欧美日韩精品中文字幕一区二区| 秋霞精品一区二区三区| 综合精品久久| 在线观看久久久久久| 中国免费黄色片| 123区在线| 最新热久久免费视频| 91久久久久久久久久久| 久久青青草原亚洲av无码麻豆 | 亚洲自拍欧美另类| 人妻人人澡人人添人人爽| 中国av一区| 欧美xxxx老人做受| 免费av不卡在线| 蜜桃成人精品| 高潮白浆女日韩av免费看| 天堂8在线天堂资源bt| 欧美成人精品一区二区男人看| 激情欧美一区二区| 久久久久国产一区二区三区| 色撸撸在线视频| 国产精品欧美日韩一区| 日韩理论片久久| av无码一区二区三区| 中文字幕亚洲在线观看| 7777女厕盗摄久久久| 亚洲一区二区三区四区五区xx| 日p在线观看| 欧美极品aⅴ影院| 欧美精品一区二区三区久久| 91成年人视频| 麻豆一区二区99久久久久| 国产第一区电影| 黄色av一级片| 日韩精彩视频在线观看| 国产成人aa精品一区在线播放| 中文字幕无码日韩专区免费| 人人狠狠综合久久亚洲婷| 欧美成人三级在线| 国产精品91av| 91p九色成人| 欧美无人高清视频在线观看| 欧美一级片中文字幕| 欧美xo影院| 色94色欧美sute亚洲13| 免费网站在线观看视频| 国产色在线 com| 国产精品视频免费| 精品国产乱码久久久久久蜜柚| 中文字幕一区二区人妻痴汉电车| 一区在线视频观看| 97色伦亚洲国产| www.久久久久久久| 黄色日韩在线| 欧美又大又粗又长| 青青草手机在线观看| 欧美三级免费| 性欧美在线看片a免费观看| 国产一区二区精彩视频| 午夜国产精品视频| 综合国产在线视频| www日韩在线| 伊人成人在线视频| 国产成人鲁鲁免费视频a| 日本网站免费观看| 欧美日韩一区二区三区四区在线观看| 亚洲一二三在线| 在线观看天堂av| 久久99青青| 日韩在线精品视频| 久青草视频在线观看| 天天做天天爱天天综合网2021| 国产精品美日韩| 清纯唯美一区二区三区| 日本xxxx人| 久久精品在线免费观看| 日韩第一页在线观看| 国产ktv在线视频| 91高清在线观看| 永久看看免费大片| 欧美久久亚洲| 日韩av网站大全| 顶级黑人搡bbw搡bbbb搡| 日韩午夜在线| 国产乱肥老妇国产一区二| 成人免费一级视频| 成人国产视频在线观看| 日韩片电影在线免费观看| h片在线观看网站| 日韩欧美高清在线视频| 伊人精品视频在线观看| 伊人久久综合影院| 欧美激情在线视频二区| 中文字幕乱码在线观看| 99精品视频在线播放观看| 樱空桃在线播放| 欧美日韩五码| 亚洲成人教育av| 男人av资源站| 日日夜夜精品视频免费| 国内成+人亚洲| 1区2区在线观看| 欧美日韩视频在线观看一区二区三区 | 免费看三级黄色片| 激情五月色综合国产精品| 欧美日韩高清在线观看| 亚洲天堂avav| 国产亚洲婷婷免费| 欧美亚洲精品一区二区| 亚洲免费一区三区| 不卡中文字幕av| 一区二区三区免费在线视频| 久久久久88色偷偷免费| 男人添女人下部高潮视频在观看| 在线观看网站免费入口在线观看国内 | 亚洲偷欧美偷国内偷| 国产在线视频你懂的| 中文欧美日韩| 国产精品嫩草在线观看| 亚洲按摩av| 欧美一区二区国产| 欧美一级特黄高清视频| 男人的j进女人的j一区| 欧美最大成人综合网| 99自拍视频在线观看| 欧美日韩激情一区二区三区| 第一页在线视频| 一道在线中文一区二区三区| 91精品国产99| 亚洲av片一区二区三区| 婷婷夜色潮精品综合在线| 91香蕉视频导航| 青青草91久久久久久久久| 国产97在线观看| 黄色片在线看| 欧美三级电影精品| 91传媒免费观看| 国产一区二区三区蝌蚪| 免费亚洲精品视频| 午夜精品久久久久久久久久蜜桃| 欧美一级理论片| 欧美爱爱小视频| 国产精品77777竹菊影视小说| 欧洲精品久久| 国精品产品一区| www.亚洲成人| 成人av无码一区二区三区| 亚洲高清视频中文字幕| 熟妇高潮精品一区二区三区| 美女精品在线观看| 午夜欧美一区二区三区免费观看| 国产伦理精品| 亚洲深夜福利在线| 在线免费av网| 亚洲黄色录像片| 国产网站无遮挡| 在线精品亚洲| 美乳视频一区二区| 国产精品无码久久久久| 亚洲欧美日韩一区在线| 久久精品性爱视频| 久久久久久久久一| 午夜啪啪小视频| 狠狠干综合网| 色噜噜狠狠色综合网| 国产精一区二区| 97高清免费视频| 黑人乱码一区二区三区av| 亚洲欧洲综合另类在线| 69亚洲乱人伦| 亚洲国产一区二区三区高清| 免费久久99精品国产自| 大胆人体一区二区| 日韩中文在线不卡| www.精品久久| 91国偷自产一区二区三区观看 | 日韩中文字幕视频在线| 波多野结衣午夜| 久久精品在线观看| 日韩精品――色哟哟| 日韩有码一区二区三区| 成年人深夜视频| 欧美一区二区三区激情视频| 99超碰麻豆| 欧亚一区二区| 国内精品久久久久| 麻豆传媒视频在线观看| 亚洲另类激情图| 亚洲免费不卡视频| 在线播放一区二区三区| 国产精品久免费的黄网站| 亚洲免费在线观看视频| 变态另类ts人妖一区二区| 成人精品鲁一区一区二区| 在线观看免费av网址| 亚洲欧美久久| 日韩在线观看a| 91精品国产91久久久久久密臀| 91亚洲精品久久久久久久久久久久| 黄色网页在线播放| 国产一区二区三区视频在线观看| 中文字幕人妻一区二区在线视频 | 久久久久久久久久一区二区三区| 国产福利91精品| 亚洲免费一级视频| 久久蜜桃精品| 极品美女扒开粉嫩小泬| 国产成人一区| 久久综合久久久| 国产精品jk白丝蜜臀av小说| 亚洲999一在线观看www| 55av亚洲| 欧美激情xxxx| 日本片在线看| 欧美乱妇高清无乱码| 日本免费在线视频| 中文字幕日本精品| 成年午夜在线| 中文字幕最新精品| avtt在线播放| 在线看日韩欧美| 精品国产av一区二区| 黑人狂躁日本妞一区二区三区| www.日本高清视频| 国产调教视频一区| 亚洲精品国产精品国自产网站| 国产在线精品一区二区三区不卡| av日韩一区二区三区| 国内精品嫩模av私拍在线观看| 欧美日韩免费高清| 女厕嘘嘘一区二区在线播放 | www.男人天堂网| 欧美日韩四区| 日韩日韩日韩日韩日韩| 一本色道88久久加勒比精品| 亚洲一区三区电影在线观看| 成人性生交大片免费看96| 成人激情av| 成人高潮a毛片免费观看网站| 国产精品久久电影观看| 国产成人精品一区二区三区在线| 国模gogo一区二区大胆私拍 | 欧美成人h版在线观看| 麻豆传媒在线免费看| 欧美老女人xx| sm久久捆绑调教精品一区| 51视频国产精品一区二区| 欧美极度另类| 成人在线中文字幕| 在这里有精品| 久久久久久高清| heyzo久久| 超级碰在线观看| 第一会所sis001亚洲| 青青草影院在线观看| 亚洲婷婷免费| 久久综合久久色| 在线综合亚洲| 日本激情视频在线播放| 国产一区美女在线| 天天看片天天操| 成人手机电影网| 最近中文字幕在线mv视频在线 | 欧美一级精品在线| 日本免费不卡视频| 中文字幕精品久久| 欧美videosex性欧美黑吊| 秋霞午夜一区二区| 亚洲成人高清| 九9re精品视频在线观看re6| 日韩大片在线播放| 隔壁人妻偷人bd中字| 久久精品日产第一区二区| 两性午夜免费视频| 久久久亚洲精品一区二区三区| 精品国产av色一区二区深夜久久 | 亚洲欧美日本国产专区一区| 中文字幕国产传媒| 成人18精品视频| 神马久久久久久久久久久 | 亚洲综合网在线观看| 亚洲国产精品成人综合 | 欧美国产激情一区二区三区蜜月| 男人天堂av电影| 一区二区国产盗摄色噜噜| av一级在线观看| 亚洲成人av片在线观看| 日韩伦理在线观看| 国产成人avxxxxx在线看| 91午夜精品| 中文字幕成人一区| 牛夜精品久久久久久久99黑人| 水蜜桃在线免费观看| 欧美资源在线| 午夜剧场免费看| 亚洲男帅同性gay1069| 五月婷婷激情五月| 日韩电影中文字幕| 成年人在线看| 欧美影院在线播放| 久久国产精品色av免费看| 97精品国产97久久久久久粉红| 欧美久久影院| 中文字幕在线观看日| 久久精品一区二区三区不卡牛牛| 国精产品一区一区| 一区二区欧美国产| 91国在线视频| 最近2019中文免费高清视频观看www99 | 99久久精品99国产精品| 久久久www成人免费毛片| 欧美美女bb生活片| 国产精品影院在线| 青青草原一区二区| 日韩欧美国产大片| 欧美大片在线播放| 99久免费精品视频在线观看| 久久伊人成人网| 日韩三级电影网址| 亚洲资源一区| 99高清视频有精品视频| 中文在线播放一区二区| 91丨porny丨九色| 久久精品综合网| 久草视频免费在线播放| 日韩一区国产二区欧美三区| h片在线播放| 97久久人人超碰caoprom欧美| 精品日韩欧美一区| 中文字幕国内自拍| 国产精品美女久久久久aⅴ| 日韩欧美不卡视频| 亚洲精品福利在线观看| 忘忧草在线影院两性视频| 欧美激情国产日韩| 日韩va欧美va亚洲va久久| 我想看黄色大片| 欧美三级电影一区| 91香蕉在线观看| 国产精品亚洲不卡a| 国产精品尤物| jizz18女人高潮| 福利一区视频在线观看| 九色视频在线播放| 国产精品美女www爽爽爽视频| 精品久久97| 国产三区在线视频| 国产精品美女www爽爽爽| 国产农村老头老太视频| 欧美黄色成人网| 米奇777超碰欧美日韩亚洲| 亚洲第一中文av| 亚洲三级在线免费观看| 免费国产羞羞网站视频| 日本sm极度另类视频| 国产精品久av福利在线观看| 北条麻妃在线视频观看| 亚洲国产精品国自产拍av| 国产高清免费在线观看| 7m精品福利视频导航| 日本一区二区高清不卡| 日韩av成人网| 一区二区三区四区不卡视频| 天天综合在线视频| 国产精品自拍偷拍| 在线看片日韩| 久久亚洲无码视频| 日韩欧美中文字幕公布| 成人免费无遮挡| 国产奶头好大揉着好爽视频| 不卡的av电影| 亚洲自拍偷拍另类| 综合国产在线视频| 国产一区在线电影| 免费一级特黄毛片| 中文字幕av在线一区二区三区| 中文字幕av片| 久久免费视频观看| 久久美女视频| 51调教丨国产调教视频| 日韩午夜三级在线| 亚洲四虎影院| 一区二区三区四区免费视频| 精品在线视频一区| 日韩一区二区视频在线| 欧美日韩第一页|