精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产最新视频在线| 国产主播在线看| 又色又爽又黄无遮挡的免费视频| 欧美日韩中文一区二区| 538在线一区二区精品国产| 欧美激情导航| 国产乱人乱偷精品视频a人人澡| 欧美午夜不卡| 亚洲一区二区国产| 深夜做爰性大片蜜桃| 亚洲精品一区| 玉米视频成人免费看| 国产一区二区三区四区hd| 黄色av网站免费观看| 综合激情婷婷| 日韩成人中文字幕在线观看| jizz欧美性11| 日韩成人av电影| 一区二区三区视频在线看| 欧美极品一区| 狠狠躁夜夜躁av无码中文幕| 免费成人小视频| 7777精品久久久久久| 91高清免费观看| 欧美亚洲精品在线| 日韩va亚洲va欧洲va国产| 91小视频在线播放| abab456成人免费网址| 亚洲三级免费电影| 久久人人九九| 视频污在线观看| 国产精品小仙女| 成人激情视频免费在线| 精品人妻一区二区三区潮喷在线| 亚洲激情影院| 日韩亚洲综合在线| 国产一区二区三区四区在线| 台湾色综合娱乐中文网| 欧美精品一区二区高清在线观看| 亚洲国产成人va在线观看麻豆| 欧美freesex黑人又粗又大| 亚洲乱码中文字幕| 日韩一区二区三区资源| 日本人妖在线| 成人av在线影院| 成人在线视频网址| 精品久久久免费视频| 美女视频一区免费观看| 亚州精品天堂中文字幕| 麻豆视频在线观看| 忘忧草精品久久久久久久高清| 亚洲人成在线电影| 性久久久久久久久久| 一区二区三区免费在线看| 777奇米四色成人影色区| 日本三级免费观看| 丝袜诱惑一区二区| 色哟哟一区二区在线观看 | 日本一区高清| 久久久亚洲午夜电影| 日韩精品久久一区| 香蕉视频在线看| 综合精品久久久| 亚洲国产精品一区二区第一页| 国产成人精品a视频| 国产麻豆视频精品| 国产精品一区二区av| 精品国产九九九| 国产精品一区二区不卡| 99久久精品免费看国产四区| 草草视频在线播放| 国产乱码精品一区二区三区五月婷| 成人在线中文字幕| 亚洲国产欧美另类| 成人激情免费网站| 日本高清一区| av大片在线看| 一二三区精品视频| 亚洲国产精品久久久久婷蜜芽| 免费看av不卡| 欧美在线一区二区| 亚洲涩涩在线观看| 久久97精品| 一本色道久久88综合日韩精品| 手机免费观看av| 午夜精品剧场| 日韩免费av片在线观看| 中文字幕人妻一区二区三区视频 | 在线电影一区二区| 97碰碰碰免费色视频| 一级久久久久久| 国产精品一二三四| 精品一区二区三区日本| yourporn在线观看视频| 亚洲精品视频一区| 国产精品第12页| av日韩一区| 国产视频自拍一区| 国产成人免费观看网站| 国产精品videosex极品| 日本精品视频网站| 国产不卡av在线播放| 久久先锋影音av鲁色资源| 在线看无码的免费网站| 深夜av在线| 欧美一区二区在线免费播放| 中文字幕在线永久| 清纯唯美日韩| 国产91精品黑色丝袜高跟鞋| 国产又大又长又粗| 91免费在线视频观看| 一区国产精品| 欧美一级大片| 亚洲成人教育av| 亚洲天堂精品一区| 蜜桃视频一区| 国产伦精品一区二区三区高清版 | 欧美激情啊啊啊| 小泽玛利亚一区二区三区视频| 成人一区二区三区| 一区二区三区四区免费视频| 中文在线中文资源| 欧洲av一区二区嗯嗯嗯啊| 2一3sex性hd| 欧美人成网站| 成人欧美一区二区三区黑人孕妇 | 性欧美办公室18xxxxhd| 亚洲怡红院av| 国产欧美日韩精品在线| 91国视频在线| 中文字幕av一区二区三区四区| 日韩有码片在线观看| 一级黄色在线观看| 99精品视频免费在线观看| 日本一级黄视频| 国内不卡的一区二区三区中文字幕| 一区二区三区视频观看| av片免费观看| 久久精品夜夜夜夜久久| 免费高清在线观看免费| 日韩av不卡一区| 91精品91久久久久久| 蜜桃久久一区二区三区| 亚洲一二三区在线观看| www.久久com| 日韩欧美一区二区三区在线视频| 国产极品jizzhd欧美| 户外极限露出调教在线视频| 狠狠久久亚洲欧美专区| 国产又粗又猛又爽又黄| 日韩欧美字幕| 国产精品丝袜久久久久久高清| 精品美女视频在线观看免费软件| 亚洲国产综合91精品麻豆| 久久国产免费视频| 99精品欧美| 蜜桃久久精品乱码一区二区| 综合久久2019| 精品国产不卡一区二区三区| 久久久久久久久久网站| 国产成人精品亚洲日本在线桃色| 亚洲一区二区高清视频| 国产999精品在线观看| 日韩中文字幕在线播放| 精品人妻一区二区三区麻豆91| 一区二区日韩电影| 精品国产aⅴ一区二区三区东京热| 欧美日韩久久| 久久久99国产精品免费| 日韩a**中文字幕| 日日狠狠久久偷偷四色综合免费| 国产美女三级无套内谢| 亚洲综合色网站| 免费的av网站| 日韩电影在线一区二区三区| 亚洲一区三区| 国产调教精品| 国产精品久久久精品| 18视频免费网址在线观看| 在线观看国产日韩| 欧洲第一无人区观看| 成人在线综合网| 人妻无码久久一区二区三区免费| 久久综合色占| 91日韩在线播放| h片在线观看视频免费| 亚洲美女自拍视频| 国产又粗又猛又爽| 欧美日韩国产精品一区二区三区四区 | 免费看污片网站| 国内一区二区三区| 国产综合精品一区二区三区| 欧洲成人一区| 欧美xxxx综合视频| 天天爱天天干天天操| 欧美日韩色综合| 日本少妇激情舌吻| 国产精品不卡一区二区三区| 亚洲av无码一区东京热久久| 日本vs亚洲vs韩国一区三区| 伊人久久婷婷色综合98网| 超碰成人97| 日韩免费在线视频| 国产蜜臀av在线播放| 在线成人免费网站| 日韩一区二区三区不卡| 4438亚洲最大| 好吊色在线视频| 一区二区三区精密机械公司| 国产精品美女高潮无套| 成人免费毛片app| 91pony九色| 可以看av的网站久久看| 日本人体一区二区| 一区二区三区毛片免费| 欧美久久在线| 国产乱人伦精品一区| 亚洲va国产va天堂va久久| 爱情岛论坛亚洲品质自拍视频网站| 中文字幕精品www乱入免费视频| 欧洲成人一区二区三区| 欧美一区二区三区视频免费播放 | 午夜欧美激情| 久久男人av资源网站| 国产丝袜在线| 中文字幕在线看视频国产欧美在线看完整| 国产乱码精品一区二区三区精东| 在线一区二区三区四区五区 | 麻豆视频免费在线观看| 国产亚洲欧美另类中文| 日本午夜在线视频| 日韩av网站导航| 黑人乱码一区二区三区av| 欧美一区二区三区人| 中文字幕久久熟女蜜桃| 色婷婷综合久久久久中文| 久久夜靖品2区| 亚洲欧美日韩国产手机在线| 欧美丰满美乳xxⅹ高潮www| 成人av电影在线| 国产探花一区二区三区| 国产综合久久久久影院| 国产精品自在自线| 麻豆精品国产传媒mv男同| 午夜免费精品视频| 日韩精品亚洲专区| 你真棒插曲来救救我在线观看| 久久精品不卡| 亚洲午夜精品一区二区三区| 九九亚洲精品| 麻豆久久久9性大片| 色综合www| 蜜桃传媒视频麻豆第一区免费观看| 成人av资源网址| 久久国产精品亚洲va麻豆| 美女av一区| 精品免费日产一区一区三区免费| 国产精品调教视频| 欧美日韩国产精品一区二区| 国产精品欧美三级在线观看| 亚洲精品久久区二区三区蜜桃臀| 国产日产精品_国产精品毛片| 日韩欧美一区二区三区四区五区 | 国产又大又长又粗又黄| 欧洲毛片在线视频免费观看| 欧美大陆一区二区| 日韩夫妻性生活xx| 亚洲AV无码成人精品一区| 欧美特黄一区| 3d动漫一区二区三区| 激情综合亚洲| 欧美韩国日本在线| 久久福利视频一区二区| 免费黄色a级片| 国产91综合一区在线观看| 玖草视频在线观看| 久久久亚洲国产美女国产盗摄 | 国产欧美日韩精品一区二区免费 | 中文字幕成在线观看| 欧美一级淫片aaaaaaa视频| 亚洲欧洲日本韩国| 91精品国产综合久久久久久蜜臀| 成人在线日韩| 九九99久久| 国产精品羞羞答答在线观看| 精品一区久久| 伊人青青综合网| 欧洲av无码放荡人妇网站| 日本三级亚洲精品| 亚洲精品久久久久久| 国产日产欧美一区二区三区| 美女福利视频在线观看| 色综合久久88色综合天天免费| 国产尤物在线观看| 日韩精品在线观看一区| 91女主播在线观看| 欧美激情一区二区三区久久久| 欧美色网在线| 国产精品一级久久久| 国产欧美亚洲精品a| 青草网在线观看| 麻豆视频一区二区| 国产伦精品一区二区三区妓女| 亚洲欧洲国产日韩| 国产伦精品一区二区三区视频网站 | 米仓穗香在线观看| 视频在线在亚洲| 日韩女优在线视频| 日韩一区在线免费观看| 人妻 日韩精品 中文字幕| 91精品国产欧美一区二区18| 日韩精品福利| 久久久久久久成人| 成人在线视频www| 香蕉久久免费影视| 性欧美videos另类喷潮| 亚洲欧美激情一区二区三区| 国产亚洲欧美激情| 国产一级视频在线观看| 91 com成人网| 婷婷五月在线视频| 国产精品久久久久久av下载红粉| 色狠狠久久av综合| 人妻夜夜添夜夜无码av| 国产一区二区日韩精品| 永久免费看mv网站入口78| 亚洲777理论| 亚洲精品国产精品国| 欧美成人免费全部| 久久av日韩| 一区二区欧美日韩| 蜜臀av一区二区在线观看| 国产美女免费网站| 亚洲综合丁香婷婷六月香| av免费在线不卡| 久久成人免费视频| 国产一精品一av一免费爽爽| 亚洲国产一区二区三区在线 | 精品国产乱码久久久久夜深人妻| 亚洲日本在线天堂| 国产精品久久久久久久免费 | 欧美日韩电影一区| 永久免费av在线| 国产欧美一区二区三区久久人妖| 成人综合一区| 日韩中文字幕免费在线| 国产婷婷精品av在线| 天天干,天天干| 中文欧美在线视频| 成人自拍视频网| 亚洲图色在线| 亚洲一区欧美二区| 国产亚洲无码精品| 日本韩国一区二区三区| 大胆av不用播放器在线播放| 国产福利精品在线| 久久免费大视频| 激情文学亚洲色图| 亚洲一区视频在线| 亚洲va欧美va| 午夜精品在线视频| 国产99亚洲| 日本在线观看免费视频| 自拍视频在线观看一区二区| 国产99对白在线播放| 欧美激情视频免费观看| 欧美激情99| 老熟妇仑乱视频一区二区| 国产精品每日更新| 精品人妻一区二区三区蜜桃| 日韩中文字幕免费| 操欧美女人视频| 天天摸天天碰天天添| 日本一区二区三区四区| 国产女同91疯狂高潮互磨| 久久久免费精品| 四虎5151久久欧美毛片| 国产一级片自拍| 亚洲福中文字幕伊人影院| 免费一级在线观看播放网址| 国产免费一区二区三区香蕉精| 91成人国产| 国产 中文 字幕 日韩 在线| 欧美午夜激情在线| h视频网站在线观看| 99电影在线观看| 一本色道精品久久一区二区三区| youjizz亚洲女人| 精品国产乱码久久久久久蜜臀| 日本免费久久| 蜜臀精品一区二区| 中文字幕成人网| 黄色av小说在线观看| 国产999精品久久久影片官网| 啪啪亚洲精品| 又黄又色的网站| 欧美性猛交xxxx偷拍洗澡| av毛片在线| 日韩欧美在线一区二区| 精品亚洲成a人在线观看|