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

Springboot 配置文件、隱私數據脫敏實踐

開發 架構
如果對脫敏概念不熟悉,可以看一下我之前寫過的一篇大廠也在用的6種數據脫敏方案,里邊對脫敏做了簡單的描述,接下來分享工作中兩個比較常見的脫敏場景。

[[414887]]

本文轉載自微信公眾號「程序員內點事」,作者程序員內點事。轉載本文請聯系程序員內點事公眾號。

大家好!我是小富~

這幾天公司在排查內部數據賬號泄漏,原因是發現某些實習生小可愛居然連帶著賬號、密碼將源碼私傳到GitHub上,導致核心數據外漏,孩子還是沒挨過社會毒打,這種事的后果可大可小。

說起這個我是比較有感觸的,之前我TM被刪庫的經歷,到現在想起來心里還難受,我也是把數據庫賬號明文密碼誤提交到GitHub,然后被哪個大寶貝給我測試庫刪了,后邊我長記性了把配置文件內容都加密了,數據安全問題真的不容小覷,不管工作匯還是生活,敏感數據一定要做脫敏處理。

如果對脫敏概念不熟悉,可以看一下我之前寫過的一篇大廠也在用的6種數據脫敏方案,里邊對脫敏做了簡單的描述,接下來分享工作中兩個比較常見的脫敏場景。

配置脫敏

實現配置的脫敏我使用了Java的一個加解密工具Jasypt,它提供了單密鑰對稱加密和非對稱加密兩種脫敏方式。

單密鑰對稱加密:一個密鑰加鹽,可以同時用作內容的加密和解密依據;

非對稱加密:使用公鑰和私鑰兩個密鑰,才可以對內容加密和解密;

以上兩種加密方式使用都非常簡單,咱們以springboot集成單密鑰對稱加密方式做示例。

  1. <!--配置文件加密--> 
  2. <dependency> 
  3.     <groupId>com.github.ulisesbocchio</groupId> 
  4.     <artifactId>jasypt-spring-boot-starter</artifactId> 
  5.     <version>2.1.0</version> 
  6. </dependency> 

配置文件加入秘鑰配置項jasypt.encryptor.password,并將需要脫敏的value值替換成預先經過加密的內容ENC(mVTvp4IddqdaYGqPl9lCQbzM3H/b0B6l)。

這個格式我們是可以隨意定義的,比如想要abc[mVTvp4IddqdaYGqPl9lCQbzM3H/b0B6l]格式,只要配置前綴和后綴即可。

  1. jasypt: 
  2.   encryptor: 
  3.     property: 
  4.       prefix: "abc[" 
  5.       suffix: "]" 

ENC(XXX)格式主要為了便于識別該值是否需要解密,如不按照該格式配置,在加載配置項的時候jasypt將保持原值,不進行解密。

  1. spring: 
  2.   datasource: 
  3.     url: jdbc:mysql://1.2.3.4:3306/xiaofu?useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&ze oDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai 
  4.     username: xiaofu 
  5.     password: ENC(mVTvp4IddqdaYGqPl9lCQbzM3H/b0B6l) 
  6.  
  7. # 秘鑰 
  8. jasypt: 
  9.   encryptor: 
  10.     password: 程序員內點事(然而不支持中文) 

秘鑰是個安全性要求比較高的屬性,所以一般不建議直接放在項目內,可以通過啟動時-D參數注入,或者放在配置中心,避免泄露。

  1. java -jar -Djasypt.encryptor.password=1123  springboot-jasypt-2.3.3.RELEASE.jar 

預先生成的加密值,可以通過代碼內調用API生成

  1. @Autowired 
  2. private StringEncryptor stringEncryptor; 
  3.  
  4. public void encrypt(String content) { 
  5.     String encryptStr = stringEncryptor.encrypt(content); 
  6.     System.out.println("加密后的內容:" + encryptStr); 

或者通過如下Java命令生成,幾個參數D:\maven_lib\org\jasypt\jasypt\1.9.3\jasypt-1.9.3.jar為jasypt核心jar包,input待加密文本,password秘鑰,algorithm為使用的加密算法。

  1. java -cp  D:\maven_lib\org\jasypt\jasypt\1.9.3\jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password=xiaofu  algorithm=PBEWithMD5AndDES 

一頓操作后如果還能正常啟動,說明配置文件脫敏就沒問題了。

敏感字段脫敏

生產環境用戶的隱私數據,比如手機號、身份證或者一些賬號配置等信息,入庫時都要進行不落地脫敏,也就是在進入我們系統時就要實時的脫敏處理。

用戶數據進入系統,脫敏處理后持久化到數據庫,用戶查詢數據時還要進行反向解密。這種場景一般需要全局處理,那么用AOP切面來實現在適合不過了。

首先自定義兩個注解@EncryptField、@EncryptMethod分別用在字段屬性和方法上,實現思路很簡單,只要方法上應用到@EncryptMethod注解,則檢查入參字段是否標注@EncryptField注解,有則將對應字段內容加密。

  1. @Documented 
  2. @Target({ElementType.FIELD,ElementType.PARAMETER}) 
  3. @Retention(RetentionPolicy.RUNTIME) 
  4. public @interface EncryptField { 
  5.  
  6.     String[] value() default ""
  1. @Documented 
  2. @Target({ElementType.METHOD}) 
  3. @Retention(RetentionPolicy.RUNTIME) 
  4. public @interface EncryptMethod { 
  5.  
  6.     String type() default ENCRYPT; 

切面的實現也比較簡單,對入參加密,返回結果解密。為了方便閱讀這里就只貼出部分代碼,完整案例Github地址:https://github.com/chengxy-nds/Springboot-Notebook/tree/master/springboot-jasypt

  1. @Slf4j 
  2. @Aspect 
  3. @Component 
  4. public class EncryptHandler { 
  5.  
  6.     @Autowired 
  7.     private StringEncryptor stringEncryptor; 
  8.  
  9.     @Pointcut("@annotation(com.xiaofu.annotation.EncryptMethod)"
  10.     public void pointCut() { 
  11.     } 
  12.  
  13.     @Around("pointCut()"
  14.     public Object around(ProceedingJoinPoint joinPoint) { 
  15.         /** 
  16.          * 加密 
  17.          */ 
  18.         encrypt(joinPoint); 
  19.         /** 
  20.          * 解密 
  21.          */ 
  22.         Object decrypt = decrypt(joinPoint); 
  23.         return decrypt; 
  24.     } 
  25.  
  26.     public void encrypt(ProceedingJoinPoint joinPoint) { 
  27.  
  28.         try { 
  29.             Object[] objects = joinPoint.getArgs(); 
  30.             if (objects.length != 0) { 
  31.                 for (Object o : objects) { 
  32.                     if (o instanceof String) { 
  33.                         encryptValue(o); 
  34.                     } else { 
  35.                         handler(o, ENCRYPT); 
  36.                     } 
  37.                     //TODO 其余類型自己看實際情況加 
  38.                 } 
  39.             } 
  40.         } catch (IllegalAccessException e) { 
  41.             e.printStackTrace(); 
  42.         } 
  43.     } 
  44.  
  45.     public Object decrypt(ProceedingJoinPoint joinPoint) { 
  46.         Object result = null
  47.         try { 
  48.             Object obj = joinPoint.proceed(); 
  49.             if (obj != null) { 
  50.                 if (obj instanceof String) { 
  51.                     decryptValue(obj); 
  52.                 } else { 
  53.                     result = handler(obj, DECRYPT); 
  54.                 } 
  55.                 //TODO 其余類型自己看實際情況加 
  56.             } 
  57.         } catch (Throwable e) { 
  58.             e.printStackTrace(); 
  59.         } 
  60.         return result; 
  61.     } 
  62.     。。。 

緊接著測試一下切面注解的效果,我們對字段mobile、address加上注解@EncryptField做脫敏處理。

  1. @EncryptMethod 
  2. @PostMapping(value = "test"
  3. @ResponseBody 
  4. public Object testEncrypt(@RequestBody UserVo user, @EncryptField String name) { 
  5.  
  6.     return insertUser(username); 
  7.  
  8. private UserVo insertUser(UserVo user, String name) { 
  9.     System.out.println("加密后的數據:user" + JSON.toJSONString(user)); 
  10.     return user
  11.  
  12. @Data 
  13. public class UserVo implements Serializable { 
  14.  
  15.     private Long userId; 
  16.  
  17.     @EncryptField 
  18.     private String mobile; 
  19.  
  20.     @EncryptField 
  21.     private String address; 
  22.  
  23.     private String age; 

請求這個接口,看到參數被成功加密,而返回給用戶的數據依然是脫敏前的數據,符合我們的預期,那到這簡單的脫敏實現就完事了。

知其然知其所以然

Jasypt工具雖然簡單好用,但作為程序員我們不能僅滿足于熟練使用,底層實現原理還是有必要了解下的,這對后續調試bug、二次開發擴展功能很重要。

個人認為Jasypt配置文件脫敏的原理很簡單,無非就是在具體使用配置信息之前,先攔截獲取配置的操作,將對應的加密配置解密后再使用。

具體是不是如此我們簡單看下源碼的實現,既然是以springboot方式集成,那么就先從jasypt-spring-boot-starter源碼開始入手。

starter代碼很少,主要的工作就是通過SPI機制注冊服務和@Import注解來注入需前置處理的類JasyptSpringBootAutoConfiguration。

在前置加載類EnableEncryptablePropertiesConfiguration中注冊了一個核心處理類EnableEncryptablePropertiesBeanFactoryPostProcessor。

它的構造器有兩個參數,ConfigurableEnvironment用來獲取所有配屬信息,EncryptablePropertySourceConverter對配置信息做解析處理。

順藤摸瓜發現具體負責解密的處理類EncryptablePropertySourceWrapper,它通過對Spring屬性管理類PropertySource做拓展,重寫了getProperty(String name)方法,在獲取配置時,凡是指定格式如ENC(x) 包裹的值全部解密處理。

既然知道了原理那么后續我們二次開發,比如:切換加密算法或者實現自己的脫敏工具就容易的多了。

案例Github地址:https://github.com/chengxy-nds/Springboot-Notebook/tree/master/springboot-jasypt

PBE算法

再來聊一下Jasypt中用的加密算法,其實它是在JDK的JCE.jar包基礎上做了封裝,本質上還是用的JDK提供的算法,默認使用的是PBE算法PBEWITHMD5ANDDES,看到這個算法命名很有意思,段個句看看,PBE、WITH、MD5、AND、DES 好像有點故事,繼續看。

PBE算法(Password Based Encryption,基于口令(密碼)的加密)是一種基于口令的加密算法,其特點在于口令是由用戶自己掌握,在加上隨機數多重加密等方法保證數據的安全性。

PBE算法本質上并沒有真正構建新的加密、解密算法,而是對我們已知的算法做了包裝。比如:常用的消息摘要算法MD5和SHA算法,對稱加密算法DES、RC2等,而PBE算法就是將這些算法進行合理組合,這也呼應上前邊算法的名字。

既然PBE算法使用我們較為常用的對稱加密算法,那就會涉及密鑰的問題。但它本身又沒有鑰的概念,只有口令密碼,密鑰則是口令經過加密算法計算得來的。

口令本身并不會很長,所以不能用來替代密鑰,只用口令很容易通過窮舉攻擊方式破譯,這時候就得加點鹽了。

鹽通常會是一些隨機信息,比如隨機數、時間戳,將鹽附加在口令上,通過算法計算加大破譯的難度。

源碼里的貓膩

簡單了解PBE算法,回過頭看看Jasypt源碼是如何實現加解密的。

在加密的時候首先實例化秘鑰工廠SecretKeyFactory,生成八位鹽值,默認使用的jasypt.encryptor.RandomSaltGenerator生成器。

  1. public byte[] encrypt(byte[] message) { 
  2.     // 根據指定算法,初始化秘鑰工廠 
  3.     final SecretKeyFactory factory = SecretKeyFactory.getInstance(algorithm1); 
  4.     // 鹽值生成器,只選八位 
  5.     byte[] salt = saltGenerator.generateSalt(8); 
  6.     //  
  7.     final PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt, iterations); 
  8.     // 鹽值、口令生成秘鑰 
  9.     SecretKey key = factory.generateSecret(keySpec); 
  10.  
  11.     // 構建加密器 
  12.     final Cipher cipherEncrypt = Cipher.getInstance(algorithm1); 
  13.     cipherEncrypt.init(Cipher.ENCRYPT_MODE, key); 
  14.     // 密文頭部(鹽值) 
  15.     byte[] params = cipherEncrypt.getParameters().getEncoded(); 
  16.  
  17.     // 調用底層實現加密 
  18.     byte[] encryptedMessage = cipherEncrypt.doFinal(message); 
  19.  
  20.     // 組裝最終密文內容并分配內存(鹽值+密文) 
  21.     return ByteBuffer 
  22.             .allocate(1 + params.length + encryptedMessage.length) 
  23.             .put((byte) params.length) 
  24.             .put(params) 
  25.             .put(encryptedMessage) 
  26.             .array(); 

由于默認使用的是隨機鹽值生成器,導致相同內容每次加密后的內容都是不同的。

那么解密時該怎么對應上呢?

看上邊的源碼發現,最終的加密文本是由兩部分組成的,params消息頭里邊包含口令和隨機生成的鹽值,encryptedMessage密文。

加密

而在解密時會根據密文encryptedMessage的內容拆解出params內容解析出鹽值和口令,在調用JDK底層算法解密出實際內容。

  1. @Override 
  2. @SneakyThrows 
  3. public byte[] decrypt(byte[] encryptedMessage) { 
  4.     // 獲取密文頭部內容 
  5.     int paramsLength = Byte.toUnsignedInt(encryptedMessage[0]); 
  6.     // 獲取密文內容 
  7.     int messageLength = encryptedMessage.length - paramsLength - 1; 
  8.     byte[] params = new byte[paramsLength]; 
  9.     byte[] message = new byte[messageLength]; 
  10.     System.arraycopy(encryptedMessage, 1, params, 0, paramsLength); 
  11.     System.arraycopy(encryptedMessage, paramsLength + 1, message, 0, messageLength); 
  12.  
  13.     // 初始化秘鑰工廠 
  14.     final SecretKeyFactory factory = SecretKeyFactory.getInstance(algorithm1); 
  15.     final PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray()); 
  16.     SecretKey key = factory.generateSecret(keySpec); 
  17.  
  18.     // 構建頭部鹽值口令參數 
  19.     AlgorithmParameters algorithmParameters = AlgorithmParameters.getInstance(algorithm1); 
  20.     algorithmParameters.init(params); 
  21.  
  22.     // 構建加密器,調用底層算法 
  23.     final Cipher cipherDecrypt = Cipher.getInstance(algorithm1); 
  24.     cipherDecrypt.init( 
  25.             Cipher.DECRYPT_MODE, 
  26.             key
  27.             algorithmParameters 
  28.     ); 
  29.     return cipherDecrypt.doFinal(message); 

解密

 

責任編輯:武曉燕 來源: 程序員內點事
相關推薦

2024-02-05 13:39:00

隱私數據脫敏

2022-06-23 08:42:08

配置加密解密

2016-11-22 09:40:08

2021-04-01 10:23:45

SpringBootbootstrapapplication

2011-01-19 14:00:21

2011-01-13 16:27:26

Linux配置文件

2010-12-28 16:35:32

Outlook 配置文

2022-08-17 07:06:14

SpringBoot配置@Value

2022-09-23 07:33:04

Springzookeeper配置

2010-12-27 14:59:31

Outlook 配置文

2011-03-28 15:52:16

Nagios配置文件

2011-03-03 09:14:38

PureFTPd

2011-04-01 16:30:49

Nagios

2009-07-09 15:55:18

WebWork配置文件

2011-03-28 09:07:26

Nagios配置文件

2011-03-25 17:13:37

Nagios配置文件

2011-01-21 15:08:45

Sendmail

2009-06-17 14:10:30

Spring配置文件

2010-05-05 16:14:09

Unix管理

2011-02-25 16:39:34

proftpd配置文件
點贊
收藏

51CTO技術棧公眾號

久久成人综合视频| 欧美日韩亚洲综合在线| 精品欧美一区二区三区久久久| 日本亚洲欧美在线| 久久99视频| 欧美精品久久99久久在免费线| 蜜臀av.com| 四虎电影院在线观看| 日韩电影免费在线看| 乱亲女秽乱长久久久| 亚洲精品影视在线观看| 17c丨国产丨精品视频| 久久精品色图| 国产精品456露脸| 日本亚洲欧洲色α| 欧美极品aaaaabbbbb| 国产99亚洲| 欧美大胆人体bbbb| 天天操,天天操| 午夜影院在线观看国产主播| 中文字幕欧美三区| 国产chinese精品一区二区| www.国产毛片| 9久re热视频在线精品| 色七七影院综合| 精品少妇一区二区三区免费观| 国产精品国产亚洲精品| 日本韩国一区二区三区视频| 国产a级片网站| 成人在线播放免费观看| 国产视频不卡一区| 久久精品人成| 女人18毛片水真多18精品| 精品影视av免费| 国产精品免费看久久久香蕉| 日韩黄色一级大片| 国产精品a久久久久| 中文字幕日韩欧美| 在线观看福利片| 日韩欧美国产大片| 欧美成人艳星乳罩| 日韩在线观看免费全| 超碰成人在线播放| 日本成人福利| 91黄色免费版| 密臀av一区二区三区| 僵尸再翻生在线观看| 亚洲图片自拍偷拍| 国产曰肥老太婆无遮挡| 免费在线观看av电影| 一区二区在线观看视频| 超碰在线免费观看97| 日韩av中文| 亚洲色图视频网| 国产成年人在线观看| 日本在线人成| 亚洲欧美日韩国产综合在线| 自拍视频一区二区三区| 亚洲麻豆精品| 亚洲欧美日本韩国| 无码熟妇人妻av在线电影| av免费在线免费| 一二三四社区欧美黄| 97中文字幕在线| 最新黄网在线观看| 亚洲一区日韩精品中文字幕| 男女激情免费视频| 成人在线高清免费| 欧美午夜性色大片在线观看| 毛葺葺老太做受视频| 福利一区二区| 日韩午夜在线观看视频| 日本美女视频网站| 思热99re视热频这里只精品| 国产亚洲欧美日韩精品| 亚洲精品国产精品乱码在线观看| 香港欧美日韩三级黄色一级电影网站| 久久天天躁夜夜躁狠狠躁2022| 国产在线一卡二卡| 亚洲美女网站| 日韩**中文字幕毛片| 一区两区小视频| 国产乱码字幕精品高清av| 国产伦精品一区二区三区照片| 神马久久精品| 亚洲婷婷在线视频| 国产人妻777人伦精品hd| 天天免费亚洲黑人免费| 欧美精品在线一区二区三区| 无码人妻丰满熟妇区毛片蜜桃精品 | 久久99久国产精品黄毛片入口| 久久精品久久国产| 美女脱光内衣内裤视频久久网站| 91中文精品字幕在线视频| 人妻与黑人一区二区三区| 久久精品夜夜夜夜久久| 99热这里只有精品7| 欧美aa在线| 91麻豆精品国产自产在线观看一区| www男人天堂| 日本不卡免费一区| 久久久久久美女| 最近中文字幕av| 国产成人精品亚洲777人妖| 久久精品欧美| 日韩伦理电影网站| 欧美三电影在线| 三级视频网站在线观看| 四季av在线一区二区三区| 久久久免费在线观看| 在线观看日批视频| 91天堂素人约啪| 黄黄视频在线观看| 成人网ww555视频免费看| 亚洲精品一区二区三区99| 欧美88888| 天堂资源在线中文精品| 国产福利久久精品| 国产激情在线| 欧美日韩国产成人在线91| 91视频啊啊啊| 亚洲天堂偷拍| 99re视频在线| 大片免费在线看视频| 欧洲激情一区二区| 亚洲午夜福利在线观看| 亚洲日韩成人| 成人免费在线一区二区三区| 国内精品久久久久久野外| 91官网在线观看| 亚洲午夜福利在线观看| 国产精品综合色区在线观看| 国产精品二区三区| 免费毛片在线看片免费丝瓜视频 | 成人精品在线播放| 亚洲视频你懂的| 波多野结衣xxxx| av一区二区在线观看| 欧洲一区二区视频| 天堂成人在线| 欧美日韩中文字幕在线| 日韩av无码一区二区三区不卡| 国产在线成人| 国产精品成人一区二区三区| 男女羞羞视频在线观看| 精品日韩一区二区三区免费视频| 欧美人禽zoz0强交| 国产精品123| 黑人巨茎大战欧美白妇| 国产精品久久久久久久久久久久久久久| 中文字幕日韩av电影| 中文字幕第三页| 国产精品久久久一区麻豆最新章节| 亚洲成人福利在线观看| 欧美天天综合| 成人在线视频福利| 成年人黄视频在线观看| 日韩一级片网址| 久草中文在线视频| 99久久综合99久久综合网站| 国产精品无码人妻一区二区在线| 久9re热视频这里只有精品| 久久久亚洲成人| 视频国产在线观看| 欧美日韩视频在线一区二区| chinese全程对白| 国产精品 欧美精品| 日韩亚洲欧美视频| 在线日韩网站| 91精品视频在线播放| a级在线观看| 亚洲电影免费观看高清完整版在线观看| 日韩特黄一级片| 久久精品人人做| 亚洲第一色av| 99综合视频| 一本色道久久综合亚洲二区三区| 国产精品一级在线观看| 韩国精品久久久999| 牛牛澡牛牛爽一区二区| 欧美男男青年gay1069videost| 日韩欧美国产成人精品免费| 成人精品电影在线观看| 精品久久久久av| 最新精品国产| 欧美国产二区| 欧州一区二区三区| 欧美一级片在线播放| 日韩在线资源| 国产视频一区在线| 国产乱叫456在线| 高潮白浆女日韩av免费看| 女教师淫辱の教室蜜臀av软件| 国产suv精品一区二区6| 成人性做爰aaa片免费看不忠| 91综合久久一区二区| 国产自产精品| av日韩一区| 日本精品视频在线| 最新国产在线拍揄自揄视频| 亚洲日韩欧美视频一区| 国产成人a人亚洲精品无码| 欧美性猛交xxxx黑人猛交| 999精品视频在线观看播放| 97精品久久久久中文字幕| 五月天av在线播放| 亚洲永久免费精品| www.夜夜爱| 亚洲女同另类| 亚洲不卡一卡2卡三卡4卡5卡精品| 国产精品美女久久久久人| 8x海外华人永久免费日韩内陆视频| 欧美r级在线| 亚洲无限av看| 亚洲欧美一区二区三| 日韩亚洲欧美高清| 91成品人影院| 欧美在线不卡视频| 欧美三日本三级少妇99| 亚洲另类春色国产| 国产传媒视频在线| 久久久久久久久久久久久久久99| 挪威xxxx性hd极品| 国产一区啦啦啦在线观看| 91激情视频在线| 亚洲一区欧美二区| 玩弄中年熟妇正在播放| 中文字幕日韩一区二区不卡| 亚洲日本理论电影| 成人羞羞网站入口免费| 老牛影视免费一区二区| 久久激情av| 国产专区一区二区| 国产毛片精品| 国产日本一区二区三区| 一区二区三区国产好| 成人午夜高潮视频| 亚洲国产aⅴ精品一区二区三区| 国产福利精品视频| 三上悠亚激情av一区二区三区 | 久久av中文字幕| 拍真实国产伦偷精品| 一区二区福利视频| bbbbbbbbbbb在线视频| 国产一区二区三区18| 国产视频福利在线| 国产亚洲视频中文字幕视频| 黄色av免费在线观看| 亚洲午夜未删减在线观看| 黄色视屏网站在线免费观看| 亚洲性xxxx| 婷婷激情在线| 久久国产精品影片| 四虎av在线| 久久久久久亚洲精品不卡| av丝袜在线| 青草热久免费精品视频| 日本欧美韩国| 国产美女久久久| 激情综合五月| 高清国产在线一区| 日本欧美韩国国产| 性欧美精品一区二区三区在线播放 | 精品伊人久久久久7777人| 免费国偷自产拍精品视频| 国产69精品久久久久777| aaa黄色大片| 久久网这里都是精品| 国产伦理片在线观看| 中文字幕一区二区日韩精品绯色| 亚洲综合视频网站| 亚洲自拍偷拍九九九| 色播视频在线播放| 欧美午夜在线一二页| 国产美女精品视频国产| 欧美不卡在线视频| 国模精品一区二区| 久久九九热免费视频| a级大胆欧美人体大胆666| 国产999在线观看| www久久久| 久久大片网站| 国产精品久久久久久麻豆一区软件 | 日韩av福利| 亚洲精品欧美日韩专区| 日韩电影不卡一区| www亚洲国产| 国产精品综合色区在线观看| 污污的网站免费| 99在线精品视频| 一二三四在线观看视频| 亚洲国产日韩a在线播放 | 日韩精品一区在线观看| 男人天堂综合| 欧美理论片在线观看| 都市激情亚洲综合| 97超级在线观看免费高清完整版电视剧| 久久99偷拍| 日本一区二区三区四区五区六区| 午夜亚洲影视| 成人欧美精品一区二区| 国产欧美一区二区精品性色超碰 | 欧美性猛交丰臀xxxxx网站| ,一级淫片a看免费| 日韩精品中文字| 在线欧美三级| 国产精品丝袜高跟| 美国成人xxx| 国内自拍中文字幕| 麻豆精品一区二区三区| 激情综合丁香五月| 亚洲综合色在线| 一区二区美女视频| 亚洲欧美日韩精品久久亚洲区| 国产在线xxx| 亚洲自拍小视频| 日韩免费在线| 五月婷婷狠狠操| 久久精品一区二区三区av| 日韩欧美一区二区一幕| 欧美一区二区三区精品| 在线观看免费黄色| 国产精品海角社区在线观看| 老司机凹凸av亚洲导航| 日韩免费在线观看av| 国产综合色精品一区二区三区| www亚洲色图| 在线精品亚洲一区二区不卡| 先锋av资源站| 91精品国产高清久久久久久91| 999久久精品| 喜爱夜蒲2在线| 国产精品1区2区3区| 成人高潮免费视频| 欧美一级淫片007| 在线观看av免费| 99热国产免费| 国产精品hd| youjizz.com国产| 亚洲va欧美va天堂v国产综合| 狠狠躁日日躁夜夜躁av| 欧美成人免费一级人片100| 91成人福利社区| 亚洲第一综合网站| 国产一区二区不卡在线| 国产精品 欧美激情| 日韩一区二区在线看| 超碰在线caoporn| 亚洲在线免费观看| 国产一区二区三区自拍| 国产午夜在线一区二区三区| 亚洲一二三级电影| 午夜在线视频免费| 国产精品91在线| 日韩综合网站| 中文字幕在线视频一区二区| 亚洲综合视频网| 亚洲欧美日韩综合在线| 国产精品久久久久高潮| 日韩一区二区在线| 欧美在线a视频| 亚洲一区二区三区视频在线播放 | 亚洲av色香蕉一区二区三区| 欧美精品video| 天堂网av成人| 国产一区二区在线免费播放| 亚洲欧美综合在线精品| 亚洲av无码乱码国产精品| 午夜精品久久久99热福利| 久久av超碰| 亚洲精品视频三区| 亚洲国产综合在线| 国产中文字幕在线观看| 成人激情在线播放| 亚洲二区视频| 欧美人与禽zoz0善交| 欧美一激情一区二区三区| 国产福利电影在线播放| 日韩理论片在线观看| 国产一区二区三区四| 日韩精品久久久久久久酒店| 亚洲欧美日韩天堂| 超碰国产精品一区二页| 91九色丨porny丨国产jk| 国产农村妇女精品| 亚洲精品第五页| 国产成人精品久久二区二区| 在线观看国产精品入口| 国产三级视频网站| 91精品国产乱码| 欧美日韩大片| 成年人视频网站免费| 国产欧美精品一区二区色综合| 国产99对白在线播放| 国产99久久精品一区二区永久免费 | 国产高潮呻吟久久| 欧美电影精品一区二区| 国产成人免费9x9x人网站视频| 日韩人妻一区二区三区蜜桃视频| 久久亚洲影视婷婷|