久久亚洲精品成人_国产精品欧美综合亚洲_亚洲va天堂va欧美ⅴa在线_91色视频在线观看_久久影院亚洲_一级黄色片播放_日韩av在线一区_精品一区二区在线看_老头吃奶性行交视频_日韩免费高清视频_天天操天天爽天天干_日本欧美在线视频

首頁 > 擴展 > MVC > 正文

MVC使用極驗驗證制作登錄驗證碼學習筆記7

2024-09-06 20:44:36
字體:
來源:轉載
供稿:網友

       在之前的項目中,如果有需要使用驗證碼,基本都是自己用GDI+畫圖出來,簡單好用,但是卻也存在了一些小問題,首先若較少干擾線,則安全性不是很高,驗證碼容易被機器識別,若多畫太多干擾線條,機器人識別率下降的同時,人眼的識別率也同步下降(震驚哭)。更為重要的是,GDI+繪制的驗證碼一般來說也不會很美觀,如果做一個炫酷的登陸界面卻配了這樣一個驗證碼,畫風詭異,丑到極致。

      再后來瀏覽網頁的過程中,發現很多很多網站項目中都使用了一種叫極驗驗證的驗證碼,采用移動滑塊的方式進行驗證,方便美觀。而一番搜索之后了解到,官方提供的免費版也足以應付我手頭的大多數項目了,不禁想把在MVC學習過程中試著使用極驗驗證來作為登錄的驗證碼。

      極驗官方提供了C#的SDK和Demo供開發者參考,不過是Webform版本的,可讀性不是很高,而現在使用Webform進行網站開發的也基本消失了,我將在官方Webform代碼的基礎上,將其用在ASP.NET MVC程序中。

注冊極驗

到極驗官網注冊賬號之后進入后臺管理界面,點擊添加驗證

添加后我們可以得到ID和KEY

完成驗證邏輯

1. 首先我們需要引入官方的Geetestlib類

using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Security.Cryptography;using System.Net;using System.IO;namespace PMS.WebApp.Models{ /// <summary> /// GeetestLib 極驗驗證C# SDK基本庫 /// </summary> public class GeetestLib {  /// <summary>  /// SDK版本號  /// </summary>  public const String version = "3.2.0";  /// <summary>  /// SDK開發語言  /// </summary>  public const String sdkLang = "csharp";  /// <summary>  /// 極驗驗證API URL  /// </summary>  protected const String apiUrl = "http://api.geetest.com";  /// <summary>  /// register url  /// </summary>  protected const String registerUrl = "/register.php";  /// <summary>  /// validate url  /// </summary>  protected const String validateUrl = "/validate.php";  /// <summary>  /// 極驗驗證API服務狀態Session Key  /// </summary>  public const String gtServerStatusSessionKey = "gt_server_status";  /// <summary>  /// 極驗驗證二次驗證表單數據 Chllenge  /// </summary>  public const String fnGeetestChallenge = "geetest_challenge";  /// <summary>  /// 極驗驗證二次驗證表單數據 Validate  /// </summary>  public const String fnGeetestValidate = "geetest_validate";  /// <summary>  /// 極驗驗證二次驗證表單數據 Seccode  /// </summary>  public const String fnGeetestSeccode = "geetest_seccode";  private String userID = "";  private String responseStr = "";  private String captchaID = "";  private String privateKey = "";  /// <summary>  /// 驗證成功結果字符串  /// </summary>  public const int successResult = 1;  /// <summary>  /// 證結失敗驗果字符串  /// </summary>  public const int failResult = 0;  /// <summary>  /// 判定為機器人結果字符串  /// </summary>  public const String forbiddenResult = "forbidden";  /// <summary>  /// GeetestLib構造函數  /// </summary>  /// <param name="publicKey">極驗驗證公鑰</param>  /// <param name="privateKey">極驗驗證私鑰</param>  public GeetestLib(String publicKey, String privateKey)  {   this.privateKey = privateKey;   this.captchaID = publicKey;  }  private int getRandomNum()  {   Random rand =new Random();   int randRes = rand.Next(100);   return randRes;  }  /// <summary>  /// 驗證初始化預處理  /// </summary>  /// <returns>初始化結果</returns>  public Byte preProcess()  {   if (this.captchaID == null)   {    Console.WriteLine("publicKey is null!");   }   else   {    String challenge = this.registerChallenge();    if (challenge.Length == 32)    {     this.getSuccessPreProcessRes(challenge);     return 1;    }    else    {     this.getFailPreProcessRes();     Console.WriteLine("Server regist challenge failed!");    }   }   return 0;  }  public Byte preProcess(String userID)  {   if (this.captchaID == null)   {    Console.WriteLine("publicKey is null!");   }   else   {    this.userID = userID;    String challenge = this.registerChallenge();    if (challenge.Length == 32)    {     this.getSuccessPreProcessRes(challenge);     return 1;    }    else    {     this.getFailPreProcessRes();     Console.WriteLine("Server regist challenge failed!");    }   }   return 0;  }  public String getResponseStr()  {   return this.responseStr;  }  /// <summary>  /// 預處理失敗后的返回格式串  /// </summary>  private void getFailPreProcessRes()  {   int rand1 = this.getRandomNum();   int rand2 = this.getRandomNum();   String md5Str1 = this.md5Encode(rand1 + "");   String md5Str2 = this.md5Encode(rand2 + "");   String challenge = md5Str1 + md5Str2.Substring(0, 2);   this.responseStr = "{" + string.Format(     "/"success/":{0},/"gt/":/"{1}/",/"challenge/":/"{2}/"", 0,    this.captchaID, challenge) + "}";  }  /// <summary>  /// 預處理成功后的標準串  /// </summary>  private void getSuccessPreProcessRes(String challenge)  {   challenge = this.md5Encode(challenge + this.privateKey);   this.responseStr ="{" + string.Format(    "/"success/":{0},/"gt/":/"{1}/",/"challenge/":/"{2}/"", 1,     this.captchaID, challenge) + "}";  }  /// <summary>  /// failback模式的驗證方式  /// </summary>  /// <param name="challenge">failback模式下用于與validate一起解碼答案, 判斷驗證是否正確</param>  /// <param name="validate">failback模式下用于與challenge一起解碼答案, 判斷驗證是否正確</param>  /// <param name="seccode">failback模式下,其實是個沒用的參數</param>  /// <returns>驗證結果</returns>  public int failbackValidateRequest(String challenge, String validate, String seccode)  {   if (!this.requestIsLegal(challenge, validate, seccode)) return GeetestLib.failResult;   String[] validateStr = validate.Split('_');   String encodeAns = validateStr[0];   String encodeFullBgImgIndex = validateStr[1];   String encodeImgGrpIndex = validateStr[2];   int decodeAns = this.decodeResponse(challenge, encodeAns);   int decodeFullBgImgIndex = this.decodeResponse(challenge, encodeFullBgImgIndex);   int decodeImgGrpIndex = this.decodeResponse(challenge, encodeImgGrpIndex);   int validateResult = this.validateFailImage(decodeAns, decodeFullBgImgIndex, decodeImgGrpIndex);   return validateResult;  }  private int validateFailImage(int ans, int full_bg_index, int img_grp_index)  {   const int thread = 3;   String full_bg_name = this.md5Encode(full_bg_index + "").Substring(0, 10);   String bg_name = md5Encode(img_grp_index + "").Substring(10, 10);   String answer_decode = "";   for (int i = 0;i < 9; i++)   {    if (i % 2 == 0) answer_decode += full_bg_name.ElementAt(i);    else if (i % 2 == 1) answer_decode += bg_name.ElementAt(i);   }   String x_decode = answer_decode.Substring(4);   int x_int = Convert.ToInt32(x_decode, 16);   int result = x_int % 200;   if (result < 40) result = 40;   if (Math.Abs(ans - result) < thread) return GeetestLib.successResult;   else return GeetestLib.failResult;  }  private Boolean requestIsLegal(String challenge, String validate, String seccode)  {   if (challenge.Equals(string.Empty) || validate.Equals(string.Empty) || seccode.Equals(string.Empty)) return false;   return true;  }  /// <summary>  /// 向gt-server進行二次驗證  /// </summary>  /// <param name="challenge">本次驗證會話的唯一標識</param>  /// <param name="validate">拖動完成后server端返回的驗證結果標識字符串</param>  /// <param name="seccode">驗證結果的校驗碼,如果gt-server返回的不與這個值相等則表明驗證失敗</param>  /// <returns>二次驗證結果</returns>  public int enhencedValidateRequest(String challenge, String validate, String seccode)  {   if (!this.requestIsLegal(challenge, validate, seccode)) return GeetestLib.failResult;   if (validate.Length > 0 && checkResultByPrivate(challenge, validate))   {    String query = "seccode=" + seccode + "&sdk=csharp_" + GeetestLib.version;    String response = "";    try    {     response = postValidate(query);    }    catch (Exception e)    {     Console.WriteLine(e);    }    if (response.Equals(md5Encode(seccode)))    {     return GeetestLib.successResult;    }   }   return GeetestLib.failResult;  }  public int enhencedValidateRequest(String challenge, String validate, String seccode, String userID)  {   if (!this.requestIsLegal(challenge, validate, seccode)) return GeetestLib.failResult;   if (validate.Length > 0 && checkResultByPrivate(challenge, validate))   {    String query = "seccode=" + seccode + "&user_id=" + userID + "&sdk=csharp_" + GeetestLib.version;    String response = "";    try    {     response = postValidate(query);    }    catch (Exception e)    {     Console.WriteLine(e);    }    if (response.Equals(md5Encode(seccode)))    {     return GeetestLib.successResult;    }   }   return GeetestLib.failResult;  }  private String readContentFromGet(String url)  {   try   {    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);    request.Timeout = 20000;    HttpWebResponse response = (HttpWebResponse)request.GetResponse();    Stream myResponseStream = response.GetResponseStream();    StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));    String retString = myStreamReader.ReadToEnd();    myStreamReader.Close();    myResponseStream.Close();    return retString;   }   catch   {    return "";     }  }  private String registerChallenge()  {   String url = "";   if (string.Empty.Equals(this.userID))   {    url = string.Format("{0}{1}?gt={2}", GeetestLib.apiUrl, GeetestLib.registerUrl, this.captchaID);   }   else   {    url = string.Format("{0}{1}?gt={2}&user_id={3}", GeetestLib.apiUrl, GeetestLib.registerUrl, this.captchaID, this.userID);   }   string retString = this.readContentFromGet(url);   return retString;  }  private Boolean checkResultByPrivate(String origin, String validate)  {   String encodeStr = md5Encode(privateKey + "geetest" + origin);   return validate.Equals(encodeStr);  }  private String postValidate(String data)  {   String url = string.Format("{0}{1}", GeetestLib.apiUrl, GeetestLib.validateUrl);   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);   request.Method = "POST";   request.ContentType = "application/x-www-form-urlencoded";   request.ContentLength = Encoding.UTF8.GetByteCount(data);   // 發送數據   Stream myRequestStream = request.GetRequestStream();   byte[] requestBytes = System.Text.Encoding.ASCII.GetBytes(data);   myRequestStream.Write(requestBytes, 0, requestBytes.Length);   myRequestStream.Close();   HttpWebResponse response = (HttpWebResponse)request.GetResponse();   // 讀取返回信息   Stream myResponseStream = response.GetResponseStream();   StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));   string retString = myStreamReader.ReadToEnd();   myStreamReader.Close();   myResponseStream.Close();   return retString;  }  private int decodeRandBase(String challenge)  {   String baseStr = challenge.Substring(32, 2);   List<int> tempList = new List<int>();   for(int i = 0; i < baseStr.Length; i++)   {    int tempAscii = (int)baseStr[i];    tempList.Add((tempAscii > 57) ? (tempAscii - 87)     : (tempAscii - 48));   }   int result = tempList.ElementAt(0) * 36 + tempList.ElementAt(1);   return result;  }  private int decodeResponse(String challenge, String str)  {   if (str.Length>100) return 0;   int[] shuzi = new int[] { 1, 2, 5, 10, 50};   String chongfu = "";   Hashtable key = new Hashtable();   int count = 0;   for (int i=0;i<challenge.Length;i++)   {    String item = challenge.ElementAt(i) + "";    if (chongfu.Contains(item)) continue;    else    {     int value = shuzi[count % 5];     chongfu += item;     count++;     key.Add(item, value);    }   }   int res = 0;   for (int i = 0; i < str.Length; i++) res += (int)key[str[i]+""];   res = res - this.decodeRandBase(challenge);   return res;  }  private String md5Encode(String plainText)  {   MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();   string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(plainText)));   t2 = t2.Replace("-", "");   t2 = t2.ToLower();   return t2;  } }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
香蕉在线观看视频| 国产乱子伦精品无码码专区| 久久久久国产精品免费| 国产精品996| 国产高清自拍视频| 高清视频一区二区三区| 欧美在线视频你懂得| www.欧美国产| 佐山爱在线视频| 成人午夜两性视频| 欧美一区二区黄| 国产自产一区二区| 男女激情无遮挡| 国产精品伦子伦免费视频| 在线看国产一区二区| 日本在线不卡视频| 91资源在线播放| 亚洲人成网站在线观看播放| 中文字幕亚洲无线码a| 亚洲欧洲精品一区二区三区 | 国产 中文 字幕 日韩 在线| 亚洲免费在线精品一区| 91精品国产自产91精品| 欧美天堂在线观看| 成人高清免费观看| 亚洲一区二区三区网站| 影音先锋黄色资源| 国产综合色一区二区三区| 色综合网站在线| aa级大片欧美| 丰满人妻av一区二区三区| 美女爆乳18禁www久久久久久 | 亚洲 欧美 日韩系列| 久久久国产精品一区二区三区| 中文字幕日韩欧美在线| 同产精品九九九| 久久这里只有精品6| 日本人妖一区二区| www.国产黄色| 国产又大又粗又爽| 黄色av免费播放| 亚洲精品久久久久久宅男| 国产女主播av| 牛人盗摄一区二区三区视频| 国产福利精品av综合导导航| 精品国产不卡一区二区三区| 色综合久久久久网| 欧美另类高清videos的特点| 久草网视频在线观看| 最近中文字幕在线mv视频在线| 午夜免费福利视频在线观看| 国产免费毛卡片| 免费网站永久免费观看| 日韩视频在线播放| 永久免费看av| 日韩理论片久久| 成人听书哪个软件好| 亚洲专区区免费| 亚洲一区中文字幕在线观看| 亚洲国产欧美自拍| 久久成人羞羞网站| av最新在线观看| 久久天天躁狠狠躁夜夜躁2014| 成人国产精品免费观看动漫| 日韩成人在线免费视频| 无码人妻精品一区二区中文| 捆绑裸体绳奴bdsm亚洲| 男女激情无遮挡| 国产另类第一区| 啪一啪鲁一鲁2019在线视频| 欧美美女视频在线观看| 欧美色图第一页| 欧美剧情片在线观看| 日韩一区二区免费电影| 欧美日本韩国一区二区三区视频| 欧美在线你懂的| 亚洲精品国产欧美| 久久精品99久久久久久久久| 欧美激情久久久久| 欧美α欧美αv大片| 中文字幕自拍偷拍| 国产黄色av网站| 免费在线看成人av| 成人激情校园春色| 亚洲视频小说图片| 色哟哟日韩精品| 亚洲精品国精品久久99热一| 欧美精品亚州精品| 99久久99久久精品国产片| 91久久久久久| 国产又粗又硬又长又爽| 欧美激情综合色综合啪啪五月| 91麻豆精品国产自产在线 | 欧美一区二区三区四区五区六区| 欧美爱爱视频网站| 香蕉视频1024| 亚洲一区和二区| 影音先锋男人看片资源| 91青青草免费在线看| 中文字幕亚洲字幕| 亚洲va男人天堂| 久久久99爱| 深夜福利网站在线观看| 日韩精品在线不卡| 国产精品一区二区三区乱码| 五月天久久比比资源色| 日韩中文字幕精品| 日本一区二区三区四区在线观看| 在线观看日本www| 国产在线视频第一页| 精品一区二区三区香蕉蜜桃 | 久久亚洲精品小早川怜子| 69堂成人精品免费视频| 国产精品中文久久久久久久| 国产成人a亚洲精v品无码| 久久精品这里只有精品| 久久久久久久性| 亚洲精品一区二区在线观看| 视频直播国产精品| 亚洲色图都市激情| 精品国产免费观看| 久久99精品久久只有精品| 亚洲欧洲精品一区二区三区| 亚洲另类xxxx| 五码日韩精品一区二区三区视频| 亚洲人成色77777| 97国产成人无码精品久久久| 国产精品国产a级| 久久99国产综合精品女同| 日韩中文字幕亚洲精品欧美| 国产69精品久久久久久久久久| 国产婷婷色一区二区三区| 欧美黑人极品猛少妇色xxxxx| 亚洲一区二区三区xxx视频| 97中文字幕在线观看| 奇米精品一区二区三区在线观看| 欧美一区二区三区在线看| 免费久久99精品国产自| 九九久久免费视频| 一区二区不卡在线视频 午夜欧美不卡在| 国内成人精品视频| 国产精品无码久久久久久| 国产精品综合一区二区三区| 日韩中文字幕在线免费观看| 精品久久久久久无码国产| 性感美女一级片| 亚洲国产欧美精品| 久久99中文字幕| 久久国产精品一区二区| 久久五月情影视| 亚洲一区二区三区四区av| 成人免费毛片a| 日韩av最新在线| 一级黄色免费在线观看| 中文字幕在线日本| 亚洲国产三级在线| 99在线高清视频在线播放| 国产在线观看免费视频今夜| 色综合久久久久网| 国产av自拍一区| 国产乱子伦精品无码专区| 国产熟女一区二区丰满| 精品国产自在久精品国产| www.日本在线视频| 国产日产精品一区| 日韩三级av在线播放| 国产精品久久久一区二区三区| 久久精品免费在线| 日韩一级在线观看| 97公开免费视频| 北条麻妃一区二区三区| 国产女精品视频网站免费| 国产无码精品一区二区| 欧美日韩国产经典色站一区二区三区 | 97免费在线视频| 欧美三级 欧美一级| 日韩网站免费观看| 亚洲欧美日韩国产成人综合一二三区 | 亚洲av成人精品一区二区三区 | 欧美激情18p| 国产原创popny丨九色| 美女网站久久| 亚洲欧洲日韩在线| 国产一区二区三区丝袜| 日韩欧美精品久久| 中文字幕无码毛片免费看| 亚洲av无码乱码国产精品久久 | 国产内射老熟女aaaa∵| 成人在线精品视频| 久久精品视频在线看| 日本在线观看视频网站| 欧美在线视频观看免费网站| 亚洲免费成人网| 中文字幕欧美精品在线| 日本 欧美 国产| 一区二区三区视频在线| 久久高清无码视频| kk眼镜猥琐国模调教系列一区二区| 国产精品日日摸夜夜添夜夜av| 麻豆精品国产传媒| 伊人久久五月天| 高清乱码毛片入口| 免费黄频在线观看| 欧美精品videosex极品1| 国产福利视频一区| 少妇极品熟妇人妻无码| 午夜精彩视频在线观看不卡| 国产一卡二卡在线播放| 国产精品videossex国产高清| 欧美日韩一区二区三区四区五区六区| 国产欧美精品日韩区二区麻豆天美| 国产精品普通话| a天堂视频在线| 久久久久久一区二区三区| 国产精品999在线观看| 亚洲天堂网站在线观看视频| 国产手机在线视频| 日韩在线精品视频| 国产又粗又猛又爽又黄的| 91精品国产网站| 久久久久久网| 欧美日韩亚洲免费| 亚洲国产成人午夜在线一区| 国产精品igao激情视频| 午夜精品福利久久久| 日本免费福利视频| 亚洲日本成人网| 毛片a片免费观看| 黑人欧美xxxx| 99re视频在线| 精品在线一区二区三区| 久久成人资源| 国产精品视频一二三| 亚洲一区二区三区观看| 欧美一区二区三区在线电影| 色婷婷在线影院| 欧美va亚洲va香蕉在线| 波多结衣在线观看| 国产精品一色哟哟| 136国产福利精品导航| 国产成人av影视| 精品剧情v国产在线观看在线| 日本三级黄色大片| 亚洲av片一区二区三区| 亚洲免费电影一区| 国产精品高潮呻吟av| 国产99视频精品免费视频36| 国产精品入口麻豆九色| 三上悠亚作品在线观看| 欧美国产在线视频| 欧美色倩网站大全免费| 五月天网站亚洲| 免费看污片的网站| 色综合久久悠悠| 国产成a人无v码亚洲福利| 国产免费一区二区三区视频| 亚洲成人中文字幕| 久久天堂精品| 久久久精品麻豆| 日韩欧美黄色影院| 一级做a爰片久久毛片16| 欧美视频在线免费播放| 国产丝袜视频一区| 久久人人爽人人爽人人片av免费| 国产欧美日韩另类| 成人一区二区三区视频| 捆绑裸体绳奴bdsm亚洲| 久久视频在线观看免费| 成人午夜激情片| 免费看裸体网站| 国产精品视频99| 亚洲精品一二三| 中文字幕一区二区人妻电影| 中文字幕中文字幕在线中心一区| 欧美酷刑日本凌虐凌虐| 视频在线观看91| 精品日韩在线播放| 91麻豆精品久久久久蜜臀| 91精品国产一区二区三区| www.激情网| 亚洲精品国产品国语在线| 丝袜诱惑制服诱惑色一区在线观看| 亚洲娇小娇小娇小| 国产日韩欧美综合| 欧美日韩一区二区三区在线| 久久国产精品第一页| 免费成人深夜夜行p站| 99久久精品久久久久久ai换脸| 亚洲精品大片www| 另类调教123区| 久久久久久久久久久影视| 国产精品福利网站| 成人性视频欧美一区二区三区| a级片免费观看| 国产精久久久久| 日产精品高清视频免费| 亚洲xxx自由成熟| 国产视频久久久| 高清国产一区二区三区| 天天干天天色天天干| 神马影院我不卡| 国产ts一区二区| 日韩av中文字幕在线播放| 一区二区三区成人在线视频| 无码人妻丰满熟妇区五十路 | 秘密基地免费观看完整版中文| 久久av一区二区| 91久久精品国产91久久性色| 日本视频久久久| 日产精品久久久一区二区福利| 国自产精品手机在线观看视频| 韩国美女主播一区| 超薄丝袜一区二区| 色爱精品视频一区| 午夜精品一区二区三区视频免费看| 日韩在线免费高清视频| 久久久亚洲成人| 欧美黑人xxxx| 日本r级电影在线观看| 最新黄色网址在线观看| 两女双腿交缠激烈磨豆腐| 一区在线电影| 91综合免费在线| 中文字幕亚洲一区二区三区五十路 | 裸体女人亚洲精品一区| 亚洲国产女人aaa毛片在线| 97aⅴ精品视频一二三区| 99这里有精品视频| 亚洲一区二区久久久| 午夜天堂在线视频| 亚洲精品一区二区18漫画| 91精品国产自产| 精品国产国产综合精品| 在线视频 91| 免费观看日韩电影| 国产亚洲欧美色| 色婷婷av一区| 日韩亚洲欧美中文三级| 亚洲精品中文字| 国产精品99久久久久久人| 日韩欧美一区二区在线观看 | 日韩一区二区三区国产| 九九热这里只有精品免费看| 国产精品香蕉av| av观看免费在线| 久久亚洲国产成人精品性色| 午夜影院在线视频| 偷拍一区二区三区| 韩日精品中文字幕| 成人精品视频一区二区| 亚洲GV成人无码久久精品| 欧美国产一区二区在线观看| 一色桃子一区二区| 国产精品夜夜夜爽张柏芝| 久久久久久91亚洲精品中文字幕| www.亚洲人| 插插插亚洲综合网| 欧美视频第三页| 天堂av一区二区三区| 91精品在线免费| 欧美一区二区三区精美影视 | 丁香五精品蜜臀久久久久99网站| 日韩一级片在线观看| 特级西西444www大精品视频| 国产精品9191| 亚洲成人免费看| 亚洲国产精品一区二区www在线| 亚洲精品一线二线三线| 九九视频直播综合网| 久久亚洲国产精品日日av夜夜| 亚欧在线免费观看| 亚洲图片欧美在线| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲美女喷白浆| 免费精品视频一区| 国产无遮挡aaa片爽爽| 国产精品亲子伦对白| 亚洲国产高清高潮精品美女| 国产欧美一区二区三区久久人妖 | 国产精品theporn88| 日韩av综合在线观看| 成人免费一区二区三区| 五月天欧美精品| www.久久草| 国产视频123区| 中文字幕二三区不卡| 国产精品久久久久久影视| 欧洲一级黄色片| 99久久精品国产麻豆演员表| 日韩在线精品视频| 成人av毛片在线观看| 日本sm残虐另类| 亚洲另类xxxx| 污色网站在线观看| 国产精品一级片在线观看| 九九精品视频在线观看| 91亚洲精品国产| www.av网站| 亚洲天堂一区二区三区| 久久精品99国产| 国产一区亚洲一区| 国外成人性视频| 三级黄色片在线观看| 亚洲男同1069视频| 国产精品对白一区二区三区| 亚洲午夜18毛片在线看| 欧美成人一区二区三区片免费| 丝袜制服一区二区三区| 久久久久久久电影| 欧美尤物一区|