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

徹底干掉惡心的SQL注入漏洞, 一網(wǎng)打盡!

數(shù)據(jù)庫 其他數(shù)據(jù)庫
正常情況下,用戶的輸入是作為參數(shù)值的,而在 SQL 注入中,用戶的輸入是作為 SQL 指令的一部分,會(huì)被數(shù)據(jù)庫進(jìn)行編譯/解釋執(zhí)行。

 [[271669]]

簡介

文章主要內(nèi)容包括:

  •     Java 持久層技術(shù)/框架簡單介紹
  •     不同場景/框架下易導(dǎo)致 SQL 注入的寫法
  •     如何避免和修復(fù) SQL 注入

JDBC

介紹

JDBC:

  •     全稱 Java Database Connectivity
  •     是 Java 訪問數(shù)據(jù)庫的 API,不依賴于特定數(shù)據(jù)庫 ( database-independent )
  •     所有 Java 持久層技術(shù)都基于 JDBC

說明

直接使用 JDBC 的場景,如果代碼中存在拼接 SQL 語句,那么很有可能會(huì)產(chǎn)生注入,如 

  1. // concat sql  
  2.   String sql = "SELECT * FROM users WHERE name ='"+ name + "'";  
  3.   Statement stmt = connection.createStatement();  
  4.   ResultSet rs = stmt.executeQuery(sql); 

安全的寫法是使用 參數(shù)化查詢 ( parameterized queries ),即 SQL 語句中使用參數(shù)綁定( ? 占位符 ) 和 PreparedStatement,如   

  1. // use ? to bind variables  
  2.    String sql = "SELECT * FROM users WHERE name= ? " 
  3.    PreparedStatement ps = connection.prepareStatement(sql);  
  4.    // 參數(shù) index 從 1 開始  
  5.    ps.setString(1, name); 

還有一些情況,比如 order by、column name,不能使用參數(shù)綁定,此時(shí)需要手工過濾,如通常 order by 的字段名是有限的,因此可以使用白名單的方式來限制參數(shù)值

這里需要注意的是,使用了 PreparedStatement 并不意味著不會(huì)產(chǎn)生注入,如果在使用 PreparedStatement之前,存在拼接 sql 語句,那么仍然會(huì)導(dǎo)致注入,如   

  1. // 拼接 sql  
  2.     String sql = "SELECT * FROM users WHERE name ='"+ name + "'";  
  3.     PreparedStatement ps = connection.prepareStatement(sql); 

看到這里,大家肯定會(huì)好奇 PreparedStatement 是如何防止 SQL 注入的,來了解一下

正常情況下,用戶的輸入是作為參數(shù)值的,而在 SQL 注入中,用戶的輸入是作為 SQL 指令的一部分,會(huì)被數(shù)據(jù)庫進(jìn)行編譯/解釋執(zhí)行。

當(dāng)使用了 PreparedStatement,帶占位符 ( ? ) 的 sql 語句只會(huì)被編譯一次,之后執(zhí)行只是將占位符替換為用戶輸入,并不會(huì)再次編譯/解釋,因此從根本上防止了 SQL 注入問題。

Mybatis

介紹

  •  首個(gè) class persistence framework
  •  介于 JDBC (raw SQL) 和 Hibernate (ORM)
  •  簡化絕大部分 JDBC 代碼、手工設(shè)置參數(shù)和獲取結(jié)果
  •  靈活,使用者能夠完全控制 SQL,支持高級映射

更多請參考: http://www.mybatis.org

說明

在 MyBatis 中,使用 XML 文件 或 Annotation 來進(jìn)行配置和映射,將 interfaces 和 Java POJOs (Plain Old Java Objects) 映射到 database records。

XML 例子

Mapper Interface   

  1. @Mapper  
  2.    public interface UserMapper {  
  3.        User getById(int id);  
  4.    } 

XML 配置文件   

  1. <select id="getById" resultType="org.example.User">  
  2.        SELECT * FROM user WHERE id = #{id}  
  3.    </select> 

Annotation 例子   

  1. @Mapper  
  2.     public interface UserMapper {  
  3.         @Select("SELECT * FROM user WHERE id= #{id}")  
  4.         User getById(@Param("id") int id);  
  5.     } 

可以看到,使用者需要自己編寫 SQL 語句,因此當(dāng)使用不當(dāng)時(shí),會(huì)導(dǎo)致注入問題與使用 JDBC 不同的是,MyBatis 使用 #{} 和 ${} 來進(jìn)行參數(shù)值替換。推薦:Mybatis傳遞多個(gè)參數(shù)的4種方式。

使用 #{} 語法時(shí),MyBatis 會(huì)自動(dòng)生成 PreparedStatement ,使用參數(shù)綁定 ( ?) 的方式來設(shè)置值,上述兩個(gè)例子等價(jià)的 JDBC 查詢代碼如下: 

  1. String sql = "SELECT * FROM users WHERE id = ?" 
  2.   PreparedStatement ps = connection.prepareStatement(sql);  
  3.   ps.setInt(1, id); 

因此 #{} 可以有效防止 SQL 注入,詳細(xì)可參考 http://www.mybatis.org/mybatis-3/sqlmap-xml.html String Substitution 部分。

而使用 ${} 語法時(shí),MyBatis 會(huì)直接注入原始字符串,即相當(dāng)于拼接字符串,因而會(huì)導(dǎo)致 SQL 注入,如   

  1. <select id="getByName" resultType="org.example.User">  
  2.         SELECT * FROM user WHERE name = '${name}' limit 1  
  3.     </select> 

name 值為 ' or '1'='1,實(shí)際執(zhí)行的語句為   

  1. SELECT * FROM user WHERE name = '' or '1'='1' limit 1  

因此建議盡量使用 #{},但有些時(shí)候,如 order by 語句,使用 #{} 會(huì)導(dǎo)致出錯(cuò),如 

  1. ORDER BY #{sortBy} 

sortBy 參數(shù)值為 name ,替換后會(huì)成為   

  1. ORDER BY "name" 

即以字符串 “name” 來排序,而非按照 name 字段排序

詳細(xì)可參考: https://stackoverflow.com/a/32996866/6467552

這種情況就需要使用 ${} 

  1. ORDER BY ${sortBy} 

使用了 ${}后,使用者需要自行過濾輸入,方法有:

代碼層使用白名單的方式,限制 sortBy 允許的值,如只能為 name, email 字段,異常情況則設(shè)置為默認(rèn)值 name

在 XML 配置文件中,使用 if 標(biāo)簽來進(jìn)行判斷

Mapper 接口方法   

  1. List<User> getUserListSortBy(@Param("sortBy") String sortBy); 

xml 配置文件   

  1. <select id="getUserListSortBy" resultType="org.example.User">  
  2.      SELECT * FROM user  
  3.      <if test="sortBy == 'name' or sortBy == 'email'">  
  4.        order by ${sortBy}  
  5.      </if>  
  6.    </select> 

因?yàn)?Mybatis 不支持 else,需要默認(rèn)值的情況,可以使用 choose(when,otherwise)   

  1. <select id="getUserListSortBy" resultType="org.example.User">  
  2.      SELECT * FROM user  
  3.      <choose>  
  4.        <when test="sortBy == 'name' or sortBy == 'email'">  
  5.          order by ${sortBy}  
  6.        </when>  
  7.        <otherwise>  
  8.          order by name  
  9.        </otherwise>      
  10.     </choose>  
  11.    </select> 

更多場景

除了 orderby之外,還有一些可能會(huì)使用到 ${} 情況,可以使用其他方法避免,如

like 語句

  •  如需要使用通配符 ( wildcard characters % 和 _) ,可以
  •  在代碼層,在參數(shù)值兩邊加上 %,然后再使用 #{}
  •  使用 bind 標(biāo)簽來構(gòu)造新參數(shù),然后再使用 #{}

Mapper 接口方法   

  1. List<User> getUserListLike(@Param("name") String name); 

xml 配置文件   

  1. <select id="getUserListLike" resultType="org.example.User">  
  2.        <bind name="pattern" value="'%' + name + '%'" />  
  3.        SELECT * FROM user  
  4.        WHERE name LIKE #{pattern}  
  5.    </select> 

<bind> 語句內(nèi)的 value 為 OGNL expression

具體可參考 :

http://www.mybatis.org/mybatis-3/dynamic-sql.html 

bind 部分使用 SQL concat() 函數(shù)   

  1. <select id="getUserListLikeConcat" resultType="org.example.User">  
  2.         SELECT * FROM user WHERE name LIKE concat ('%', #{name}, '%')  
  3.     </select> 

除了注入問題之外,這里還需要對用戶的輸入進(jìn)行過濾,不允許有通配符,否則在表中數(shù)據(jù)量較多的時(shí)候,假設(shè)用戶輸入為 %%,會(huì)進(jìn)行全表模糊查詢,嚴(yán)重情況下可導(dǎo)致 DOS

參考:

 http://www.tothenew.com/blog/sql-wildcards-is-your-application-safe

IN 條件

  •  使用 <foreach> 和 #{}
  •  Mapper 接口方法   
  1. List<User> getUserListIn(@Param("nameList") List<String> nameList); 

xml 配置文件   

  1. <select id="selectUserIn" resultType="com.exaple.User">  
  2.       SELECT * FROM user WHERE name in  
  3.       <foreach item="name" collection="nameList"   
  4.                open="(" separator="," close=")">  
  5.             #{name}  
  6.       </foreach>  
  7.     </select> 

具體可參考 

http://www.mybatis.org/mybatis-3/dynamic-sql.html 

foreach 部分

limit 語句

  •  直接使用 #{} 即可
  •  Mapper 接口方法   
  1. List<User> getUserListLimit(@Param("offset") int offset, @Param("limit") int limit); 

xml 配置文件   

  1. <select id="getUserListLimit" resultType="org.example.User">  
  2.        SELECT * FROM user limit #{offset}, #{limit}  
  3.    </select> 

JPA & Hibernate

介紹

JPA:

  •  全稱 Java Persistence API
  •  ORM (object-relational mapping) 持久層 API,需要有具體的實(shí)現(xiàn)

更多請參考:

https://en.wikipedia.org/wiki/JavaPersistenceAPI

Hibernate:

  •  JPA ORM 實(shí)現(xiàn)

更多請參考 http://hibernate.org。

說明

這里有一種錯(cuò)誤的認(rèn)識,使用了 ORM 框架,就不會(huì)有 SQL 注入。而實(shí)際上,在 Hibernate 中,支持 HQL (Hibernate Query Language) 和 native sql 查詢,前者存在 HQL 注入,后者和之前 JDBC 存在相同的注入問題,來具體看一下。

HQL

HQL 查詢例子   

  1. Query<User> query = session.createQuery("from User where name = '" + name + "'", User.class);  
  2.     User user = query.getSingleResult(); 

這里的 User 為類名,和原生 SQL 類似,拼接會(huì)導(dǎo)致注入。

正確的用法:

  •  位置參數(shù) (Positional parameter)   
  1. Query<User> query = session.createQuery("from User where name = ?", User.class);  
  2.     query.setParameter(0, name); 
  •  命名參數(shù) (named parameter)   
  1. Query<User> query = session.createQuery("from User where name = :name", User.class);  
  2.    query.setParameter("name", name); 
  •  命名參數(shù) list (named parameter list)   
  1. Query<User> query = session.createQuery("from User where name in (:nameList)", User.class);  
  2.    query.setParameterList("nameList", Arrays.asList("lisi", "zhaowu")); 
  •  類實(shí)例 (JavaBean)   
  1. User user = new User();  
  2.    user.setName("zhaowu");  
  3.    Query<User> query = session.createQuery("from User where name = :name", User.class);  
  4.    // User 類需要有 getName() 方法  
  5.    query.setProperties(user); 

Native SQL

存在 SQL 注入   

  1. String sql = "select * from user where name = '" + name + "'";  
  2.    // deprecated  
  3.    // Query query = session.createSQLQuery(sql);  
  4.    Query query = session.createNativeQuery(sql); 

使用參數(shù)綁定來設(shè)置參數(shù)值   

  1. String sql = "select * from user where name = :name" 
  2.    // deprecated  
  3.    // Query query = session.createSQLQuery(sql);  
  4.    Query query = session.createNativeQuery(sql);  
  5.    query.setParameter("name", name); 

JPA

JPA 中使用 JPQL (Java Persistence Query Language),同時(shí)也支持 native sql,因此和 Hibernate 存在類似的問題,這里就不再細(xì)說,感興趣的可以參考:

https://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-persistence-api-jpa 

責(zé)任編輯:龐桂玉 來源: Java技術(shù)棧
相關(guān)推薦

2024-04-26 00:25:52

Rust語法生命周期

2021-08-05 06:54:05

流程控制default

2021-10-29 09:32:33

springboot 靜態(tài)變量項(xiàng)目

2024-02-27 10:11:36

前端CSS@規(guī)則

2021-10-11 07:55:42

瀏覽器語法Webpack

2010-08-25 01:59:00

2011-12-02 09:22:23

網(wǎng)絡(luò)管理NetQos

2013-08-02 10:52:10

Android UI控件

2024-06-12 00:00:05

2024-04-07 08:41:34

2024-08-26 10:01:50

2013-10-16 14:18:02

工具圖像處理

2023-04-06 09:08:41

BPM流程引擎

2020-02-21 08:45:45

PythonWeb開發(fā)框架

2025-01-13 07:30:00

SQL開發(fā)組合查詢

2023-09-26 00:29:40

CSS布局標(biāo)簽

2023-04-03 08:30:54

項(xiàng)目源碼操作流程

2009-04-02 10:17:00

交換機(jī)產(chǎn)品選購

2020-10-19 06:43:53

Redis腳本原子

2021-05-20 11:17:49

加密貨幣區(qū)塊鏈印度
點(diǎn)贊
收藏

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

日韩五码在线| 欧美成人ⅴideosxxxxx| 狠狠色狠狠色合久久伊人| 中文字幕在线看视频国产欧美在线看完整 | 九色porny在线| 国产在线精品一区二区夜色| 欧美成人性生活| 深田咏美中文字幕| 亚洲国产福利| 国产精品久久久久久久久免费相片| 91久久精品国产91久久性色| 久久久久久久久久久久国产| 婷婷成人影院| 欧美日韩一区二区三区四区| 红桃一区二区三区| 天堂在线资源网| 日韩av不卡一区二区| 久热精品视频在线免费观看| 国产黄色三级网站| 国产原创一区| 亚洲无线码一区二区三区| 日韩精品久久久免费观看| 国产精品国产三级国产普通话对白| 国产精品分类| 国产亚洲人成网站在线观看| 色哟哟免费视频| 波多野结衣在线播放| 国产欧美日韩三区| 岛国一区二区三区高清视频| 免费无码国产精品| 极品裸体白嫩激情啪啪国产精品| 在线观看视频亚洲| 加勒比精品视频| 在线视频成人| 色噜噜夜夜夜综合网| 女人床在线观看| 国产一区二区三区不卡在线| 成人a区在线观看| 国产精品欧美一区二区三区奶水| 久久久久久天堂| 日韩欧美视频专区| 亚洲人成啪啪网站| 岛国精品一区二区三区| 色综合久久久| 日本精品视频一区二区| 欧美 日韩 国产 高清| 超碰在线观看免费| 国产精品久久影院| 久久久综合亚洲91久久98| 91沈先生作品| 女人扒开双腿让男人捅| 日韩毛片免费观看| 午夜av区久久| 黄黄视频在线观看| 91在线网址| 久久精品在线观看| 久久久久资源| 天天射天天操天天干| 国产成人精品1024| 亚洲一区二区免费在线| 自拍偷拍精品视频| 天堂资源在线中文精品| 69av在线视频| 国产精品suv一区二区69| 综合精品久久| 色yeye香蕉凹凸一区二区av| 微拍福利一区二区| 欧美人妖在线| 亚洲人a成www在线影院| 欧美无人区码suv| 成午夜精品一区二区三区软件| 欧美一级理论片| 久久精品国产露脸对白| 欧美高清影院| 3d动漫精品啪啪| 亚洲免费av一区| www.久久99| 91精品啪在线观看国产60岁| 久久精品久久99| 国产午夜亚洲精品一级在线| 欧美一区二区三区成人| 国内精品国产三级国产aⅴ久| 91精品一区| 777午夜精品视频在线播放| 国产5g成人5g天天爽| 日本免费一区二区视频| 精品国产一区二区三区久久久蜜月 | 日本美女视频网站| 国偷自产av一区二区三区| 亚洲白拍色综合图区| 国产精品一区二区人妻喷水| 竹菊久久久久久久| 在线中文字幕日韩| 国产传媒免费在线观看| 欧美国产另类| 97在线视频免费观看| 在线观看 亚洲| 轻轻草成人在线| 91牛牛免费视频| 亚洲精品一区二区三区四区| 97se亚洲国产综合自在线不卡| 欧美不卡三区| 免费黄色在线| 亚洲高清免费观看高清完整版在线观看| 男女啪啪免费视频网站| 朝桐光一区二区| 91麻豆精品国产自产在线| 成年人小视频在线观看| 精品在线观看入口| 另类少妇人与禽zozz0性伦| www.youjizz.com亚洲| 久久久夜精品| 91国产丝袜在线放| 欧美日本韩国一区二区| 亚洲天堂精品在线观看| 免费看又黄又无码的网站| 日韩综合久久| 亚洲精品大尺度| 可以免费看av的网址| 亚洲黄色毛片| 国产欧美一区二区三区久久人妖| 亚洲爆乳无码一区二区三区| 国产日韩欧美高清在线| 国产亚洲精品久久久久久久| 99re66热这里只有精品4| 日韩欧美电影一区| 欧美人妻一区二区三区| 欧美性久久久| 国产日韩一区在线| 国产尤物视频在线| 午夜激情综合网| 黄色小视频免费网站| 琪琪久久久久日韩精品| 欧美老妇交乱视频| 一区二区三区在线免费观看视频| 9i在线看片成人免费| 久久av喷吹av高潮av| 性欧美hd调教| 亚洲黄色www| 人妻少妇精品一区二区三区| 蜜臂av日日欢夜夜爽一区| 精品亚洲欧美日韩| 羞羞网站在线免费观看| 欧美日韩一区二区三区视频| 免费看污片的网站| 国产精品久久久久久久久久妞妞| 高清不卡一区二区三区| 黄色网在线看| 欧美精品久久久久久久久老牛影院| 一级黄色片大全| 亚洲精品麻豆| 成人蜜桃视频| 羞羞网站在线免费观看| 欧美精品久久久久久久久老牛影院| www色com| 久久久久久黄| 免费影院在线观看一区| 色吧亚洲日本| 亚洲韩国日本中文字幕| 国产大片中文字幕| 成人黄页毛片网站| 青青草国产精品视频| 国产精品国产| 久久久久久久久久久人体| 精品毛片一区二区三区| 亚洲男同1069视频| 北条麻妃亚洲一区| 欧美黄免费看| yellow视频在线观看一区二区| 青青在线视频| 日韩欧美资源站| 精品视频久久久久| 成人97人人超碰人人99| 精品久久一二三| 群体交乱之放荡娇妻一区二区| 91精品国产电影| 亚洲h视频在线观看| 天天色 色综合| 少妇真人直播免费视频| 老司机精品导航| 亚洲国产综合自拍| 久久在线观看| 久久久噜噜噜久久久| 网站黄在线观看| 色又黄又爽网站www久久| 91成人在线免费视频| 精品亚洲aⅴ乱码一区二区三区| 好色先生视频污| 国产精品白丝av嫩草影院| 欧美中文在线观看| 色三级在线观看| 欧美一区二区三区性视频| 国产一级在线免费观看| 91在线porny国产在线看| 国产高清精品在线观看| 日韩精品诱惑一区?区三区| 92国产精品久久久久首页| av成人影院在线| 亚洲午夜av久久乱码| 国产日韩欧美视频在线观看| 亚洲大片免费看| 女人十八毛片嫩草av| 国产精品一区二区在线看| 国自产拍偷拍精品啪啪一区二区| 国产传媒欧美日韩成人精品大片| 成人a视频在线观看| 白浆视频在线观看| 色偷偷9999www| 人妻va精品va欧美va| 欧美在线免费观看亚洲| 久操视频免费在线观看| 久久综合国产精品| 亚洲综合123| 中文精品在线| 中文精品一区二区三区| 日韩高清电影免费| 成人情趣片在线观看免费| 黄视频免费在线看| 久久久精品一区| 深夜福利在线观看直播| 91精品国产aⅴ一区二区| 免费视频久久久| 一区二区激情视频| 国产1区2区在线观看| 成人h动漫精品一区二区| 美女在线视频一区二区| 国产精品久久久久毛片大屁完整版| 亚洲人成网站在线播放2019| 黄色美女久久久| 国产欧美日韩专区发布| 在线天堂新版最新版在线8| 欧美精品一区三区| 成人激情电影在线看| 亚洲黄色片网站| a天堂中文在线观看| 欧美写真视频网站| 日本在线播放视频| 亚洲成在人线在线播放| 少妇人妻丰满做爰xxx| 亚洲国产精品二十页| 波多野结衣a v在线| 成人美女在线观看| 在线观看一区二区三区视频| 久久99日本精品| 日本熟妇人妻xxxxx| 99视频在线精品国自产拍免费观看| 成人黄色片免费| 欧美顶级大胆免费视频| 日韩精品久久久毛片一区二区| 校花撩起jk露出白色内裤国产精品| 成人91视频| 日本一区二区乱| 国产在线999| 日韩城人网站| 国产精品视频资源| 成人四虎影院| 国产精品劲爆视频| 日韩毛片在线| 国产精品扒开腿做| 欧美日韩激情电影| 国产剧情久久久久久| 成人自拍视频网| 国产福利视频一区| 精品视频在线一区二区在线| 国产98色在线| 国产综合av| 国产精品久久97| av成人在线播放| 国产精品偷伦免费视频观看的| 日韩不卡在线| 国产精品久久久久久搜索| 日本一区二区三区视频在线| 国产精品第一第二| 成人国产在线| 国产欧美亚洲视频| 精品麻豆剧传媒av国产九九九| 91手机在线视频| 亚洲国产中文在线| 狠狠爱一区二区三区| 日韩精品丝袜美腿| 青青草久久网络| 欧美三级伦理在线| 做爰高潮hd色即是空| 欧美日韩一区二区三区四区在线观看 | 中文在线字幕av| 欧美日韩激情一区二区三区| 国产一区二区波多野结衣| 日韩欧美在线影院| 日本高清视频免费观看| 亚洲一级片在线看| 欧美日韩xx| 欧美精品videosex牲欧美| 国产粉嫩在线观看| 国产精品久久精品| 国产不卡精品| 国产综合色一区二区三区| 蜜桃视频欧美| 正在播放久久| 日韩一级免费| 婷婷丁香激情网| 国产精品1024| 色天使在线视频| 国产精品久久久久久福利一牛影视| 黄色一级片中国| 狠狠色狠狠色综合日日五| 伊人久久亚洲综合| 欧美精品一区二区高清在线观看| 国产日本在线| 欧美激情一级二级| 日韩三区在线| 粉嫩av一区二区三区免费观看| 最新亚洲精品| 男女激烈动态图| 国产毛片一区| 国产5g成人5g天天爽| 久久久亚洲高清| a级片在线观看免费| 91成人网在线| 亚洲国产精品国自产拍久久| 亚洲夜晚福利在线观看| caoporn-草棚在线视频最| 国产精品高潮呻吟久久av黑人| 日韩欧美另类中文字幕| 欧美一区1区三区3区公司| 亚洲无线视频| 国内外成人免费在线视频| 91一区一区三区| www深夜成人a√在线| 精品久久久久久中文字幕| 91黄色在线视频| 亚洲人成电影在线观看天堂色| 韩国日本一区| 91精品国产综合久久香蕉最新版 | 蜜桃精品视频在线| 午夜久久久久久久| 日韩理论片中文av| 中文文字幕一区二区三三| 亚洲精品99久久久久| 欧美人与性动交α欧美精品济南到| 国产精品自拍网| 亚洲系列另类av| 欧美又粗又长又爽做受| 国产麻豆精品在线| 香蕉久久久久久久| 91黄色激情网站| 婷婷丁香花五月天| 久久久久久久久久久免费精品| 欧美中文高清| 香蕉视频在线网址| 国产揄拍国内精品对白| 国产精品综合激情| 欧美亚洲禁片免费| 玖玖综合伊人| 欧洲精品毛片网站| 夜夜春成人影院| 国产精品免费入口| aaa亚洲精品一二三区| 国产午夜福利片| 精品1区2区在线观看| 美女精品视频| 国产69精品久久久久9999apgf | 亚洲综合色激情五月| 99精品视频在线| 色播五月综合网| 国产精品美女久久久久aⅴ国产馆| 国产精品第六页| 欲色天天网综合久久| 韩国精品视频在线观看 | 欧美高清视频在线观看mv| 午夜宅男在线视频| 中文字幕日韩一区| 成 人 黄 色 片 在线播放| 久久99精品国产99久久6尤物| 视频精品一区二区三区| 青草网在线观看| www.成人在线| 国产精品999在线观看| 亚洲欧美国产视频| 国产韩日精品| 亚洲午夜精品久久| 国产精品中文字幕一区二区三区| 欧美成人精品欧美一级私黄| 精品国产免费视频| 国产欧美一区二区三区精品酒店| 欧美一卡2卡3卡4卡无卡免费观看水多多| 久久精品主播| 成人无码精品1区2区3区免费看| 欧美一区二区私人影院日本| 中文字幕有码在线视频| 国产伦精品一区二区三区视频免费| 国产日韩综合| 特级西西www444人体聚色| 3d动漫精品啪啪一区二区竹菊| 草莓视频丝瓜在线观看丝瓜18| 欧美在线视频二区| 久久精品国产精品亚洲综合| 五月婷婷一区二区| 亚洲人免费视频| 亚洲国产91视频| 久操网在线观看|