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

通過實例理解Web應用用戶密碼存儲方案

開發 前端
用戶密碼的安全存儲是保障Web應用與用戶數據安全的基石。簡單的密碼存儲實踐如明文和弱哈希算法存在巨大隱患,而隨著計算能力提升,任何weak password都可被輕松破解。為有效保護用戶,Web應用必須采取更可靠的密碼存儲方案。

在上一篇文章《通過實例理解Go Web身份認證的幾種方式》[1]中,我們了解了Web應用的多種身份驗證方式。但無論哪種方式,用戶初次訪問Web應用的注冊流程和登錄流程是不可避免的,而基于用戶名密碼的注冊流程依舊是當今主流。注冊后,Web應用后端是如何保存用戶密碼的呢?歷史上都有哪些存儲方案?當今的主流存儲方案又是什么呢?在這篇文章中,我們就來說說Web應用的各種密碼存儲方案的優缺點,并通過實例來理解一下當前的主流存儲方案。

1. Web應用用戶密碼存儲的重要性

用戶密碼是訪問Web應用的關鍵,它直接關乎到用戶賬號和應用數據的安全。

如果用戶密碼被泄露或破解,將導致嚴重后果。后果最輕的算是某個用戶或某少數用戶的賬號被盜用了,用戶將失去對賬號的控制。盜用賬號后,攻擊者可以獲取該用戶的私密信息,或進行額外的攻擊;如果用戶在多個應用重復使用同一密碼,那么后果將進一步嚴重,用戶的一系列賬號都將受到安全威脅;更為嚴重的是Web應用存儲用戶賬號信息的數據庫被攻破(俗稱“脫庫”),攻擊者會拿到存儲的全部用戶賬號信息等,如果用戶密碼存儲不當,攻擊者可以很容易破譯所有用戶的密碼,并基于這些密碼信息做進一步的攻擊。

由此可見,Web應用必須非常重視用戶密碼的存儲安全。在當前弱密碼和頻繁密碼泄露成為常態的背景下,Web應用開發者有責任使用安全的密碼存儲方案,盡力保護用戶信息安全,即便在被脫庫的最糟糕情況下,也不讓攻擊者輕易破解出用戶的密碼,這也關系到應用和企業的信譽。

2. 密碼存儲方案的演進:魔高一尺,道高一丈

Web應用用戶密碼存儲方案的演進歷史可以分為以下幾個階段,如圖所示:

圖片圖片

下面我們按圖中的演進順序,對各階段的密碼存儲方案逐一說明一下。

2.1 起始階段 - 明文存儲

早期的Web應用為了實現簡單,采用了最簡單“粗暴”的用戶密碼存儲方式:明文存儲,即直接把用戶的密碼以純文本形式存儲在數據庫中。

顯然這種方式的最大優點就是實現簡單,驗證登錄時直接比對明文密碼。但這種方式最大的缺點就是極其不安全,密碼一旦泄露就失去了全部保密性。但當時人們的安全意識較弱,該方案被廣泛使用。

2.2 弱哈希算法階段 - MD5和SHA1

隨著時間的推移,CPU和GPU性能的提升使得字典破解和窮舉攻擊更加可行有效,大量密碼被泄露的事件引起人們對密碼安全的重視,人們更多地認識到明文存儲密碼的危險性。同時,Web應用的發展也從追求功能和便利,轉變為在易用性與安全性之間求平衡。政府和行業協會也開始指定密碼存儲的最新安全要求的規范和政策,密碼學等相關技術的快速發展也為更安全的密碼存儲提供了前提和支持。

于是人們開始使用MD5、SHA1等單向哈希算法對密碼進行處理,只存儲密碼的哈希值。雖然增加了一定的密碼存儲的復雜性,但其最大的優點就是在一定程度上放置了明文存儲的密碼泄露問題。

不過,隨著大量使用MD5和SHA-1的應用遭到破解,這些哈希算法的脆弱性暴露無遺。同時彩虹表攻擊的出現,讓破解者只需要預計算密碼哈希表就可以快速破解以弱哈希存儲的密碼。

于是技術社區以及安全規范都開始提倡和推薦采用更安全的密碼存儲方案,即采用加鹽方案。

2.3 加鹽哈希階段 - 增加隨機鹽值

加鹽哈希就是在計算密碼的哈希值時,在密碼字符串前/后面添加一個稱為“鹽(salt)”的隨機字符串,這個隨機字符串稱為鹽值,它的作用是增加哈希后密碼的隨機性。

加鹽哈希的步驟大致如下圖:

圖片圖片

在用戶注冊階段,系統根據用戶輸入的密碼生成在數據庫中的哈希密碼值:

  • 系統首先隨機生成一個足夠長的隨機字符串作為鹽值,可以使用密碼學安全的隨機數生成算法;
  • 將鹽值與用戶輸入的原始密碼字符串拼接在一起(鹽值放在密碼的前后均可);
  • 對連接后的字符串計算哈希值,可以使用MD5、SHA-1、SHA256、SHA-512等哈希算法;由于也被證實MD5、SHA-1存在弱點,可以被碰撞攻擊,建議至少使用SHA256算法;
  • 將鹽值和哈希值一起存儲在數據庫中(可以向圖中那樣將hashed_password和salt通過:分隔符組合為一個字段后再存儲在數據庫中)。

驗證登錄時,系統根據用戶名取出鹽值,然后將用戶輸入的密碼與鹽值組合計算哈希值,與存儲的原始哈希值比較,相同則驗證成功。

在密碼哈希前加入隨機字符串(即“鹽(salt)”)可以大幅增加了破解難度,同時不同用戶如采用相同密碼,也可以通過不同的鹽在哈希后得到不同的哈希值,這可以有效地防止預計算表的攻擊。

不過隨著硬件算力的飛速提高,比如GPU、專用ASIC芯片以及云計算資源等,密碼破解效率進一步提高,甚至普通人也可利用現成的破解工具和云資源進行密碼破解,攻擊者門檻大幅降低,簡單加鹽也已出現不能有效對抗硬件加速破解的情況。

于是人們開始考慮使用一些新哈希算法,這些算法可以大幅提高攻擊者付出的時間和資源消耗成本,增加密碼破解難度,這就是下面我們要說的慢哈希算法。

2.4 慢哈希算法階段 - Argon2、Bcrypt、Scrypt和PBKDF2

Argon2[2]、Bcrypt[3]、Scrypt[4]和PBKDF2[5]是目前主流的慢哈希算法,它們與SHA256等快速哈希算法的主要差異點如下:

  • 計算速度更慢,需要消耗更多CPU和內存資源,從而對抗硬件加速攻擊;
  • 使用更復雜的算法,組合密碼學原語,增加破解難度;
  • 可以配置資源消耗參數,調整安全強度;
  • 特定優化使并行計算困難;
  • 經過長時間的密碼學分析,仍然安全可靠。

從這些特點可以知道:這些慢哈希算法更適合密碼哈希的原因是可以大幅增加攻擊者密碼破解的成本,如果這么說大家印象還不夠深刻,我們就來量化對比一下,下面是以SHA256和Scrypt兩個算法為例做的一個簡單的benchmark測試:

// web-app-password-storage/benchmark/benchmark_test.go

package main
  
import (
    "crypto/sha256"
    "testing"

    "golang.org/x/crypto/scrypt"
)

func BenchmarkSHA256(b *testing.B) {
    b.ReportAllocs()
    data := []byte("hello world")
    b.ResetTimer()

    for i := 0; i < b.N; i++ {
        sha256.Sum256(data)
    }
}

func BenchmarkScrypt(b *testing.B) {
    b.ReportAllocs()
    const keyLen = 32
    data := []byte("hello world")
    b.ResetTimer()

    for i := 0; i < b.N; i++ {
        scrypt.Key(data, data, 16384, 8, 1, keyLen)
    }
}

我們看看輸出的benchmark結果是什么樣的:

$go test -bench .
goos: darwin
goarch: amd64
pkg: demo
... ...
BenchmarkSHA256-8     6097324        195.3 ns/op        0 B/op        0 allocs/op
BenchmarkScrypt-8          26   41812138 ns/op 16781836 B/op       22 allocs/op
PASS
ok   demo 2.533s

我們看到無論是cpu消耗還是內存開銷,Scrypt算法都是SHA256的幾個數量級的倍數。

加鹽的慢哈希也是目前的主流的用戶密碼存儲方案,那有讀者會問:這四個算法選擇哪個更佳呢?說實話要想對這個四個算法做個全面的對比,需要很強的密碼學專業知識,這里直接給結論(當然也是來自網絡資料):建議使用Scrypt或Argon2系列的算法,它們倆可提供更高的抗ASIC和并行計算能力,Bcrypt由于簡單高效和成熟,目前也仍十分流行。

不過,慢哈希算法在給攻擊者帶來時間和資源成本等困難的同時,也給服務端正常的身份認證帶來一定的性能開銷,不過大多數開發者認為這種設計取舍是值得的。

下面我們就基于慢哈希算法結合加鹽,用實例說明一下一個Web應用的用戶注冊與登錄過程中,密碼是如何被存儲和用來驗證用戶身份的。

3. 加鹽哈希存儲方案的示例

在這個示例中,我們建立兩個html文件:一個是signup.html,用于模擬用戶注冊;一個是login.html,用于模擬用戶登錄:

// web-app-password-storage/signup.html

<!DOCTYPE html>
<html>
<head>
  <title>注冊</title>
</head>
<body>

<form actinotallow="http://localhost:8080/signup" method="post">

  <label>用戶名:</label>
  <input type="text" name="username"/>

  <label>密碼:</label>
  <input type="password" name="password"/>

  <label>確認密碼:</label>
  <input type="password" name="confirm-password"/>

  <button type="submit">注冊</button>

</form>

</body>
</html>


// web-app-password-storage/login.html

<!DOCTYPE html>
<html>
<head>
  <title>登錄</title>
</head>
<body>

<form actinotallow="http://localhost:8080/login" method="post">

  <label>用戶名:</label>
  <input type="text" name="username"/>

  <label>密碼:</label>
  <input type="password" name="password"/>

  <button type="submit">登錄</button>

</form>

</body>
</html>

接下來,我們來寫這個web應用的后端:一個http server:

// web-app-password-storage/server/main.go

package main

import (
 "database/sql"
 "encoding/base64"
 "math/rand"
 "net/http"
 "strings"
 "time"

 "golang.org/x/crypto/scrypt"
 _ "modernc.org/sqlite"
)

var db *sql.DB

func main() {
 // 連接SQLite數據庫
 var err error
 db, err = sql.Open("sqlite", "./users.db")
 if err != nil {
  panic(err)
 }
 defer db.Close()

 // 創建用戶表
 sqltable := `
  CREATE TABLE IF NOT EXISTS users (
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   username TEXT,
   hashedpass TEXT
  );
 `
 _, err = db.Exec(sqltable)
 if err != nil {
  panic(err)
 }

 http.HandleFunc("/login", login)
 http.HandleFunc("/signup", signup)
 http.ListenAndServe(":8080", nil)
}

func signup(w http.ResponseWriter, r *http.Request) {
 username := r.FormValue("username")
 password := r.FormValue("password")
 cpassword := r.FormValue("confirm-password")

 if password != cpassword {
  http.Error(w, "password and confirmation password do not match", http.StatusBadRequest)
  return
 }

 // 注冊新用戶
 salt := generateSalt(16)
 hashedPassword := hashPassword(password, salt)
 stmt, err := db.Prepare("INSERT INTO users(username, hashedpass) values(?, ?)")
 if err != nil {
  panic(err)
 }
 _, err = stmt.Exec(username, hashedPassword+":"+salt)
 if err != nil {
  panic(err)
 }
 w.Write([]byte("signup ok!"))
}

func login(w http.ResponseWriter, r *http.Request) {
 username := r.FormValue("username")
 password := r.FormValue("password")

 // 驗證登錄
 storedHashedPassword, salt := getHashedPasswordForUser(db, username)
 hashedLoginPassword := hashPassword(password, salt)
 if hashedLoginPassword == storedHashedPassword {
  w.Write([]byte("Welcome!"))
 } else {
  http.Error(w, "Invalid username or password", http.StatusUnauthorized) // 401
 }
}

// 生成隨機字符串作為鹽值
func generateSalt(n int) string {
 rand.Seed(time.Now().UnixNano())
 letters := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
 b := make([]rune, n)
 for i := range b {
  b[i] = letters[rand.Intn(len(letters))]
 }
 return string(b)
}

// 對密碼進行bcrypt哈希并返回哈希值與隨機鹽值
func hashPassword(password, salt string) string {
 dk, err := scrypt.Key([]byte(password), []byte(salt), 1<<15, 8, 1, 32)
 if err != nil {
  panic(err)
 }
 return base64.StdEncoding.EncodeToString(dk)
}

// 從數據庫獲取用戶哈希后的密碼和鹽值
func getHashedPasswordForUser(db *sql.DB, username string) (string, string) {
 var hashedPass string
 row := db.QueryRow("SELECT hashedpass FROM users WHERE username=?", username)
 if err := row.Scan(&hashedPass); err != nil {
  panic(err)
 }
 split := strings.Split(hashedPass, ":")
 return split[0], split[1]
}

示例的結構比較清晰,這里提供了兩個http handler,一個是signup用于接收用戶注冊請求,一個是login,用于接收處理用戶登錄請求。在注冊請求時,我們生成用戶密碼的帶鹽慢哈希值,與salt一起存入數據庫,這里用sqlite代替通用關系型數據庫;在login handler中,我們根據username讀取數據庫中的salt和hashed_password,然后基于請求中的password與salt重新做一遍hash,將得到的結果與數據庫中讀取的hashed_password比較,相同則說明用戶輸入的密碼正確。

Go官方維護的golang.org/x/crypto為我們提供了高質量的scrypt包,當然crypto下也有bcrypt、argon2和pbkdf2的實現,感興趣的童鞋可以自行研究。

4. 小結

用戶密碼的安全存儲是保障Web應用與用戶數據安全的基石。簡單的密碼存儲實踐如明文和弱哈希算法存在巨大隱患,而隨著計算能力提升,任何weak password都可被輕松破解。為有效保護用戶,Web應用必須采取更可靠的密碼存儲方案。

本文詳細介紹了從簡單明文、單向哈希到先進的加鹽慢哈希的演進歷程。我們看到,這是一場與不斷增強的攻擊手段進行的應對之爭。隨著硬件計算能力、并行與云計算等技術進步,必須加強密碼存儲機制的強度。當前,結合隨機鹽、迭代計算的慢哈希可大幅提高破解難度,是推薦的密碼存儲安全實踐。

當然,密碼安全需要持續關注新興攻擊手段,并及時采納更強大的算法。這不僅是技術問題,也需要整個社區的共同努力,通過提高意識和最佳實踐來保護用戶。

本文示例所涉及的Go源碼可以在這里[6]下載。

5. 參考資料

  • 《API安全實戰》[7] - https://book.douban.com/subject/36039150/
  • 《API安全技術與實戰》[8] - https://book.douban.com/subject/35429043/
  • 保密:系統如何保證敏感數據無法被內外部人員竊取濫用?[9] - https://time.geekbang.org/column/article/334293
責任編輯:武曉燕 來源: TonyBai
相關推薦

2023-11-20 08:02:49

2023-10-26 08:19:34

2011-12-29 10:22:04

iPad用戶體驗設計指南

2013-06-18 23:26:36

移動應用用戶使用成本控制管理移動互聯網

2020-12-17 09:52:43

WEBWindows ser修改密碼

2023-12-25 08:04:42

2014-03-10 10:01:26

應用用戶粘度Mixpanel

2022-04-20 10:25:27

Linux用戶密碼命令

2010-04-08 18:21:56

Oracle用戶密碼

2014-09-19 10:54:47

用戶體驗單頁面

2014-03-14 09:45:18

2013-08-21 09:58:05

2020-09-02 11:13:28

密碼網絡攻擊網絡安全

2018-05-30 08:31:08

2009-03-23 09:03:00

網絡電話方案應用

2023-08-02 09:17:04

2009-02-27 17:00:25

2011-07-27 13:48:30

iPhone 安全

2018-03-20 14:59:42

移動應用程序大數據分析

2009-07-15 10:47:32

Java多態
點贊
收藏

51CTO技術棧公眾號

五月天丁香激情| 红杏成人性视频免费看| 日本人69视频| 亚洲欧美在线第一页| 久久久久久久久久久妇女| 日本三级一区二区| 国产富婆一区二区三区| 中文字幕欧美一| 91伊人久久| 蜜臀久久99精品久久久久久| 久久久视频免费观看| 麻豆精品一区二区av白丝在线| 日韩在线视频观看免费| 黑人巨大国产9丨视频| 亚洲一卡久久| 黄色一级片免费看| 国内精品二区| 五月天久久比比资源色| 日韩一区二区三区精品| 一区二区国产精品精华液| 亚洲free性xxxx护士hd| 亚洲人精品午夜| 超碰精品在线观看| 国产无套内射又大又猛又粗又爽| 97夜夜澡人人双人人人喊| 亚洲欧美日本在线| 精品按摩偷拍| www.国产一区二区| 小说区视频区图片区| 日韩欧美久久久| 午夜影院日韩| 日本在线看片免费人成视1000| 人妻丰满熟妇av无码区app| 亚洲欧美综合区自拍另类| 久久国产精品露脸对白| 国模雨婷捆绑高清在线| 久久久视频6r| 国产经品一区二区| 欧美伊人久久久久久久久影院| 97视频热人人精品免费| 丰满人妻一区二区三区免费| 狠狠爱免费视频| 欧美激情欧美激情在线五月| 久久久久免费观看| 好吊妞视频这里有精品| 免费观看亚洲视频| 日韩精品中文字幕久久臀| 韩国视频一区二区| 精品无人乱码一区二区三区| 国产一级理论片| 一区二区冒白浆视频| 亚洲精品一二区| av网站一区二区三区| 免费精品一区| 国产男男gay体育生网站| 麻豆传传媒久久久爱| 97视频在线观看免费| 亚洲一区影音先锋| 欧美在线黄色| 视频在线这里都是精品| 四虎影院中文字幕| 亚洲 欧美 日韩 国产综合 在线| 日韩视频中文字幕| 中文字幕一区二区三区在线不卡 | 亚洲靠逼com| 午夜天堂精品久久久久| av漫画网站在线观看| 国产香蕉在线视频| 欧美三级午夜理伦三级| 国产精品久久视频| 91精品蜜臀在线一区尤物| 国产福利91精品一区| 久久久久观看| 91最新在线| 国产精品99精品| 午夜欧美福利视频| 欧美成人在线直播| 久久久久综合| 美女精品久久| 五月色婷婷综合| 欧美日韩生活片| 天天想你在线观看完整版电影免费 | 不卡欧美aaaaa| 欧美电影一二区| 小草在线视频免费播放| 国产黄频在线观看| 国产午夜精品久久久久久久久| 免费观看亚洲视频| 91精品视频播放| 日韩毛片中文字幕| 亚洲成人激情综合网| 免费一区二区视频| 国产精品欧美三级在线观看| 神马午夜伦理不卡| www夜片内射视频日韩精品成人| 一区二区三区久久久久| 91猫先生在线| 国产日韩欧美精品| 欧美肥老妇视频| 欧美日韩亚洲国产综合| 亚洲国产精品高清| 欧美一级播放| 国产一区二区在线| 欧美男体视频| 久久米奇亚洲| 日本一本在线观看| 少妇一级黄色片| 天堂av2020| 国产日本欧美在线| 97久久精品午夜一区二区| www.欧美免费| 精品久久国产老人久久综合| 一区二区三区在线不卡| 成人av网站在线观看| 亚洲精品1区| 国产麻豆一区二区三区精品视频| 美女福利一区二区三区| av在线天堂| 亚洲黄色小说网| 国产尤物在线视频| 久久成人小视频| 一边摸一边做爽的视频17国产| 日韩日韩日韩日韩日韩| 日本一区二区三区视频在线观看| 国产精品久久一| 欧美日韩成人网| 亚洲天堂免费在线| 在线不卡的av| 欧美日韩一区二区免费视频| 国产校园另类小说区| 国产成人免费在线观看不卡| 亚洲欧美日韩国产综合精品二区| 偷偷www综合久久久久久久| 成人高潮视频| 激情久久免费视频| 欧美日韩五区| 亚洲精品mv| 欧美性爽视频| 影音先锋在线播放| 国产美女视频一区二区三区| 亚洲国产www| 91极品身材尤物theporn| 探花视频在线观看| 国产一级性生活| 久久精品www| 欧美成欧美va| 999精品在线视频| 国产传媒国产传媒| 国产亚洲无码精品| 国产全是老熟女太爽了| 国产精品第七页| 色婷婷免费视频| 午夜不卡久久精品无码免费| 在线播放av网址| 99国产精品免费视频| 久久久久亚洲AV成人网人人小说| 夜夜夜夜夜夜操| 久久久久久久久久久久久久久国产| 激情五月俺来也| 97超碰成人在线| 亚欧精品在线视频| 亚洲 自拍 另类 欧美 丝袜| 99热这里只有精品2| 国产精品久久久久久亚洲色| 日本不卡视频一区| av网页在线观看| 亚洲女同二女同志奶水| 99久久99久久精品国产| 久久国产精品二区| 欧美一区二区三区不卡视频| 中文字幕人妻一区二区在线视频 | 国产剧情在线观看一区| 日韩av有码| 欧美特黄视频| 免费久久精品视频| 东方aⅴ免费观看久久av| 91丨九色丨蝌蚪富婆spa| 中文字幕av一区二区三区高| 亚洲色图欧美在线| 欧美色播在线播放| 91精品国产综合久久福利| 婷婷视频在线观看| 亚洲va欧美va| 日本在线www| 日本在线啊啊| 中文字幕一区二区三区日韩精品| 人人精品视频| 欧美天堂亚洲电影院在线观看| 免费中文字幕日韩欧美| 国产电影精品久久禁18| 国产成人免费看一级大黄| 岛国大片在线播放| 一级片黄色录像| 三级视频网站在线| 另类尿喷潮videofree| 国产成人亚洲综合色影视| 日韩一二三区视频| 久久99欧美| 性高潮久久久久久久| 国产精品久久久久久久av福利| 自拍偷拍你懂的| 一级做a爰片久久毛片16| 福利精品在线| 2020国产精品极品色在线观看| 欧美午夜寂寞| 欧美国产激情| 麻豆国产一区二区| 国产日韩欧美综合一区| 午夜影院久久久| 欧美一区二区三区免费观看视频| 亚洲精品自拍第一页| 欧美夫妻性视频| 91精品一区二区| 在线电影看在线一区二区三区| 日韩欧美一区二| 特大黑人巨人吊xxxx| 久久黄色小视频| 国产视频在线观看免费 | 男女男精品视频站| 国内精品免费视频| 免费一级全黄少妇性色生活片| 国产精品欧美亚洲| 国产美女福利在线| 一区二区免费| 国产视频一区在线观看一区免费| 国产1区2区3区精品美女| 亚洲精品乱码久久久久久 | 国产拍揄自揄精品视频麻豆| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产精品中文字幕欧美| 日韩一区欧美一区| 亚洲成成品网站| 97不卡在线视频| 婷婷久久伊人| 女教师高潮黄又色视频| 日韩黄色精品视频| 免费毛片在线| 国产剧情一区二区在线观看| 1024日韩| 亚洲天堂免费在线观看视频| 亚洲成人激情在线| 国产精品自拍网| 成人毛片一区二区| 亚洲a∨无码无在线观看| 免费国产精品视频| 九九九精品视频| 国产日韩精品视频一区二区三区| 国产精品无圣光一区二区| 精品免费日韩av| 成人黄色在线播放| 久久久久久久久久久免费视频| 精品99久久久久成人网站免费| 国产资源在线播放| 高清日韩欧美| 国产精品1024| 日韩一级二级三级精品视频| 国产精品一区久久| 黄色高清无遮挡| 日本五十路女优| 黄网在线免费看| 亚洲午夜精品一区 二区 三区| 国产女主播视频一区二区| 亚洲第一中文字幕在线观看| 999视频在线观看| 三级黄色片免费看| 国产精品永久久久久久久久久| 欧美三区四区| 久草这里只有精品视频| 欧美日韩精品欧美日韩精品| 国产精品亚洲第一区| 高清av免费看| 99久久婷婷国产一区二区三区| 北岛玲精品视频在线观看| 国产一区二区三区国产| 日韩亚洲欧美在线观看| 91视频99| 国产黄色网址在线观看| 男女网站在线观看| 第一会所sis001亚洲| 亚洲精品国产一区二区精华液| 欧美大尺度在线观看| 欧美黑人在线观看| 久久精品一二区| 亚洲三级在线| 99久久国产综合精品麻豆| 精品亚洲永久免费精品| 日韩电影大全在线观看| 神马久久精品综合| xx欧美视频| 狠狠色狠狠色综合系列| 亚洲精品影视在线观看| 亚洲一区二区三区精品视频| 国产一级片播放| 伊人久久精品| 久久免费偷拍视频| 久久频这里精品99香蕉| 国产v亚洲v天堂无码久久久| 韩国av电影在线观看| 日韩欧美自拍| 在线视频国内自拍亚洲视频| av日韩免费电影| av黄色免费在线观看| 欧美黄色网页| 久久影院午夜片一区| 欧美精品xxx| 波多野结衣电影免费观看| 啊v视频在线| 青青青伊人色综合久久| 亚洲一区二区久久| 18禁免费无码无遮挡不卡网站| 国产成人三级在线播放 | 欧美影院在线播放| 2019中文在线观看| 亚洲狠狠婷婷综合久久久久图片| 阿v视频在线观看| 99久久精品一区二区| 欧美在线激情视频| 精品一区二区三孕妇视频| 羞羞视频在线观看一区二区| 亚洲靠逼com| 久久99精品久久久久久水蜜桃| caoporn国产| 久久久久午夜电影| 亚洲风情亚aⅴ在线发布| 亚洲欧美偷拍另类| 日本高清视频在线观看| 粉嫩av一区二区三区在线播放| 国内偷自视频区视频综合| 国产一二三四五区| 国产麻豆一区二区三区| 欧美香蕉大胸在线视频观看 | 午夜国产精品视频免费体验区| 日韩欧美色综合网站| 两根大肉大捧一进一出好爽视频| 香蕉视频免费在线播放| 92国产精品观看| 99久久国产免费免费| 夜夜骚av一区二区三区| 蜜桃视频一区| 国模精品视频一区二区三区| 日韩伦人妻无码| 亚洲区综合中文字幕日日| 国产亚洲欧洲在线| 动漫av在线免费观看| 亚洲网站三级| 欧美日韩亚洲综合在线| 国产熟女高潮视频| 综合另类专区| 富二代精品短视频| 亚洲熟妇av日韩熟妇在线| 四虎影院观看视频在线观看| 亚洲男同性视频| 日本免费黄色小视频| 日本视频在线观看| 国产精品黄色在线观看| 国产成人精品免费看在线播放 | 丰满人妻一区二区三区四区53| 国产美女av一区二区三区| 91视频网页| 欧美少妇另类| 国产网站一区二区| 亚洲视频欧美在线| 欧美被日视频| 亚洲影院久久精品| 国产青青在线视频| 午夜欧美巨大性欧美巨大 | 无遮挡亚洲一区| 人人干在线视频| 亚洲成av人片在www色猫咪| 成年人观看网站| 欧美黄色网络| 欧美tk—视频vk| 亚洲av无码国产精品久久| 成人黄色小视频| 九九久久国产精品| 国产免费av一区| 久久人人97超碰国产公开结果| 国产精品一二区| 亚洲乱码在线观看| 欧美高清在线一区二区| 人妻无码一区二区三区四区| 欧美办公室脚交xxxx| 欧美剧情片在线观看| 私密视频在线观看| 一区二区在线| 国产精品成久久久久三级| 不卡视频在线播放| 国产精品三级电影| 成人一级片网站| 久久悠悠精品综合网| 久久久999国产精品| 国产精品久久久久久人| 久久国产精品99久久人人澡| 精品国产一区二区三| 欧美高清另类hdvideosexjaⅴ | 黄频视频在线观看| 日韩精品影片| 国产亚洲在线播放| 久久亚洲精品石原莉奈| 91在线一区二区三区|