整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          轉(zhuǎn)換csv文件為插入的sql腳本web端實(shí)現(xiàn)方案

          轉(zhuǎn)換csv文件為插入的sql腳本web端實(shí)現(xiàn)方案

          景:

          上一篇文章分享了一個(gè)本地的實(shí)現(xiàn)方案,但是這個(gè)盡管打包成exe的完整包的方式,由于實(shí)現(xiàn)方式是使用python,打包出來(lái)后的文件里包含了使用到的庫(kù)和python運(yùn)行程序,啟動(dòng)時(shí)內(nèi)部會(huì)需要解壓出來(lái),所以啟動(dòng)會(huì)比較慢,大概3~5秒啟動(dòng),對(duì)于追求性能的優(yōu)秀人才就會(huì)覺(jué)得這個(gè)效率太低了,那能不能實(shí)現(xiàn)一個(gè)web方案,這樣web端提供一個(gè)傳入需要轉(zhuǎn)換的文件,然后返回一個(gè)轉(zhuǎn)換好的文件,這樣就不需要每個(gè)人的包都那么大,運(yùn)行還慢,而且還沒(méi)法實(shí)時(shí)更新。

          解決方案:

          1.通過(guò)web前端進(jìn)行文件上傳到服務(wù)器上,設(shè)置一個(gè)提交頁(yè)面模板文件uploader.html

          <html>
          <head>
              <meta charset="UTF-8">
            <title>文件上傳</title>
          </head>
          <body>
              <form action="/uploadfile" method="POST" enctype="multipart/form-data">
                  <input type="file" name="uploadfile"  />
                  <input type="submit" value="提交" />
              </form>
          </body>
          </html>

          2.創(chuàng)建一個(gè)接口進(jìn)行文件的上傳,利用flask進(jìn)行接口生成

          from flask import Flask
          
          from biz.openapi.com_api_webres import blue_webres_mgr
          
          webapp=Flask(__name__, template_folder='../biz/templates')
          webapp.register_blueprint(blueprint=blue_webres_mgr)
          
          if __name__=='__main__':
              webapp.run(port=8083)
          
          blue_webres_mgr=Blueprint('webres_mgr', __name__, template_folder='../templates')
          webconfig={}
          webconfig['UPLOAD_FOLDER']='../upload/'
          
          @blue_webres_mgr.route('/upload')
          def upload_file():
              return render_template('uploader.html')
          
          @blue_webres_mgr.route('/uploadfile',methods=['GET','POST'])
          def uploader_File():
              if request.method=='POST':
                  f=request.files['uploadfile']
                  basefilepath=os.path.join(webconfig['UPLOAD_FOLDER']) + f.filename
                  newfilename=''
                  if os.path.exists(basefilepath):
          
                      fileext=os.path.splitext(f.filename)[-1]
                      filename=os.path.basename(f.filename).split(fileext)[0]
                      newfilename="{}_{}{}".format(filename, int(time.time()), fileext)
                      basefilepath="{}{}".format(os.path.join(webconfig['UPLOAD_FOLDER']),newfilename)
          
                  f.save(basefilepath)
                  transcsv=TransCSVDataToSql(basefilepath)
                  filepath, webdir, sqlfile=transcsv.TransFile()
                  linkurl='http://127.0.0.1/{}/{}'.format(webdir, sqlfile)
                  return render_template('downloadsql.html',transfile=f.filename,respath=filepath,linkurl=linkurl, sqlfile=sqlfile)
              else:
                  return render_template('uploader.html')

          3.利用nginx建立一個(gè)web網(wǎng)站服務(wù),可以直接使用phpstudy一鍵部署

          啟動(dòng)nginx就可以了,當(dāng)然如果需要配置不同的端口,還有地址的,自行通過(guò)配置按鈕進(jìn)行配置

          4.調(diào)用上一篇文章中的文件讀取,轉(zhuǎn)換的實(shí)現(xiàn)類進(jìn)行文件的轉(zhuǎn)換和存儲(chǔ)

          轉(zhuǎn)換后的文件直接存放到web網(wǎng)站的www下的工程目錄下

          首先配置好自己的目錄地址

          def __init__(self, csvFile:str):
              self.CSVFile=csvFile
              # 保存的文件名
              self.SaveFile='trans_{}.sql'.format(time.time())
              # 項(xiàng)目保存的目錄
              self.WebDir='softfiles'
              # phpstudy指定的www所在目錄+項(xiàng)目的目錄
              self.WebbasePath='D:/phpstudy_pro/WWW/softfiles/'

          配置的是WWW就是網(wǎng)站下的softfiles目錄下

          5.輸出網(wǎng)站可以訪問(wèn)到的頁(yè)面下載地址

          配置web可以訪問(wèn)的到的地址

          linkurl='http://127.0.0.1/{}/{}'.format(webdir, sqlfile)

          如果發(fā)布在公網(wǎng)或者內(nèi)網(wǎng)上,則把127.0.0.1的IP更改為部署好的服務(wù)器域名或IP即可

          配置下載頁(yè)面的html模板downloadsql.html

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>轉(zhuǎn)換好的sql</title>
          </head>
          <body>
          <table border="1">
              <tr>
                  <th>文件所在路徑</th>
                  <th>需要轉(zhuǎn)換的csv文件</th>
                  <th>轉(zhuǎn)換完成的sql文件</th>
                  <th>下載地址</th>
              </tr>
              <tr>
                  <td>{{respath}}</td>
                  <td>{{transfile}}</td>
                  <td>{{sqlfile}}</td>
                  <td><a href={{linkurl}}>下載地址</a></td>
              </tr>
          </table>
          
          </body>
          </html>

          6.來(lái)看看最終的效果吧

          啟動(dòng)服務(wù)端,

          啟動(dòng)Nginx,在瀏覽器中輸入

          127.0.0.1:8083/upload

          出現(xiàn)頁(yè)面

          然后點(diǎn)擊瀏覽,打開(kāi)導(dǎo)出的csv文件

          選擇好后點(diǎn)擊打開(kāi),最后點(diǎn)擊頁(yè)面中的“提交”按鈕

          會(huì)展現(xiàn)一個(gè)下載頁(yè)面地址

          點(diǎn)擊下載地址即可進(jìn)行轉(zhuǎn)換后的文件的下載,然后就可以使用這個(gè)sql腳本進(jìn)行刷庫(kù)了

          結(jié)語(yǔ):

          通過(guò)這個(gè)web端的轉(zhuǎn)換,對(duì)于使用用戶來(lái)說(shuō),只需要輸入一個(gè)地址,然后上傳文件即可完成轉(zhuǎn)換工作,比本地版要快速很多,而且只要web端更新了新的解析規(guī)則,自己都不需要去處理,自然就能使用到最新的,啟動(dòng)效率也是大大提升。

          好了,今天的分享就到這了,感謝大家的閱讀!

          話說(shuō)選擇不對(duì),努力白費(fèi),對(duì)于C#的學(xué)習(xí)也是一樣方向不對(duì)努力白費(fèi)。

          新手或者有經(jīng)驗(yàn)的開(kāi)發(fā)者學(xué)習(xí)c#時(shí)往往不知道該學(xué)習(xí)哪個(gè)技術(shù),哪些框架。

          盲目的學(xué)習(xí)會(huì)導(dǎo)致不足以學(xué)以致用,下面就來(lái)分享幾個(gè)學(xué)習(xí)路線圖。

          一、后端開(kāi)發(fā)路線

          這條線路是純后端開(kāi)發(fā),主要做服務(wù)端開(kāi)發(fā),前后端分離是當(dāng)下的主流開(kāi)發(fā)模式。該路線方向需要學(xué)習(xí)以下技能:

          1、基礎(chǔ)知識(shí):c#基礎(chǔ)知識(shí)、Asp.Net Core相關(guān)知識(shí)、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學(xué)習(xí)EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、數(shù)據(jù)庫(kù):MySql、SqlServer 深入學(xué)習(xí)其中一種即可,另一種需要熟悉

          4、日志組件:NLog或者Serilog

          5、定時(shí)框架:Quartz.Net Core或者Handfire

          6、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          7、架構(gòu)方面:經(jīng)典三層、熟悉DDD架構(gòu)模式(可選)、熟悉微服務(wù)(可選)

          8、CICD:熟悉Linux操作系統(tǒng)、Git代碼管理器、Doker(可選)、K8s(可選)

          二、c/s客戶端開(kāi)發(fā)路線

          當(dāng)下物聯(lián)網(wǎng)開(kāi)發(fā)正火很多大廠都在招物聯(lián)網(wǎng)技術(shù)開(kāi)發(fā)

          1、基礎(chǔ)知識(shí):c#基礎(chǔ)知識(shí)、Asp.Net Core相關(guān)知識(shí)、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學(xué)習(xí)EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、數(shù)據(jù)庫(kù):MySql、SqlServer 深入學(xué)習(xí)其中一種即可,另一種需要熟悉

          4、日志組件:NLog或者Serilog

          5、定時(shí)框架:Quartz.Net Core或者Handfire

          6、客戶端方面:Wpf(深入學(xué)習(xí))、MQtt協(xié)議、Winfrom(可選)

          7、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          8、架構(gòu)方面:經(jīng)典三層、熟悉DDD架構(gòu)模式(可選)、熟悉微服務(wù)(可選)

          9、CICD:熟悉Linux操作系統(tǒng)、Git代碼管理器、Doker(可選)、K8s(可選)

          三、Web全棧開(kāi)發(fā)路線1

          該路線是全棧開(kāi)發(fā),需要學(xué)習(xí)前端的一些基礎(chǔ)知識(shí):

          1、基礎(chǔ)知識(shí):c#基礎(chǔ)知識(shí)、Asp.Net Core相關(guān)知識(shí)、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學(xué)習(xí)EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、數(shù)據(jù)庫(kù):MySql、SqlServer 深入學(xué)習(xí)其中一種即可,另一種需要熟悉

          4、日志組件:NLog或者Serilog

          5、定時(shí)框架:Quartz.Net Core或者Handfire

          6、前端方面:Asp.Net Mvc、js、html、css、Vue(React、Angula js)

          7、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          8、架構(gòu)方面:經(jīng)典三層、熟悉DDD架構(gòu)模式(可選)、熟悉微服務(wù)(可選)

          9、CICD:熟悉Linux操作系統(tǒng)、Git代碼管理器、Doker(可選)、K8s(可選)

          四、Web全棧開(kāi)發(fā)路線2

          c#全棧開(kāi)發(fā)方向,使用c#開(kāi)發(fā)前后端功能,不需要學(xué)習(xí)js和html

          1、基礎(chǔ)知識(shí):c#基礎(chǔ)知識(shí)、Asp.Net Core相關(guān)知識(shí)、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學(xué)習(xí)EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、數(shù)據(jù)庫(kù):MySql、SqlServer 深入學(xué)習(xí)其中一種即可,另一種需要熟悉

          4、日志組件:NLog或者Serilog

          5、定時(shí)框架:Quartz.Net Core或者Handfire

          6、前端方面:Blazer(深入學(xué)習(xí))

          7、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          8、架構(gòu)方面:經(jīng)典三層、熟悉DDD架構(gòu)模式(可選)、熟悉微服務(wù)(可選)

          9、CICD:熟悉Linux操作系統(tǒng)、Git代碼管理器、Doker(可選)、K8s(可選)

          五、游戲開(kāi)發(fā)路線

          1、基礎(chǔ)知識(shí):c#基礎(chǔ)知識(shí)、Asp.Net Core相關(guān)知識(shí)、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學(xué)習(xí)EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、游戲引擎:Unity3d(深入學(xué)習(xí))

          4、日志組件:NLog或者Serilog

          5、定時(shí)框架:Quartz.Net Core或者Handfire

          6、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          7、架構(gòu)方面:經(jīng)典三層、熟悉DDD架構(gòu)模式(可選)、熟悉微服務(wù)(可選)

          8、CICD:熟悉Linux操作系統(tǒng)、Git代碼管理器、Doker(可選)、K8s(可選)

          六、移動(dòng)端開(kāi)發(fā)路線

          如果你項(xiàng)從事開(kāi)發(fā)移動(dòng)應(yīng)用,使用c#開(kāi)發(fā)原生安卓、IOS、Mac 應(yīng)用你需要掌握以下技術(shù)

          1、基礎(chǔ)知識(shí):c#基礎(chǔ)知識(shí)、Asp.Net Core相關(guān)知識(shí)、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學(xué)習(xí)EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、數(shù)據(jù)庫(kù):SqlLite

          4、日志組件:NLog或者Serilog

          5、定時(shí)框架:Quartz.Net Core或者Handfire

          6、客戶端方面:Xamarin(深入學(xué)習(xí))、Maui

          7、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          8、架構(gòu)方面:經(jīng)典三層、熟悉DDD架構(gòu)模式(可選)、熟悉微服務(wù)(可選)

          9、CICD:熟悉Linux操作系統(tǒng)、Git代碼管理器、Doker(可選)、K8s(可選)

          學(xué)習(xí)路線四五條總有你在用的一條,如果你還有其他路線歡迎留言,一起探討新的學(xué)習(xí)方向。

          #學(xué)編程#

          背景

          京東SRC(Security Response Center)收錄大量外部白帽子提交的sql注入漏洞,漏洞發(fā)生的原因多為sql語(yǔ)句拼接和Mybatis使用不當(dāng)導(dǎo)致。

          2 手工檢測(cè)

          2.1 前置知識(shí)

          mysql5.0以上版本中存在一個(gè)重要的系統(tǒng)數(shù)據(jù)庫(kù)information_schema,通過(guò)此數(shù)據(jù)庫(kù)可訪問(wèn)mysql中存在的數(shù)據(jù)庫(kù)名、表名、字段名等元數(shù)據(jù)。information_schema中有三個(gè)表成為了sql注入構(gòu)造的關(guān)鍵。

          1)infromation_schema.columns:

          • table_schema 數(shù)據(jù)庫(kù)名
          • table_name 表名
          • column_name 列名

          2)information_schema.tables

          • table_schema 數(shù)據(jù)庫(kù)名
          • table_name 表名

          3)information_schema.schemata

          • schema_name 數(shù)據(jù)庫(kù)名

          SQL注入常用SQL函數(shù)

          • length(str) :返回字符串str的長(zhǎng)度
          • substr(str, pos, len) :將str從pos位置開(kāi)始截取len長(zhǎng)度的字符進(jìn)行返回。注意這里的pos位置是從1開(kāi)始的,不是數(shù)組的0開(kāi)始
          • mid(str,pos,len) :跟上面的一樣,截取字符串
          • ascii(str) :返回字符串str的最左面字符的ASCII代碼值
          • ord(str) :將字符或布爾類型轉(zhuǎn)成ascll碼
          • if(a,b,c) :a為條件,a為true,返回b,否則返回c,如if(1>2,1,0),返回0

          2.2 注入類型

          2.2.1 參數(shù)類型分類

          • 整型注入
            例如?id=1,其中id為注入點(diǎn),類型為int類型。
          • 字符型注入
            例如?id=”1”,其中id為注入點(diǎn),類型為字符型,要考慮閉合后端sql語(yǔ)句中的引號(hào)。

          2.2.2 注入方式分類

          • 盲注
          • 布爾盲注:只能從應(yīng)用返回中推斷語(yǔ)句執(zhí)行后的布爾值。
          • 時(shí)間盲注:應(yīng)用沒(méi)有明確的回顯,只能使用特定的時(shí)間函數(shù)來(lái)判斷,例如sleep,benchmark等。
          • 報(bào)錯(cuò)注入:應(yīng)用會(huì)顯示全部或者部分的報(bào)錯(cuò)信息
          • 堆疊注入:有的應(yīng)用可以加入 ; 后一次執(zhí)行多條語(yǔ)句
          • 其他

          2.3 手動(dòng)檢測(cè)步驟(字符型注入為例)

           // sqli vuln code
                      Statement statement=con.createStatement();
                      String sql="select * from users where username='" + username + "'";
                      logger.info(sql);
                      ResultSet rs=statement.executeQuery(sql);
          // fix code 如果要使用原始jdbc,請(qǐng)采用預(yù)編譯執(zhí)行
                      String sql="select * from users where username=?";
                      PreparedStatement st=con.prepareStatement(sql);

          使用未預(yù)編譯原始jdbc作為demo,注意此demo中sql語(yǔ)句參數(shù)采用單引號(hào)閉合。

          2.3.1 確定注入點(diǎn)

          對(duì)于字符類型注入,通常先嘗試單引號(hào),判斷單引號(hào)是否被拼接到SQL語(yǔ)句中。推薦使用瀏覽器擴(kuò)展harkbar作為手工測(cè)試工具。https://chrome.google.com/webstore/detail/hackbar/ginpbkfigcoaokgflihfhhmglmbchinc

          正常頁(yè)面應(yīng)該顯示如下:

          admin后加單引號(hào)導(dǎo)致無(wú)信息回顯,原因是后端sql執(zhí)行報(bào)錯(cuò),說(shuō)明引號(hào)被拼接至SQL語(yǔ)句中

          select * from users where username='admin'  #正常sql
          select * from users where username='admin'' #admin'被帶入sql執(zhí)行導(dǎo)致報(bào)錯(cuò)無(wú)法顯示信息

          2.3.2 判斷字段數(shù)

          mysql中使用order by 進(jìn)行排序,不僅可以是字段名也可以是字段序號(hào)。所以可以用來(lái)判斷表中字段數(shù),order by 超過(guò)字段個(gè)數(shù)的數(shù)字就會(huì)報(bào)錯(cuò)。

          判斷字段數(shù)

          當(dāng)order by 超過(guò)4時(shí)會(huì)報(bào)錯(cuò),所以此表共四個(gè)字段。

          后端所執(zhí)行的sql語(yǔ)句

          select * from users where username='admin' order by 1-- '

          此處我們將原本username的值admin替換為admin’ order by 1 —+,其中admin后的單引號(hào)用于閉合原本sql語(yǔ)句中的前引號(hào),—+用于注釋sql語(yǔ)句中的后引號(hào)?!蟮?號(hào)主要作用是提供一個(gè)空格,sql語(yǔ)句單行注釋后需有空格,+會(huì)被解碼為空格。

          2.3.3 確定回顯位置

          主要用于定位后端sql字段在前端顯示的位置,采用聯(lián)合查詢的方式確定。注意聯(lián)合查詢前后字段需一致,這也就是我們?yōu)槭裁醋龅诙降脑颉?/span>

          通過(guò)下圖可知,后端查詢并回顯的字段位置為2,3位。

          聯(lián)合查詢后的字段可以隨意,本次采用的是數(shù)字1到4直觀方便。

          2.3.4 利用information_schema庫(kù)實(shí)現(xiàn)注入

          group_concat()函數(shù)用于將查詢結(jié)果拼接為字符串。

          • 查看存在數(shù)據(jù)庫(kù)

          • 查看當(dāng)前數(shù)據(jù)庫(kù)中的表

          • 查看指定表中字段

          • 利用以上獲取信息讀取users表中username和password

          3 自動(dòng)化檢測(cè)

          3.1 sqlmap 使用

          sqlmap兼容python2和python3,可以自動(dòng)化檢測(cè)各類注入和幾乎所有數(shù)據(jù)庫(kù)類型。

          3.1.1 常用命令

          -u  可能存在注入的url鏈接
          -r讀取http數(shù)據(jù)包
          --data 指定post數(shù)據(jù)
          --cookie 指定cookie
          --headers 指定http頭 如采用token認(rèn)證的情況下
          --threads 指定線程數(shù)
          --dbms 指定后端的數(shù)據(jù)庫(kù)
          --os 指定后端的操作系統(tǒng)類型
          --current-user 當(dāng)前用戶
          --users 所有用戶
          --is-dba 是否是dba
          --sql-shell 交互式的sqlshell
          -p指定可能存在注入點(diǎn)的參數(shù)
          --dbs 窮舉系統(tǒng)存在的數(shù)據(jù)庫(kù)
          -D指定數(shù)據(jù)庫(kù)
          --tables 窮舉存在的表
          -T指定表
          --column 窮舉字段
          -C指定字段
          --dump dump數(shù)據(jù)

          直接檢測(cè)
          其中—cookie用于指定cookie,—batch 自動(dòng)化執(zhí)行,—dbms指定數(shù)據(jù)庫(kù)類型

          檢測(cè)結(jié)果

          讀取系統(tǒng)中存在數(shù)據(jù)庫(kù)
          —dbs讀取當(dāng)前用戶下的數(shù)據(jù)庫(kù)

          讀取指定庫(kù)下的表
          -D java_sec_code —tables

          dump users表數(shù)據(jù)
          -D java_sec_code -T users —dump

          4 進(jìn)階

          4.1 Mybatis注入

          1)$錯(cuò)誤使用導(dǎo)致注入

          //采用#不會(huì)導(dǎo)致sql注入,mybatis會(huì)使用預(yù)編譯執(zhí)行
              @Select("select * from users where username=#{username}")
              User findByUserName(@Param("username") String username);
          //采用$作為入?yún)⒖蓪?dǎo)致sql注入
              @Select("select * from users where username='${username}'")
              List<User> findByUserNameVuln01(@Param("username") String username);

          2)模糊查詢拼接

          //錯(cuò)誤寫(xiě)法
            <select id="findByUserNameVuln02" parameterType="String" resultMap="User">
                  select * from users where username like '%${_parameter}%'
              </select>
          
           //正確寫(xiě)法
           <select id="findByUserNameVuln02" parameterType="String" resultMap="User">
                  select * from users where username like concat(‘%’,#{_parameter}, ‘%’)  
              </select>

          3)order by 注入

          order by 后若使用#{}會(huì)導(dǎo)致報(bào)錯(cuò),因?yàn)?{}默認(rèn)添加引號(hào)會(huì)導(dǎo)致找不到字段從而報(bào)錯(cuò)。

             //錯(cuò)誤寫(xiě)法 
          <select id="findByUserNameVuln03" parameterType="String" resultMap="User">
                  select * from users
                  <if test="order !=null">
                      order by ${order} asc
                  </if>
              </select>
          //正確寫(xiě)法 id指字段id 此表字段共四個(gè) 所以id為1-4
              <select id="OrderByUsername" resultMap="User">
                  select * from users order by id asc limit 1
              </select>

          以上測(cè)試均在本地進(jìn)行,請(qǐng)勿未授權(quán)進(jìn)行滲透測(cè)試

          5 文章及資料推薦

          slqmap手冊(cè):https://octobug.gitbooks.io/sqlmap-wiki-zhcn/content/Users-manual/Introduction.html
          sql注入詳解:http://sqlwiki.radare.cn/#/


          作者:羅宇(物流安全小分隊(duì))


          主站蜘蛛池模板: 久久亚洲综合色一区二区三区| 国产高清一区二区三区四区| 国产在线一区二区视频| 日韩人妻无码一区二区三区99 | 国产精品一区电影| 日韩精品一区二区三区中文精品| 亚洲日韩精品无码一区二区三区| 久久久人妻精品无码一区| 国产福利一区二区在线视频| 在线观看国产区亚洲一区成人 | 中文字幕一区二区区免| 美女福利视频一区| 精品无码AV一区二区三区不卡| 乱色精品无码一区二区国产盗| 97精品国产一区二区三区| 波多野结衣一区二区三区88| 中文字幕一区在线观看| 乱色精品无码一区二区国产盗| 国产麻豆媒一区一区二区三区| 国产剧情国产精品一区| 成人精品一区二区不卡视频| 国产一区二区在线观看app| 日韩一区二区a片免费观看| 国精品无码一区二区三区在线蜜臀| 精品国产一区二区三区久| 美女福利视频一区二区| 色视频综合无码一区二区三区| 国产综合一区二区在线观看| 成人无码精品一区二区三区| 久久久国产一区二区三区| 国产精品亚洲一区二区三区在线观看 | 在线观看一区二区三区av| 午夜视频一区二区| 日本免费一区尤物| 成人一区二区三区视频在线观看| 精品少妇一区二区三区视频| 亚洲av午夜精品一区二区三区| 国产伦精品一区二区三区四区| 一区二区不卡视频在线观看| 无码人妻精品一区二区三区99性 | 国产高清一区二区三区|