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

在Asp.NET Core中如何優(yōu)雅的管理用戶機(jī)密數(shù)據(jù)

開發(fā) 架構(gòu)
在早期VB/VB.NET時(shí)代,經(jīng)常使用.ini文件來進(jìn)行配置管理;而在.NET FX開發(fā)中,我們則傾向于使用web.config文件,通過配置appsetting的配置節(jié)來處理;而在.NET Core開發(fā)中,我們有了新的基于json格式的appsetting.json文件。

[[428220]]

本文轉(zhuǎn)載自微信公眾號(hào)「DotNET技術(shù)圈」,作者鄒溪源。轉(zhuǎn)載本文請(qǐng)聯(lián)系DotNET技術(shù)圈公眾號(hào)。

背景

回顧

在軟件開發(fā)過程中,使用配置文件來管理某些對(duì)應(yīng)用程序運(yùn)行中需要使用的參數(shù)是常見的作法。

在早期VB/VB.NET時(shí)代,經(jīng)常使用.ini文件來進(jìn)行配置管理;而在.NET FX開發(fā)中,我們則傾向于使用web.config文件,通過配置appsetting的配置節(jié)來處理;而在.NET Core開發(fā)中,我們有了新的基于json格式的appsetting.json文件。

無論采用哪種方式,其實(shí)配置管理從來都是一件看起來簡單,但影響非常深遠(yuǎn)的基礎(chǔ)性工作。尤其是配置的安全性,貫穿應(yīng)用程序的始終,如果沒能做好安全性問題,極有可能會(huì)給系統(tǒng)帶來不可控的風(fēng)向。

源代碼比配置文件安全么?

有人以為把配置存放在源代碼中,可能比存放在明文的配置文件中似乎更安全,其實(shí)是“皇帝的新裝”。

在前不久,筆者的一位朋友就跟我說了一段故事:他說一位同事在離職后,直接將曾經(jīng)寫過的一段代碼上傳到github的公共倉庫,而這段代碼中包含了某些涉及到原企業(yè)的機(jī)密數(shù)據(jù),還好被github的安全機(jī)制提前發(fā)現(xiàn)而及時(shí)終止了該行為,否則后果不堪設(shè)想。

于是,筆者順手查了一下由于有意或無意泄露企業(yè)機(jī)密,造成企業(yè)損失的案例,發(fā)現(xiàn)還真不少。例如大疆前員工通過 Github 泄露公司源代碼,被罰 20 萬、獲刑半年[1] 這起案件,也是一個(gè)典型的案例。

該員工離職后,將包含關(guān)鍵配置信息的源代碼上傳到github的公共倉庫,被黑客利用,使得大量用戶私人數(shù)據(jù)被黑客獲取,該前員工最終被刑拘。

大疆前員工通過Github泄露公司源代碼,被罰20萬、獲刑半年

圖片來源: http://www.digitalmunition.com/WhyIWalkedFrom3k.pdf[2]

大部分IT公司都會(huì)在入職前進(jìn)行背景調(diào)查,而一旦有案底,可能就已經(jīng)與許多IT公司無緣;即便是成為創(chuàng)業(yè)者,也可能面臨無法跟很多正規(guī)企業(yè)合作的問題。

小結(jié)

所以,安全性問題不容小覷,哪怕時(shí)間再忙,也不要急匆匆的就將數(shù)據(jù)庫連接字符串或其他包含敏感信息的內(nèi)容輕易的記錄在源代碼或配置文件中。在這個(gè)點(diǎn)上,一旦出現(xiàn)問題,往往都是非常嚴(yán)重的問題。

如何實(shí)現(xiàn)

在.NET FX時(shí)代,我們可以使用對(duì)web.config文件的關(guān)鍵配置節(jié)進(jìn)行加密的方式,來保護(hù)我們的敏感信息,在.NET Core中,自然也有這些東西,接下來我將簡述在開發(fā)環(huán)境和生產(chǎn)環(huán)境下不同的配置加密手段,希望能夠給讀者帶來啟迪。

開發(fā)環(huán)境

在開發(fā)環(huán)境下,我們可以使用visual studio 工具提供的用戶機(jī)密管理器,只需0行代碼,即可輕松完成關(guān)鍵配置節(jié)的處理。

機(jī)密管理器概述

根據(jù)微軟官方文檔[3] 的描述:

ASP.NET Core 機(jī)密管理器[4]工具提供了開發(fā)過程中在源代碼外部保存機(jī)密的另一種方法 。若要使用機(jī)密管理器工具,請(qǐng)?jiān)陧?xiàng)目文件中安裝包 Microsoft.Extensions.Configuration.SecretManager 。如果該依賴項(xiàng)存在并且已還原,則可以使用 dotnet user-secrets 命令來通過命令行設(shè)置機(jī)密的值。這些機(jī)密將存儲(chǔ)在用戶配置文件目錄中的 JSON 文件中(詳細(xì)信息隨操作系統(tǒng)而異),與源代碼無關(guān)。

機(jī)密管理器工具設(shè)置的機(jī)密是由使用機(jī)密的項(xiàng)目的 UserSecretsId 屬性組織的。因此,必須確保在項(xiàng)目文件中設(shè)置 UserSecretsId 屬性,如下面的代碼片段所示。默認(rèn)值是 Visual Studio 分配的 GUID,但實(shí)際字符串并不重要,只要它在計(jì)算機(jī)中是唯一的。

  1. <PropertyGroup> 
  2.    <UserSecretsId>UniqueIdentifyingString</UserSecretsId> 
  3. </PropertyGroup>  

 

Secret Manager工具允許開發(fā)人員在開發(fā)ASP.NET Core應(yīng)用程序期間存儲(chǔ)和檢索敏感數(shù)據(jù)。敏感數(shù)據(jù)存儲(chǔ)在與應(yīng)用程序源代碼不同的位置。

由于Secret Manager將秘密與源代碼分開存儲(chǔ),因此敏感數(shù)據(jù)不會(huì)提交到源代碼存儲(chǔ)庫。但機(jī)密管理器不會(huì)對(duì)存儲(chǔ)的敏感數(shù)據(jù)進(jìn)行加密,因此不應(yīng)將其視為可信存儲(chǔ)。

敏感數(shù)據(jù)作為鍵值對(duì)存儲(chǔ)在JSON文件中。最好不要在開發(fā)和測試環(huán)境中使用生產(chǎn)機(jī)密。查看引文[5]。

存放位置

在windows平臺(tái)下,機(jī)密數(shù)據(jù)的存放位置為:

  1. %APPDATA%\Microsoft\UserSecrets\\secrets.json 

而在Linux/MacOs平臺(tái)下,機(jī)密數(shù)據(jù)的存放位置為:

  1. ~/.microsoft/usersecrets/<user_secrets_id>/secrets.json 

在前面的文件路徑中, `user_secrets_id`將替換UserSecretsId為.csproj

文件中指定的值。

在Windows環(huán)境下使用機(jī)密管理器

在windows下,如果使用Visual Studio2019作為主力開發(fā)環(huán)境,只需在項(xiàng)目右鍵單擊,選擇菜單【管理用戶機(jī)密】,即可添加用戶機(jī)密數(shù)據(jù)。

在管理用戶機(jī)密數(shù)據(jù)中,添加的配置信息和傳統(tǒng)的配置信息沒有任何區(qū)別。

  1. "ConnectionStrings": { "Default""Server=xxx;Database=xxx;User ID=xxx;Password=xxx;" } } 

我們同樣也可以使用IConfiguration的方式、IOptions的方式,進(jìn)行配置的訪問。

在非Windows/非Visual Studio環(huán)境下使用機(jī)密管理器

完成安裝dotnet-cli后,在控制臺(tái)輸入

  1. dotnet user-secrets init 

前面的命令將在UserSecretsId .csproj 文件的PropertyGroup中添加

.csproj

一個(gè)元素。 UserSecretsId是對(duì)項(xiàng)目是唯一的Guid值。

  1. <PropertyGroup>   
  2.      <TargetFramework>netcoreapp3.1</TargetFramework> 
  3.     <UserSecretsId>79a3edd0-2092-40a2-a04d-dcb46d5ca9ed</UserSecretsId>  
  4.  </PropertyGroup>  

 

設(shè)置機(jī)密

  1. dotnet user-secrets set "Movies:ServiceApiKey" "12345"  

列出機(jī)密

  1. dotnet user-secrets list 

刪除機(jī)密

  1. dotnet user-secrets remove "Movies:ConnectionString"  

清除所有機(jī)密

  1. dotnet user-secrets clear 

生產(chǎn)環(huán)境

機(jī)密管理器為開發(fā)者在開發(fā)環(huán)境下提供了一種保留機(jī)密數(shù)據(jù)的方法,但在開發(fā)環(huán)境下是不建議使用的,如果想在生產(chǎn)環(huán)境下,對(duì)機(jī)密數(shù)據(jù)進(jìn)行保存該怎么辦?

按照微軟官方文檔的說法,推薦使用Azure Key Vault [6] 來保護(hù)機(jī)密數(shù)據(jù),但。。我不是貴云的用戶(當(dāng)然,買不起貴云不是貴云太貴,而是我個(gè)人的問題[手動(dòng)狗頭]圖片圖片)。

其次,與Azure Key Valut類似的套件,例如其他云,差不多都有,所以都可以為我們所用。

但。。如果您如果跟我一樣,不想通過第三方依賴的形式來解決這個(gè)問題,那不如就用最簡單的辦法,例如AES加密。

使用AES加密配置節(jié)

該方法與平時(shí)使用AES對(duì)字符串進(jìn)行加密和解密的方法并無區(qū)別,此處從略。

使用數(shù)據(jù)保護(hù)Api(DataProtect Api實(shí)現(xiàn))

在平時(shí)開發(fā)過程中,能夠動(dòng)手?jǐn)]AES加密是一種非常好的習(xí)慣,而微軟官方提供的數(shù)據(jù)保護(hù)API則將這個(gè)過程進(jìn)一步簡化,只需調(diào)Api即可完成相應(yīng)的數(shù)據(jù)加密操作。

關(guān)于數(shù)據(jù)保護(hù)api, Savorboard[7] 大佬曾經(jīng)寫過3篇博客討論這個(gè)技術(shù)問題,大家可以參考下面的文章來獲取信息。

(接下來我要貼代碼了,如果沒興趣,請(qǐng)出門左拐,代碼不能完整運(yùn)行,查看代碼來源[11])

首先,注入配置項(xiàng)

  1. public static IServiceCollection AddProtectedConfiguration(this IServiceCollection services, string directory) 
  2.         { 
  3.             services 
  4.                 .AddDataProtection() 
  5.                 .PersistKeysToFileSystem(new DirectoryInfo(directory)) 
  6.                 .UseCustomCryptographicAlgorithms(new ManagedAuthenticatedEncryptorConfiguration 
  7.                 { 
  8.                     EncryptionAlgorithmType = typeof(Aes), 
  9.                     EncryptionAlgorithmKeySize = 256, 
  10.                     ValidationAlgorithmType = typeof(HMACSHA256) 
  11.                 }); 
  12.             ; 
  13.  
  14.             return services; 
  15.         } 

其次,實(shí)現(xiàn)對(duì)配置節(jié)的加/解密。(使用AES算法的數(shù)據(jù)保護(hù)機(jī)制)

  1. public class ProtectedConfigurationSection : IConfigurationSection 
  2.     { 
  3.         private readonly IDataProtectionProvider _dataProtectionProvider; 
  4.         private readonly IConfigurationSection _section; 
  5.         private readonly Lazy<IDataProtector> _protector; 
  6.  
  7.         public ProtectedConfigurationSection( 
  8.             IDataProtectionProvider dataProtectionProvider, 
  9.             IConfigurationSection section
  10.         { 
  11.             _dataProtectionProvider = dataProtectionProvider; 
  12.             _section = section
  13.  
  14.             _protector = new Lazy<IDataProtector>(() => dataProtectionProvider.CreateProtector(section.Path)); 
  15.         } 
  16.  
  17.         public IConfigurationSection GetSection(string key
  18.         { 
  19.             return new ProtectedConfigurationSection(_dataProtectionProvider, _section.GetSection(key)); 
  20.         } 
  21.  
  22.         public IEnumerable<IConfigurationSection> GetChildren() 
  23.         { 
  24.             return _section.GetChildren() 
  25.                 .Select(x => new ProtectedConfigurationSection(_dataProtectionProvider, x)); 
  26.         } 
  27.  
  28.         public IChangeToken GetReloadToken() 
  29.         { 
  30.             return _section.GetReloadToken(); 
  31.         } 
  32.  
  33.         public string this[string key
  34.         { 
  35.             get => GetProtectedValue(_section[key]); 
  36.             set => _section[key] = _protector.Value.Protect(value); 
  37.         } 
  38.  
  39.         public string Key => _section.Key
  40.         public string Path => _section.Path; 
  41.  
  42.         public string Value 
  43.         { 
  44.             get => GetProtectedValue(_section.Value); 
  45.             set => _section.Value = _protector.Value.Protect(value); 
  46.         } 
  47.  
  48.         private string GetProtectedValue(string value) 
  49.         { 
  50.             if (value == null
  51.                 return null
  52.  
  53.             return _protector.Value.Unprotect(value); 
  54.         } 
  55.     } 

再次,在使用前,先將待加密的字符串轉(zhuǎn)換成BASE64純文本,然后再使用數(shù)據(jù)保護(hù)API對(duì)數(shù)據(jù)進(jìn)行處理,得到處理后的字符串。

  1. private readonly IDataProtectionProvider _dataProtectorTokenProvider; 
  2. public TokenAuthController( IDataProtectionProvider dataProtectorTokenProvider) 
  3. [Route("encrypt"), HttpGet, HttpPost] 
  4. public string Encrypt(string section, string value) 
  5.      var protector = _dataProtectorTokenProvider.CreateProtector(section); 
  6.      return protector.Protect(value); 

再替換配置文件中的對(duì)應(yīng)內(nèi)容。

  1.   "ConnectionStrings": { 
  2.     "Default""此處是加密后的字符串" 
  3.   } 

然后我們就可以按照平時(shí)獲取IOptions的方式來獲取了。

問題

公眾號(hào)【DotNET騷操作】號(hào)主【周杰】同學(xué)提出以下觀點(diǎn):

1、在生產(chǎn)環(huán)境下,使用AES加密,其實(shí)依然是一種不夠安全的行為,充其量也就能忽悠下產(chǎn)品經(jīng)理,畢竟幾條簡單的語句,就能把機(jī)密數(shù)據(jù)dump出來。

也許在這種情況下,我們應(yīng)該優(yōu)先考慮accessKeyId/accessSecret,盡量通過設(shè)置多級(jí)子賬號(hào),通過授權(quán)Api的機(jī)制來管理機(jī)密數(shù)據(jù),而不是直接暴露類似于數(shù)據(jù)庫連接字符串這樣的關(guān)鍵配置信息。另外,應(yīng)該定期更換數(shù)據(jù)庫的密碼,盡量將類似的問題可能造成的風(fēng)險(xiǎn)降到最低。數(shù)據(jù)保護(hù)api也提供的類似的機(jī)制,使得開發(fā)者能夠輕松的管理機(jī)密數(shù)據(jù)的時(shí)效性問題。

2、配置文件放到CI/CD中,發(fā)布的時(shí)候在CI/CD中進(jìn)行組裝,然后運(yùn)維只是負(fù)責(zé)管理CI/CD的賬戶信息,而最高機(jī)密數(shù)據(jù),則由其他人負(fù)責(zé)配置。

嗯,我完全同意他的第二種做法,另外考慮到由于運(yùn)維同樣有可能會(huì)有意無意泄露機(jī)密數(shù)據(jù),所以如果再給運(yùn)維配備一本《刑法》,并讓他日常補(bǔ)習(xí)【侵犯商業(yè)秘密罪】相關(guān)條款,這個(gè)流程就更加閉環(huán)了。

結(jié)語

本文簡述了在.NET Core中,如何在開發(fā)環(huán)境下使用用戶機(jī)密管理器、在生產(chǎn)環(huán)境下使用AES+IDataProvider的方式來保護(hù)我們的用戶敏感數(shù)據(jù)。由于時(shí)間倉促,如有考慮不周之處,還請(qǐng)各位大佬批評(píng)指正。

References

[1] 大疆前員工通過 Github 泄露公司源代碼,被罰 20 萬、獲刑半年: https://www.infoq.cn/article/RZzfel1m6-h8pSK8TTC9

[2]http://www.digitalmunition.com/WhyIWalkedFrom3k.pdf: http://www.digitalmunition.com/WhyIWalkedFrom3k.pdf

[3] 微軟官方文檔: https://docs.microsoft.com/zh-cn/dotnet/architecture/microservices/secure-net-microservices-web-applications/developer-app-secrets-storage

[4] 機(jī)密管理器: https://docs.microsoft.com/zh-cn/aspnet/core/security/app-secrets#secret-manager

[5] 查看引文: https://nvisium.com/blog/2019/05/02/Dev-Secrets-and-the-ASP-NET-Core-Secret-Manager.html

[6] Azure Key Vault : https://docs.microsoft.com/zh-cn/dotnet/architecture/microservices/secure-net-microservices-web-applications/azure-key-vault-protects-secrets

[7] Savorboard: https://home.cnblogs.com/u/savorboard/

[8] ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection 集群場景)【上】: https://www.cnblogs.com/savorboard/p/dotnetcore-data-protection.html

[9] ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection 集群場景)【中】: https://www.cnblogs.com/savorboard/p/dotnet-core-data-protection.html

[10] ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection 集群場景)【下】: https://www.cnblogs.com/savorboard/p/dotnetcore-data-protected-farm.html

[11] 查看代碼: https://stackoverflow.com/questions/36062670/encrypted-configuration-in-asp-net-core

 

本文首發(fā)于溪源的個(gè)人博客:https://www.techq.xyz/2020/06/09/%E6%8A%80%E6%9C%AF/how-to-manage-user-secret-in-develop-and-production/

 

責(zé)任編輯:武曉燕 來源: DotNET技術(shù)圈
相關(guān)推薦

2024-05-21 08:14:59

代碼接口依賴注入

2024-08-12 08:15:46

2021-01-13 07:33:41

API數(shù)據(jù)安全

2021-02-19 06:54:33

配置系統(tǒng)ASP.NET Cor

2024-07-01 00:00:06

ASP.NET開源

2021-03-04 11:10:29

容器化Docker虛擬機(jī)

2021-01-11 05:20:05

Controller代碼數(shù)據(jù)層

2019-08-12 08:00:00

ASP.NetASP.Net Cor編程語言

2009-08-04 13:38:36

ASP.NET用戶控件

2024-07-02 08:45:08

2021-01-15 05:38:28

ASPHttp端口

2009-07-31 09:00:44

ASP.NET生成隨機(jī)

2024-09-24 17:34:05

2021-01-05 07:51:06

版本化ASP

2021-01-31 22:56:50

FromServiceASP

2021-02-28 20:56:37

NCache緩存框架

2021-02-03 13:35:25

ASPweb程序

2021-03-10 09:40:43

LamarASP容器

2021-01-07 07:39:07

工具接口 Swagger

2021-01-28 22:39:35

LoggerMessa開源框架
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

精品久久久久久久久久中文字幕| 国产成人无吗| 青青草视频网站| 看欧美日韩国产| 亚洲欧美日韩天堂一区二区| 国产精品国产三级国产普通话99 | 黑人巨大亚洲一区二区久 | 国产一区不卡精品| av成人资源网| 欧美天天影院| 69成人免费视频| 天天干在线影院| 精品国产乱码久久久久久蜜柚| 亚洲日本成人网| 亚洲曰韩产成在线| 久久九九99| 国产精品国产| 免费观看在线黄色网| 免费一级a毛片| 亚洲狠狠婷婷综合久久久久图片| 我的公把我弄高潮了视频| 99久久精品久久久久久ai换脸| 亚洲福利视频久久| 国产女主播视频一区二区| 国产精品二区不卡| 欧亚一区二区| 欧美综合视频在线| 欧美精品久久久久久久久46p| 成人综合久久网| 黄色一级片黄色| 成人中心免费视频| 久久国产精品久久久久久| 成人av片网址| 亚洲精品美女久久久久| k8久久久一区二区三区| 精品一区二区三区在线| 国产亚av手机在线观看| 一本色道久久综合精品婷婷| 自拍偷拍亚洲天堂| 五月天开心婷婷| 中文字幕乱码免费| 91美女片黄在线观| 欧美成人一区二区三区片免费 | 奴色虐av一区二区三区| www.17c.com喷水少妇| 8x8x最新地址| 热久久最新网址| 狠狠久久综合婷婷不卡| 最近免费中文字幕视频2019| 色综合中文字幕| 国产亚洲一区二区三区四区| 精品一区二区在线看| 亚洲看片一区| 全球成人免费直播| 国产精品探花在线| 国产精品毛片一区二区三区四区| 久久久午夜影院| 久久久久无码精品国产sm果冻 | yy6080午夜| 亚洲AV无码成人精品一区| 欧美资源在线观看| 在线视频精品一| 欧美一级爆毛片| 色综合久久天天| 亚洲人成人一区二区在线观看| 成人国产在线观看| 噜噜噜躁狠狠躁狠狠精品视频 | 国产探花在线视频| 免费国偷自产拍精品视频| 亚洲乱码中文字幕久久孕妇黑人| 亚洲巨乳在线观看| 五月天国产一区| 精品国产乱码久久久久| 爱情岛论坛亚洲入口| 国产精品白嫩初高中害羞小美女 | 国产欧美中文字幕| 欧美激情视频一区二区三区不卡| 亚洲精品一二区| 亚洲欧美日韩在线一区| 精品国产免费一区二区三区四区| 在线成人av网站| 精品久久久久久久久久国产| 国产精品国产自产拍高清av王其 | 日韩美女在线看| 日本人成精品视频在线| 欧美日韩999| 久久久综合av| 日本sm极度另类视频| 91精品国产高清自在线看超| 欧美日韩成人精品| 亚洲精品小视频在线观看| 日韩的一区二区| 3atv一区二区三区| 日韩一区二区三区电影在线观看| 欧洲一区在线观看| 3atv一区二区三区| 亚洲男人的天堂在线| 欧美不卡视频一区发布| 性欧美在线看片a免费观看| 7777精品视频| 久久国产精品免费视频| 97国产精品视频| www.午夜精品| 亚洲 日韩 国产第一| 久久男人av资源网站| 国模叶桐国产精品一区| 97久久精品视频| 国产成人a亚洲精品| 91免费高清视频| 2019最新中文字幕| 成人性生交大片免费看视频直播| 国产成人免费91av在线| 成人写真视频福利网| 欧美不卡三区| 香蕉视频免费版| 日韩一级片播放| 色综合久久五月| 久久久久久久久艹| 一二三区在线播放| 中文字幕一区2区3区| 中国女人一级一次看片| 国产精品无码免费播放| 精品免费久久久| 欧洲一区av| 福利在线导航136| 国产999精品在线观看| 天堂网av成人| 三级一区在线视频先锋| av电影在线观看一区| 夜夜爽夜夜爽精品视频| 欧美性猛交xxxx乱大交3| 色狠狠一区二区三区香蕉| 在线免费观看不卡av| 欧美精品视频www在线观看| 精品不卡在线视频| 欧美激情2020午夜免费观看| 999精品视频一区二区三区| 97久久精品午夜一区二区| 肥熟一91porny丨九色丨| 蜜桃精品久久久久久久免费影院| 一本色道久久综合亚洲二区三区 | 男人天堂网视频| 中文字幕人妻一区| 国内偷拍精品视频| 一级黄色录像大片| 噜噜噜噜噜在线视频| 日本一级理论片在线大全| 亚洲91网站| 欧美三级黄美女| 91视频国产观看| 欧美性xxxxxxxx| 久久精品成人欧美大片| 国产精品第三页| 婷婷精品国产一区二区三区日韩| 波多野结衣激情| 日韩av片在线看| 亚洲一区二区在线免费| 极品魔鬼身材女神啪啪精品| 亚洲精品无码久久久| 欧美人与牲禽动交com | 欧美乱妇15p| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 国产mv久久久| 国产精品免费区二区三区观看 | 999这里有精品| 国产在线视频99| 色视频在线观看福利| 韩国成人二区| 风间由美中文字幕在线看视频国产欧美| 欧美激情91| 91在线一区二区三区| 日韩欧美高清在线视频| 欧美激情成人在线视频| 一区二区三区四区欧美| 另类小说第一页| 蜜桃传媒一区二区亚洲| 无码一区二区三区| www免费在线观看| 日韩精品三级| 久久成人免费网站| 亚洲自拍偷拍综合| 精品国产免费一区二区三区香蕉| 九九九久久国产免费| av日韩中文字幕| 欧美精品久久久久久久免费| 日韩片在线观看| 成年人av网站| 欧美jizzhd69巨大| 99国内精品久久久久| 亚洲视频在线免费| av电影在线观看完整版一区二区| 色又黄又爽网站www久久| 亚洲天堂av电影| 91久久久久久久久久| 久久久久久免费看| 无码一区二区三区在线| 91中文字幕永久在线| 欧美日韩在线视频播放| 好吊日视频在线观看| heyzo欧美激情| 视频在线观看一区| 亚洲一区二区高清| 亚洲区免费影片| 国产精品免费一区二区三区观看| 亚洲国产精品久久久久爰色欲| 欧日韩不卡视频| 深爱激情五月婷婷| www.久久爱.com| 蜜桃av一区| 亚洲成人777| 久久久www成人免费精品张筱雨| 久久久一本精品99久久精品66| 中文字幕天天干| 久久久久久在线观看| 羞羞视频在线观看免费| 欧美高清视频在线观看mv| aaa国产一区| 欧美zozozo| 91国产在线免费观看| www.日本一区| 丰满熟女人妻一区二区三| 极品视频在线| 99av国产精品欲麻豆| 一区二区三区欧美在线观看| 伊人男人综合视频网| 欧美在线播放一区| 亚洲狠狠婷婷综合久久久久图片| 开心激情综合网| 视频二区欧美毛片免费观看| 精品一区二区三区免费毛片爱| 欧美午夜一区二区三区| 国产精品一区二区久久国产| 欧美精品第三页| 无码人妻黑人中文字幕| 中文字幕影音在线| 爽爽淫人综合网网站| 欧美日韩在线播放| 91免费视频网站| 亚洲av无码久久精品色欲| www.国产精品视频| 久久九九热re6这里有精品| 91视视频在线观看入口直接观看www | 91免费黄视频| 中文字幕精品三级久久久 | 成人影院在线看| 午夜天堂精品久久久久| 一区二区久久久久久| 欧美一级免费视频| 搡女人真爽免费午夜网站| 国产又粗又黄又爽| 丁香综合av| 国产精品日日摸夜夜摸av| 欧美日韩国产二区| 日日摸日日碰夜夜爽av| 黄色大全在线观看| 精品视频国内| 99在线热播精品免费| 国产亚洲激情视频在线| 日韩视频在线观看视频| 日本中文在线播放| 日韩成人18| 国产日韩av一区二区| 九九视频这里只有精品| 久久久精品麻豆| 视频在线观看你懂的| 91精品蜜臀一区二区三区在线| 天天综合天天综合色| 亚洲欧美电影院| 中文字幕精品一区二区精品| 日韩三级电影网站| 久久一区二区电影| 五月天婷婷激情网| 欧美亚洲tv| 久久久久.com| 麻豆一区区三区四区产品精品蜜桃| 风间由美一区二区av101| 精品一区二区三区日本| 国产剧情在线观看一区| 在线视频不卡一区二区| 亚洲欧美综合| 久久国产亚洲精品无码| 轻轻草成人在线| 下面一进一出好爽视频| 99久久综合国产精品| 久久久久久成人网| 亚洲综合色区另类av| 国产污视频网站| 欧美一区二区三区免费| 头脑特工队2在线播放| 国产亚洲视频在线观看| 1024在线播放| 国产91色在线播放| 日韩伦理在线观看| 一区二区国产在线观看| 同产精品九九九| 91香蕉国产在线观看| xxxxwww一片| 内衣办公室在线| av成人毛片| 欧美日韩亚洲综合在线| 日韩免费av一区二区三区| 青青草国产在线观看| www.精品国产| 久久亚洲二区三区| 欧美黄色片在线观看| 色综合色综合色综合色综合| 国产精品国产三级国产aⅴ| 久久一级大片| av高清久久久| 在线播放国产一区二区三区| 丰满人妻一区二区三区53号| 日韩电影在线观看一区二区| 欧美暴力调教| 国产精品久久久一本精品| 成人在线免费观看一区| 最新一区二区三区| 久久久久久久性潮| 不卡在线观看av| 久久精品国产2020观看福利| www插插插无码免费视频网站| 午夜精品免费观看| 日韩一区二区三区免费播放| 亚洲白虎美女被爆操| 欧美中文在线| 久久999免费视频| 亚洲欧美一级| 日韩国产欧美精品| 国产日韩专区| 影音先锋资源av| 亚洲欧美日韩国产成人精品影院| 99成人精品视频| 精品偷拍各种wc美女嘘嘘| 宅男网站在线免费观看| 国产精品激情自拍| 日韩影视在线观看| 国产va亚洲va在线va| 国产精品亚洲人在线观看| www中文在线| 欧美色图免费看| 成人18在线| 国产精品亚洲网站| 成人免费在线播放| 蜜桃免费在线视频| 国产欧美一区二区三区鸳鸯浴 | 99精品国产91久久久久久| 欧美交换国产一区内射| 欧美一级理论片| 国产黄色在线免费观看| 成人国产精品一区| 999久久久91| 天堂中文av在线| 国产精品二三区| 国产精品一二三四五区| 正在播放欧美视频| 国产一区二区三区四区五区3d| 日韩视频在线播放| 蜜桃视频一区二区| 亚洲色偷偷综合亚洲av伊人| 91精品国产欧美日韩| 性网站在线观看| 国产亚洲精品自在久久| 亚洲日本成人| japanese中文字幕| 精品视频在线免费| 成人免费在线| 国产91免费视频| 亚洲一级在线| 欧美特级黄色录像| 欧美高清视频不卡网| 麻豆视频在线免费观看| 亚洲www视频| 亚洲经典视频在线观看| 无码成人精品区在线观看| 欧美日韩另类字幕中文| 国产二区视频在线观看| 成人午夜高潮视频| 影音先锋日韩资源| 成人精品999| 91精品国产91综合久久蜜臀| 国产后进白嫩翘臀在线观看视频| 精品午夜一区二区| 美女一区二区视频| 老湿机69福利| 精品在线欧美视频| 日韩福利在线观看| 毛片在线播放视频| 中文字幕不卡一区| 亚洲av无码乱码国产精品久久| 欧美一级电影在线| 天天操夜夜操国产精品| 污污免费在线观看| 欧美色倩网站大全免费| 欧美hdxxxxx| 日韩三级在线播放| 国产mv日韩mv欧美| 久操视频在线免费观看| 久久国产色av| 国产欧美一区二区三区精品观看 | youjizz在线视频| 久久精品亚洲94久久精品|