久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

.NET API 接口數據傳輸加密最佳實踐記錄

瀏覽:107日期:2022-06-09 11:07:44
目錄
  • 硬編碼方式
  • 統一入口
  • 中間件
  • 模型綁定
  • 總結
  • 參考資料

我們在做 Api 接口時,相信一定會有接觸到要給傳輸的請求 body 的內容進行加密傳輸。其目的就是為了防止一些敏感的內容直接被 UI 層查看或篡改。

其實粗略一想就能想到很多種方案,但是哪些方案是目前最適合我們項目的呢?

硬編碼方式

最先想到的應該就是硬編碼方式,就是哪個接口需要進行傳輸加密,那么就針對該接口特殊處理:

public class SecurityApiController {
	...
	public async Task<Result> UpdateUser([FromBody] SecurityRequest request) {
	    var requestBody = RsaHelper.Decrypt(privateKey, request.Content);
    var user = JsonHelper.Deserialize<UserDto>(requestBody);
	    await UpdateUserAsync(user);
	    return new Result(RsaHelper.Encrypt(publicKey, new{ Success=true}));
	}
}

這種方式好處是簡單明了,按需編程即可,不會對其它接口造成污染。

一旦這種需求越來越多,我們就會寫大量如上的重復性代碼;而對于前端而言也是如此,所以當我們需要傳輸加密乃是最基礎的需求時,上面硬編碼的方式就顯得很不合適了。

這個時候我們可以采用統一入口的方式來實現

統一入口

回顧上面的硬編碼方式,其實每個接口處的加解密處理從 SRP 原則上理解,不應該是接口的職責。所以需要把這部分的代碼移到一個單獨的方法,再加解密之后我們再把該請求調度到具體的接口。

這種方式其實有很多種實現方式,在這里我先說一下我司其中一個 .NET4.5 的項目采取的方式。

其實就是額外提供了一個統一的入口,所有需要傳輸加密的需求都走這一個接口:如http://api.example.com/security

public class SecurityController {
	...
	public async Task<object> EntryPoint([FromBody] SecurityRequest request) {
	    var requestBody = RsaHelper.Decrypt(privateKey, request.Content);
	    var user = JsonHelper.Deserialize<UserDto>(requestBody);
	    var obj = await DispathRouter(requestBody.Router, user);
    return new Result(RsaHelper.Encrypt(publicKey, obj));
	}
	
	public async Task<object> DispathRouter(Router router, object body) {
	    ...
	    Type objectCon = typeof(BaseController);
    MethodInfo methInfo = objectCon.GetMethod(router.Name);
    var resp = (Task<object>)methInfo.Invoke(null, body);
    return await resp;
	}
}

很明顯這是通過統一入口地址調用并配合反射來實現這種目的。

這種好處如前面所說,統一了調用入口,這樣提高了代碼復用率,讓加解密不再是業務接口的一部分了。同樣,這種利用一些不好的點;比如用了反射性能會大打折扣。并且我們過度的進行統一了。我們看到這種方式只能將所有的接口方法都寫到 BaseController。所以我司項目的 Controller 部分,會看到大量如下的寫法:

// 文件 UserController.cs
public partial class BaseController {
	...
}
// 文件 AccountController.cs 
public partial class BaseController {

}
// ...

這樣勢必就會導致一個明顯的問題,就是“代碼爆炸”。這相當于將所有的業務邏輯全部灌輸到一個控制器中,剛開始寫的時候方便了,但是后期維護以及交接換人的時候閱讀代碼是非常痛苦的一個過程。因為在不同的 Controller 文件中勢必會重復初始化一些模塊,而我們在引用方法的時候 IDE 每次都會顯示上千個方法,有時候還不得不查看哪些方法名一樣或相近的具體意義。

針對上述代碼爆炸的方式還有一種優化,就是將控制器的選擇開放給應用端,也就是將方法名和控制器名都作為請求參數暴露給前端,但是這樣會加大前端的開發心智負擔。

綜上所述我是非常不建議采用這種方式的。雖說是很古老的.Net4/4.5 的框架,但是我們還是有其它相對更優雅的實現方式。

中間件

其實我們熟悉了 .NETCore 下的 Middleware機制,我們會很容易的在 .NETCore 下實現如標題的這種需求:

// .NET Core 版本
public class SecuriryTransportMiddleware {
    private readonly RequestDelegate _next;

    public RequestCultureMiddleware(RequestDelegate next)
    {
_next = next;
    }
    
    public async Task InvokeAsync(HttpContext context)
    {
    	// request handle
var encryptedBody = context.Request.Body;
var encryptedContent = new StreamReader(encryptedBody).ReadToEnd();
var decryptedBody = RsaHelper.Decrypt(privateKey, encryptedContent);
var originBody = JsonHelper.Deserialize<object>(decryptedBody);

var json = JsonHelper.Serialize(dataSource);
var requestContent = new StringContent(json, Encoding.UTF8, "application/json");
stream = await requestContent.ReadAsStreamAsync();
context.Request.Body = stream;

await _next(context);
// response handle
var originContent = new StreamReader(context.Response.Body).ReadToEnd();
var encryptedBody = RsaHelper.Encrypt(privateKey, originContent);
var responseContent = new StringContent(json, Encoding.UTF8, "application/json");
context.Response.Body = await responseContent.ReadAsStreamAsync();
// 或者直接
// await context.Response.WriteAsync(encryptedBody);
    }
}

為了方便描述,以上代碼我省略了必要的校驗和異常錯誤處理

這樣有什么好處呢?一個最明顯的好處就是解耦了加解密與真正業務需求。對真正的業務代碼幾乎沒有侵略性。其實我認為業務開發能做到這里其實就差不多了,還有其它需求都可以基于這個中間件進行拓展開發。

那么在 .NET Framwork 沒有中間件怎么辦呢?

其實在 .NET Framwork 框架下 IHttpModule 能和中間件一樣能做到這點:

public class SecurityTransportHttpModule : IHttpModule {
	...
	public void Init(HttpApplication context) {
	    ...
	    context.BeginRequest += ContextBeginRequest;
	    context.PostRequestHandlerExecute += ContextPostRequestHandlerExecute;
	}
	
	private void ContextBeginRequest(object sender, EventArgs e) {
	    HttpContext context = ((HttpApplication)sender).Context;
	    var encryptedBody = context.Request.Body;
	    ...
	    context.Request.Body = stream;
	}
	
	private void ContextPostRequestHandlerExecute(object sender, EventArgs e)
{
    HttpContext context = ((HttpApplication)sender).Context;
    ...
    context.Response.Write(encryptedBody)
}
}

為什么之前提到這種方案就“差不多”了呢,實際上上面這種方式在某些場景下會顯得比較“累贅”。因為無論通過中間件和還是 IHttpModule 都會導致所有請求都會經過它,相當于增加了一個過濾器,如果這時候我要新增一個上傳文件接口,那必然也會經過這個處理程序。說的更直接一點,如果碰到那些少數不需要加解密的接口請求那要怎么辦呢?

其實上面可以進行拓展處理,比如對特定的請求進行過濾:

if(context.Request.Path.Contains("upload")) {
	return;
}

注意上述代碼只是做個 demo 展示,真正還是需要通過如 context.GetRouterData() 獲取路由數據進行精準比對。

當類似于這種需求開始變多以后(吐槽:誰知道業務是怎么發展的呢?)原來的中間件的“任務量”開始變得厚重了起來。到時候也會變得難以維護和閱讀。

這個時候就是我目前較為滿意的解決方案登場了,它就是模型綁定 ModelBinding。

模型綁定

回到需求的開端,不難發現,我們其實要是如何將前端加密后的請求體綁定到我們編寫的接口方法中。這里面的過程很復雜,需要解析前端發起的請求,解密之后還要反序列化成目標接口需要的方法參數。而這個過程還要伴隨著參數校驗,如這個請求是否符合加密格式。而這個過程的一切都是模型綁定要解決的事。我們以 NETCore 版本為例子,講一下大概的流程;

模型綁定的過程其實就是將請求體的各個字段于具體的 CLR 類型的字段屬性進行一一匹配的過程。.NetCore 再程序啟動時會默認提供了一些內置的模型綁定器,并開放 IModelBinderProvider 接口允許用戶自定義模型綁定器。我們通過查看 MvcCoreMvcOptionsSetup 就清楚看到框架為我們添加 18 個自帶的模型綁定器。以及如何調用的方式。

所以接下來我們很容易的可以一葫蘆畫瓢的照抄下來:

public class SecurityTransportModelBinder : IModelBinder {
    ...
    public async Task BindModelAsync(ModelBindingContext bindingContext)
    {
if (bindingContext == null)
{
    throw new ArgumentNullException(nameof(bindingContext));
}

try
{
    var request = bindingContext.HttpContext.Request;
    var model = await JsonSerializer.DeserializeAsync<SafeDataWrapper>(request.Body, new JsonSerializerOptions
    {
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    });
    var decryptContent = RsaHelper.Decrypt(model.Info, privateKey);
    var activateModel = JsonSerializer.Deserialize(decryptContent, bindingContext.ModelMetadata.ModelType, new JsonSerializerOptions
    {
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    });
    //重新包裝
    if (activateModel == null)
    {
bindingContext.Result = ModelBindingResult.Failed();
    }
    else
    {
bindingContext.Result = ModelBindingResult.Success(activateModel);
    }
}
catch (Exception exception)
{
    bindingContext.ModelState.TryAddModelError(
bindingContext.ModelName,
exception,
bindingContext.ModelMetadata);
}

_logger.DoneAttemptingToBindModel(bindingContext);
//return Task.CompletedTask;
    }
}

抄了 ModelBinder 還不行,還要抄 ModelBinderProvider:

public class SecurityTransportModelBinderProvider : IModelBinderProvider
{
    public IModelBinder GetBinder(ModelBinderProviderContext context)
    {
if (context == null)
{
    throw new ArgumentNullException(nameof(context));
}

if (context.Metadata.IsComplexType && typeof(IApiEncrypt).IsAssignableFrom(context.Metadata.ModelType))
{
    var loggerFactory = context.Services.GetRequiredService<ILoggerFactory>();
    var configuration = context.Services.GetRequiredService<IConfiguration>();
    return new SecurityTransportModelBinder(loggerFactory, configuration);
}

return null;
    }
}

這里我做了一個方便我自己的拓展功能,就是顯示打了 IApiEncrypt 接口標簽的才會正常進行解析綁定。

剩下的就是在 ConfigureService 中添加進去即可:

services.AddControllers(options => {
	...
	options.ModelBinderProviders.Insert(0, new SecurityTransportModelBinderProvider());
})

這樣實現過后,我們就能像使用 FromBody 那樣就能按需調用即可:

[HttpPost("security")]
public async Task<ResultDto> DemoDecrypt([ModelBinder(typeof(SecurityTransportModelBinder))] OriginBusinessRequest request)
{
    //激活結果
	...
    return await Task.FromResult(WriteSafeData(data, publicKey));
}

如果是默認處理加解密也是可以的,直接在對應的請求實體類打上 IApiEncrypt 標簽就會自動執行模型綁定

public class UserUpdateRequest: IApiEncrypt {
	public int UserId { get; set; }
	public string Phone { get; set; }
	public string Address { get; set; }
	...
}

這種方案其實也還是有缺點的,從剛剛的使用來看就知道,模型綁定無法解決返回自動加密處理。所以我們不得不在每個接口處寫下如 WriteSafeData(data, publicKey) 這種顯式加密的代碼。

優化的方式也很簡單,其實我們可以通過過濾器可以解決,這也是為什么我要加 IApiEncrypt 的原因,因為有了這個就能確定知道這是一個安全傳輸的請求,進而進行特殊處理。

注意,這不是 .NET Core 獨有的特性,.Net Framework 也有模型綁定器

總結

針對接口級傳輸加密這個需求,我們總共討論了四種實現方式。其實各有各的好處和缺點。

硬編碼方式適合只有特定需求的場景下是適合這種方案的。但是一旦這種需求成為一種規范或普遍場景時,這個方法就不合適了

統一入口適合制定了一種接口規范,所有加密的請求都走這一個接口。然后通過路由解析調度到不同的控制器。其實我講了我司在 .NET Framework 下采取的一種方案,好處時實現簡單,做到了代碼復用,對業務代碼進行了解耦。但缺點是用了反射成為了性能消耗點,并且當業務越來越多就會產生代碼爆炸,成為了維護災難。

而中間件或 IHttpModule 方式就很好的解決這了這點。但同樣也不是使用所有場景,如對新增的不需要加密的接口要進行過濾處理等。

最后介紹了模型綁定這種方式,技能很方便的滿足大多數場景,也滿足個別列外的需求。但同樣也有缺點,就是無法針對接口響應體進行自動加密處理,所謂好事做到底,送佛送到西,這事只能算是做到一半吧。

其實我還想到了一種類似 Aop 的方案,那就是實現一個路由過濾器的功能,當請求進來,通過路由處理程序對請求體進行解密,然后重寫請求流。然后調度到對應的原始路由,最后在響應的時候再加密重寫一次。不過查閱了一番資料,并沒有收獲。

參考資料

  • https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.modelbinding.imodelbinderprovider?view=aspnetcore-7.0
  • https://learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware/write?view=aspnetcore-6.0
  • https://www.stevejgordon.co.uk/html-encode-string-aspnet-core-model-binding

到此這篇關于.NET API 接口數據傳輸加密最佳實踐記錄的文章就介紹到這了,更多相關.net api接口數據傳輸加密內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: ASP.NET
主站蜘蛛池模板: 亚洲欧美一区二区三区视频 | 国产在线专区 | 亚洲高清视频在线 | 密桃av | 特一级黄色片 | 亚洲欧美一区二区三区在线 | 91精品国产综合久久婷婷香蕉 | 青青久久网 | 日韩影音 | 久久久久久久久99精品 | 狠狠天天 | 午夜午夜精品一区二区三区文 | 日韩国产一区二区 | 成人在线观看av | 日韩第一页 | 在线观看第一页 | 国产免费自拍 | 亚洲国产一区二区三区 | 欧美午夜一区二区三区 | 国产在线观看一区二区 | 精品一区二区三区在线观看 | 亚洲精品视频在线 | 精品久久久一区二区 | 国产成人在线免费观看 | 久久精品综合 | 亚洲 中文 欧美 日韩 在线观看 | 男人的天堂久久 | av中文字幕在线播放 | 精品国内| 久久精品网 | 国产精品久久久久久亚洲调教 | 国产高清精品一区 | 国产精品视频一区二区三区 | 中文字幕在线日韩 | 91精品国产综合久久久久久漫画 | 免费99视频 | 成年人视频在线观看免费 | www.一区 | 日韩精品一区二区三区中文字幕 | 国产黄色av| 成人不卡视频 | 亚洲国产99 | 日韩免费电影 | 手机看片在线 | 天天操天天操 | 欧美久久久久久久久久久 | 国产精品久久在线观看 | 免费看色 | 久久久亚洲一区二区三区 | 在线免费一级片 | 欧美一级片免费看 | 日韩在线视频观看免费 | 少妇久久久 | 日韩成人短视频 | 在线色网| 神马香蕉久久 | 国产欧美一区二区 | 久久久国产日韩 | 国产一区二区视频在线观看 | 亚洲视频在线看 | 精品国产一区二区三区性色av | 国产精品久久久麻豆 | 欧美一区二区 | 青青草亚洲| 国产在线一区二区 | 黄色高清视频在线观看 | 欧美精品欧美极品欧美激情 | 亚洲人在线观看视频 | 干干干操操操 | 久久久高清 | 亚洲 欧美 另类 综合 偷拍 | 亚洲欧洲精品成人久久奇米网 | 国产一区二区精品 | 国产精品亚洲欧美日韩一区在线 | 欧美在线播放一区 | 国产乱码精品一区二区三区中文 | 嫩草影院在线观看91麻豆 | 永久黄网站色视频免费 | 欧美精品免费在线观看 | 久草青青| 欧美一级淫片免费视频黄 | 国产伊人av | 成人影院欧美黄色 | 日韩精品第一页 | 成人一区二区三区久久精品嫩草 | 欧美精品免费在线观看 | 国产精品国产精品国产专区不卡 | 日本精品一区 | 国产妇女乱码一区二区三区 | 亚洲欧美第一页 | 国产男女做爰免费网站 | 午夜影院免费 | 精品不卡| 免费国产一区二区 | 亚洲国产高清高潮精品美女 | 久草视频在线播放 | 亚洲国产成人久久一区二区三区 | 亚洲国产精品精华液网站 | 国产欧美精品一区二区 | 99久久99久久 | 天天澡天天狠天天天做 | 国产999久久 | 免费视频一区二区 | 日本一区二区不卡 | 99久久精品国产毛片 | 91久久精品一区二区二区 | 成人精品视频一区二区三区 | baoyu133. con永久免费视频 | 亚洲人成在线播放 | 一区二区成人在线 | 亚洲免费视频在线观看 | 99精品一区二区三区 | 欧美激情视频一区二区三区在线播放 | 亚洲精品日韩综合观看成人91 | 亚洲一二三 | 久在线视频 | 久久精品二区 | 久久国产精品免费一区二区三区 | 中文字幕欧美在线观看 | www.伊人.com | 国产精品色哟哟哟 | 国产日产精品一区二区三区四区 | 午夜精选视频 | 超碰美女| 国产精品毛片一区二区在线看 | 一区二区亚洲视频 | 99久久99久久久精品色圆 | 羞羞视频免费观看 | 欧美性猛交一区二区三区精品 | 色综合久 | 做a视频免费观看 | 日韩不卡一区二区三区 | 欧一区二区 | 国产午夜精品一区二区三区嫩草 | 国产51人人成人人人人爽色哟哟 | 一区二区三区有限公司 | 91视频在线观看 | 99久久久 | 亚洲美女视频在线观看 | 国产大学生一区 | 日韩欧美二区 | 国产网站在线 | 久久综合狠狠综合久久综合88 | 超碰在线播 | 婷婷丁香激情网 | 国产成人久久精品一区二区三区 | 成人区一区二区三区 | 久草综合网 | 亚洲精品国产电影 | 精产国产伦理一二三区 | 国产一级特黄aaa大片评分 | 美女久久久 | 人人av在线 | 成人高清视频在线 | 精品国产鲁一鲁一区二区在线观看 | 韩国精品免费视频 | 国产福利在线视频 | 久久久久久久一区二区 | 亚洲在线视频 | 操操操av | 嫩草视频在线观看免费 | 久久久性色精品国产免费观看 | 久久久久免费观看 | 亚洲高清在线观看 | 久久成人在线视频 | 荡女妇边被c边呻吟视频 | 欧美精品成人 | 国产精品一区二区三区在线免费观看 | 呦一呦二在线精品视频 | 成人免费观看男女羞羞视频 | 国产精品视频播放 | 国产精品1区2区在线观看 | av一区二区在线观看 | 天天精品 | 欧美大片免费高清观看 | 国产成人精品一区二区三区视频 | 国产成人精品午夜视频免费 | 亚洲国产精久久久久久久 | 一级毛片免费播放 | 久久久久久久久99精品 | 亚洲毛片在线 | 亚洲午夜在线 | 久久99深爱久久99精品 | 久久久一区二区三区 | 污污视频免费网站 | 中文字幕亚洲精品 | 国产91网址 | 国产精品二区三区 | 久久99精品久久久水蜜桃 | 欧美日韩久久 | 国产伦精品一区二区三区四区视频 | a久久| 中文字幕在线一区 | 亚洲免费电影一区 | 91视频久久 | 91精品国产高清一区二区三区 | 国产高清一区 | 草草久久久| 日韩中文字幕电影在线观看 | 欧美激情一区二区三区蜜桃视频 | 中文字幕第十二页 | 少妇精品视频在线观看 | 亚洲一区二区三区免费观看 | 欧美日韩综合精品 | 91精品国产91久久久久久蜜臀 | 精品视频久久久久 | 久久av资源| 一级日韩片 | 欧美日韩一区二区三区在线观看 | 在线观看免费黄色小视频 | 日韩五月 | 一区二区三区精品 | 日韩午夜 | 红杏aⅴ成人免费视频 | av伊人网 | 手机看片1 | 久久精品欧美电影 | 亚洲一区二区在线 | 欧美日韩一区二区三区在线观看 | 亚洲一区二区三区在线播放 | 国产午夜精品美女视频明星a级 | 在线观看的av | 亚洲欧洲视频在线 | 成人av网站在线 | 国产在线一区二区 | 99久久免费观看 | 六月婷婷综合 | 精品国产伦一区二区三区观看说明 | 日本不卡一区二区 | 欧美1区 | 一级做a爰片性色毛片2021 | 日韩精品久久久久久 | 中文字幕精品一区久久久久 | 99免费在线视频 | 亚洲性人人天天夜夜摸 | 人人爽日日爽 | 国产成人精品久久二区二区 | 国产欧美综合一区二区三区 | 欧美一区二区在线观看 | 国产男人天堂 | 精品国产一区二区三区成人影院 | 视频二区 | 日本电影网址 | 国产精品中文字幕在线播放 | 欧美成视频 | 久久久免费视频播放 | 免费看国产片在线观看 | 欧美亚洲国产一区 | 性视频网站免费 | 国产精品18hdxxxⅹ在线 | 日韩亚洲 | 国产精品美女视频免费观看软件 | 日韩成人免费在线 | 国产美女在线播放 | 中文字幕国产视频 | 亚洲国产成人精品女人 | 五月天婷婷激情视频 | 国产人妖视频 | 中文字幕天天操 | 日本在线观看网站 | 国产精品2区 | 国产精品夜间视频香蕉 | 午夜电影网址 | av综合站| 69av.com| 精品中文字幕一区二区 | 人人爱人人草 | 亚洲高清视频一区二区三区 | 91久久| 日韩成人国产 | 精品久久久久久久久久 | 亚洲免费精品 | 免费成人在线网站 | 亚洲欧美日韩在线一区二区 | 在线观看av片 | 亚洲首页 | 成人在线网站 | 日韩一区二区三区在线观看 | 国产亚洲一区二区三区在线观看 | 国产精品成人在线观看 | 在线播放中文字幕 | 亚洲精品久久久久久下一站 | 久久亚洲精品裙底抄底 | 欧美视频在线免费 | 国产成人综合一区二区三区 | 亚洲欧美另类在线观看 | 欧美精品色网 | 日韩三级| 亚洲精品久久久久久久久久久 | 国产精品夜夜春夜夜爽久久电影 | 国产日皮视频 | 成人精品视频在线 | 狠狠的干 | 国产99久久精品一区二区永久免费 | 久久精品久久久久电影 | 最新一级毛片 | 男女羞羞网站 | 中文字幕国产视频 | 91午夜激情 | 日韩中文字幕在线视频 | 秋霞在线一区 | 国产一区二区三区四区三区 | 日韩精品在线免费观看 | 午夜免费视频 | 国产精品久久久久无码av | 2018自拍偷拍 | 中文字幕在线视频观看 | 成人午夜av | 日韩视频免费在线观看 | 国内精品久久久久国产 | 久久福利 | 露娜同人18av黄漫网站 | 日本免费一区二区三区 | 精品久久久久久久久久久久 | 国产成人精品一区二区三区视频 | 日韩精品一区在线 | 国产免费高清 | 久久久久久九九 | 日本黄a三级三级三级 | 色www精品视频在线观看 | 国产精品永久 | 国产精品丝袜视频 | 99久久精品免费 | 精品国产乱码一区二区三区四区 | 国产精品精品视频 | 一区二区三区视频免费看 | 亚洲aⅴ网站 | 欧美日韩专区 | 国产精品久久久久久久久久久小说 | 日韩视频在线一区二区 | 91精品国产乱码久久久久久久久 | 97成人在线免费视频 | 一区二区手机在线 | 国产一极片 | 杨门女将寡妇一级裸片看 | 精品国产不卡一区二区三区 | 久久成人免费观看 | 在线视频亚洲 | 在线视频 中文字幕 | 操视频网站 | 天堂免费在线观看视频 | 亚洲欧美国产另类 | 国产精品久久久久不卡 | 亚洲最黄网站 | 黄色操视频| 亚洲精品国精品久久99热 | 国产精品亚洲成在人线 | 亚洲国产精品一区二区久久 | 国产精品成av人在线视午夜片 | 亚洲高清在线观看 | 亚洲午夜精品视频 | 人人干天天干 | 国产一级毛片国语一级 | 麻豆高清免费国产一区 | 91av在线播放 | 国产精品久久免费视频 | 日韩成人在线观看 | 国产伦精品一区二区三区四区视频 | av在线免费网址 | 久久久99国产精品免费 | 国产精品福利在线观看 | 精品视频一区在线观看 | 国产欧美精品一区二区色综合朱莉 | 91传媒在线播放 | 羞羞视频在线网站观看 | 自拍偷拍专区 | 狠狠爱天天操 | 亚洲国产精品99久久久久久久久 | 操久久 | 国产精品久久嫩一区二区免费 | 一区二区三区精品视频 | 最新超碰 | 精品成人免费视频 | 毛片网在线观看 | 亚洲欧洲日韩 | 欧美日韩国产中文字幕 | 一区二区中文字幕 | 91亚洲精品一区 | 日韩欧美视频 | 丝袜 亚洲 另类 欧美 综合 | 国产精品视频久久久 | 中文字幕日韩欧美一区二区三区 | h亚洲视频 | 成年人在线观看 | 亚洲不卡 | 欧美一区二区三区免费 | 天天色天天射天天操 | 国产综合精品一区二区三区 | 羞羞视频网站在线免费观看 | 日韩色综合| 91免费在线视频 | 日韩精品一区二区三区第95 | 色综合久久久久久久久久久 | 91麻豆精品国产91久久久资源速度 | 精品久久久99 | 国产精品久久久久久久久久久久久 | 国产精品久久二区 | 国产精品久久久久久久久久久久久久久久 | a级在线 | 欧美日韩久久久 | 国产偷国产偷精品高清尤物 | 欧美日本亚洲 | 国产高清精品一区 | 国产精品99在线观看 | 免费在线成人 | 在线视频一区二区 | 久久久久国产一区二区三区 | 亚洲色图一区二区三区 | 欧美色综合天天久久综合精品 | 国产日产精品一区二区三区四区 | 中文字幕日韩一区二区不卡 | 日韩视频一区二区三区四区 | 成人在线免费视频 | 成人av播放 | 午夜寂寞网站 | 精品一区二区三区久久久 | 精品国产乱码久久久久久影片 | 天天操天天曰 | 999国产一区二区三区四区 | 中文成人无字幕乱码精品 | 日韩激情欧美 | 欧美成年黄网站色视频 | 国产精品成人国产乱一区 | 国产精品毛片无码 | 欧美精品一二三 | 毛片a在线| 成人在线免费视频 | 国产综合精品 | 色黄视频在线观看 | 久久综合九色综合欧美狠狠 | 欧美视频精品 | 久久久久99 | 午夜精品一区二区三区在线观看 | 国产免费自拍av | 亚洲国产精品一区二区第一页 | 亚洲综合99| 黄色毛片av | 欧美日韩国产在线 | 亚洲午夜精品久久久久久app | 国产精品久久久久久久久久东京 | 国产精品一二三四区 | 欧美一级爆毛片 | 韩日一区二区 | 国产1区 | 日韩久色 | 99精品视频在线免费观看 | 国产成人在线一区二区 | 成人看片在线观看 | 欧美日一区二区 | 久久精品综合 | 欧美日本三级 | 伊人久久视频 | 最近韩国日本免费观看mv免费版 | 久久久久久国产精品久久 | 四虎av成人 | 欧美精品一区二区视频 | 色婷婷av一区二区三区大白胸 | 久久精品国产99 | 精品在线播放 | 看片一区| 久久人体| 九九热热九九 | 一区二区三区四区在线播放 | 久久久影视 | 婷婷丁香激情网 | 国产精品久久久久久久久久妞妞 | 中文字幕国产视频 | 伊人久操 | 国产91免费在线 | 免费观看一级毛片 | 久久亚洲国产精品 | 久久久久久免费毛片精品 | 欧美一区二区三区在线观看视频 | 中文字幕视频在线观看 | 欧美中文字幕在线观看 | 国产精品久久久久一区二区三区 | 美女中文字幕视频 | 国产精品久久久久久久久久久久冷 | av在线播放网站 | 国产综合精品 | 国精日本亚洲欧州国产中文久久 | 免费一区二区三区 | 黄色片在线免费观看 | 激情久久久久 | 免费看91 | 爱操在线 | 91中文字幕 | 7777av| 久久久久亚洲精品 | 日韩中文字幕一区二区 | 成人高清视频在线 | 久久毛片 | 亚洲综合区 | 一级毛片观看 | 天堂福利影院 | 亚洲91| 亚洲精品电影在线观看 | 欧美激情视频一区二区三区在线播放 | 精品亚洲一区二区三区四区五区 | 久久久久99精品国产片 | 亚洲精品一区在线观看 | 午夜免费剧场 | 午夜精品一区 | 亚洲视频区| 亚洲午夜精品a | 爱爱视频网站 | 日本欧美在线 | 亚洲国产区 | 国产精品久久久久久久久 | 粉嫩高清一区二区三区精品视频 | 日韩欧美国产一区二区 | 成人二区 | 日韩一区精品视频 | 久久久久国产精品 | 冷水浴在线观看 | 久久九九精品视频 | 精品国产一区二区在线 | 久久一| 五月激情综合婷婷 | 99re视频在线观看 | 91色在线 | 日韩在线视频中文字幕 | 作爱视频免费看 | 一区二区三区免费视频网站 | baoyu123成人免费看视频 | 欧美日韩在线一区二区三区 | 欧美喷潮久久久xxxxx | 99精品免费观看 | 69久久99精品久久久久婷婷 | 精品免费一区二区 | 亚洲伊人久久综合 | 色久天堂| 久久亚洲精品视频 | 青青久久 | 黄色一级网站视频 | 久久综合狠狠综合久久综合88 | 91久久久久 | 亚洲欧美影院 | 国产成人av免费 | 亚洲综合大片69999 | 亚洲精品成人免费 | 久久久久久久久久一区二区 | 国产亚洲一区二区在线 | 中文av在线播放 | 久久伊人一区二区 | 欧美一区二区免费 | 最新日韩av | 国产51人人成人人人人爽色哟哟 | 97夜夜操| 日本高清中文字幕 | 日韩欧美视频一区 | 亚洲精品福利在线 | 亚州中文| 欧美精品一区二 | 一区二区在线 | 日韩视频一区二区 | 操视频网站 | 一二三四在线视频观看社区 | 久久久久综合狠狠综合日本高清 | 97热在线 | 日韩精品一区二区三区在线 | 日韩爱爱网 | av免费网站在线观看 | 一本大道综合伊人精品热热 | 日韩精品一区二区三区在线观看 | 国产毛片网站 | 国产精品久久一区二区三区 | 国产一区二区三区色淫影院 | 成人婷婷 | 久久久久久久久国产精品 | 国产精品国色综合久久 | 成人精品一区二区三区中文字幕 | 国产成人看片 | 高清国产一区二区三区四区五区 | 日韩成人影院 | 黄色片网站在线免费观看 | 国产中文视频 | 中文字幕一二三区 | 久久伊| 国产大奶视频 | 欧美日韩一级二级三级 | www.久久伊人| 一级片av | 国产成人精品999在线观看 | 亚洲精品影院 | 国产97色在线 | 亚洲 | 黄网在线免费观看 | www久久精品 | 亚洲免费在线视频 | 国产精品乱码一区二区三区 | 亚洲精品国产片 | 欧美日韩在线第一页 | 精品日韩一区二区 | 欧美a级在线观看 | 欧美xxxx做受欧美 | 久久久久久久久久久精 | 国产91亚洲精品久久久 | 一区二区成人 | 免费操片 | 国产99精品在线 | 国产一区二区精品在线 | 日韩成人一级片 | 精品久久久久久久久福利 | 国产传媒在线视频 | 欧美男人天堂 | 黄色片地址 | 一区二区日本 | 欧美日韩中文 | 久久一道本 | 国产精品成人观看视频国产奇米 | 国产成人av在线 | 欧美激情一区二区 | 日本欧美久久久久免费播放网 | 久久成 | 日韩精品中文字幕一区二区三区 |