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

前端如何安全的渲染HTML字符串?

開發 前端
Sanitizer 實例僅用于防止 XSS 攻擊。但是,在某些情況下,可能需要自定義配置的清理器。接下來,下面來看看如何自定義 Sanitizer API。

在現代的Web 應用中,動態生成和渲染 HTML 字符串是很常見的需求。然而,不正確地渲染HTML字符串可能會導致安全漏洞,例如跨站腳本攻擊(XSS)。為了確保應用的安全性,我們需要采取一些措施來在安全的環境下渲染HTML字符串。本文將介紹一些安全渲染 HTML 字符串的最佳實踐,以幫助你有效地避免潛在的安全風險。

一、常見渲染方式

首先來看一下如何在 HTML、React、Vue、Angular 中渲染HTML字符串。

HTML

在HTML中渲染HTML字符串,可以使用原生JavaScript的innerHTML屬性或者創建元素節點并使用appendChild()方法來實現。

  1. 使用innerHTML屬性:可以通過獲取要渲染HTML的目標元素,并將HTML字符串賦值給其innerHTML屬性來渲染HTML字符串。例如:
<div id="targetElement"></div>

<script>
  const htmlString = "<h1>Hello, World!</h1>";
  document.getElementById("targetElement").innerHTML = htmlString;
</script>

這將在<div id="targetElement"></div>內部渲染出<h1>Hello, World!</h1>。

  1. 創建元素節點和appendChild()方法:可以使用document.createElement()方法創建元素節點,并使用appendChild()方法將該節點添加到父元素中。例如:
<div id="targetElement"></div>

<script>
  const htmlString = "<h1>Hello, World!</h1>";
  const parentElement = document.getElementById("targetElement");
  const tempElement = document.createElement("div");
  tempElement.innerHTML = htmlString;

  while (tempElement.firstChild) {
    parentElement.appendChild(tempElement.firstChild);
  }
</script>

這將在<div id="targetElement"></div>內部渲染出<h1>Hello, World!</h1>。

React

可以通過使用dangerouslySetInnerHTML屬性在 React 中渲染HTML字符串。但是,正如這個屬性的名字所言,它存在安全風險,HTML 不會被轉義,可能會導致XSS問題,因此請慎重使用。

import React from 'react';

const MyComponent = () => {
  const htmlString = '<p>Hello, <strong>React</strong>!</p>';

  return (
    <div dangerouslySetInnerHTML={{ __html: htmlString }} />
);
}

export default MyComponent;

這里將要渲染的HTML字符串存儲在htmlString變量中,并將其傳遞給dangerouslySetInnerHTML屬性的__html屬性。React會將該字符串作為HTML內容插入到被渲染的組件中。

Vue

可以使用v-html指令在Vue中渲染HTML字符串。與在React中使用dangerouslySetInnerHTML類似,使用v-html時需要格外小心。

<template>
  <div v-html="htmlString"></div>
</template>

<script>
export default {
  data() {
    return {
      htmlString: '<p>Hello, <strong>Vue</strong>!</p>',
    };
  },
};
</script>

這里將要渲染的HTML字符串存儲在htmlString中,并通過v-html指令將其綁定到需要渲染的元素上(這里是<div>)。Vue會將htmlString中的字符串解析為HTML,并將其插入到被渲染的元素中。

Angular

可以使用[innerHTML]屬性在Angular中渲染 HTML 字符串。

<div [innerHTML]="htmlString"></div>

這里將要渲染的HTML字符串存儲在名為htmlString的變量中,并將其綁定到[innerHTML]屬性上。Angular會將htmlString中的字符串解析為HTML,并將其插入到相應的DOM節點中。

與其他框架相似,使用[innerHTML]屬性綁定時要特別小心。確保渲染的HTML字符串是可靠和安全的,避免直接從用戶輸入或不受信任的來源獲取HTML字符串,以防止XSS攻擊等安全問題。

另外,Angular也提供了一些內置的安全機制來幫助保護應用免受安全威脅。例如,通過使用Angular的內置管道(如DomSanitizer)對HTML字符串進行轉義和驗證,可以提高應用的安全性。

import { Component } from '@angular/core';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';

@Component({
  selector: 'app-example',
  template: `
    <div [innerHTML]="getSafeHtml()"></div>
  `,
})
export class ExampleComponent {
  htmlString: string = '<p>Hello, <strong>Angular</strong>!</p>';

  constructor(private sanitizer: DomSanitizer) {}

  getSafeHtml(): SafeHtml {
    return this.sanitizer.bypassSecurityTrustHtml(this.htmlString);
  }
}

這里首先導入DomSanitizer和SafeHtml,這是Angular的內置服務和類型。然后,在組件中使用DomSanitizer通過調用bypassSecurityTrustHtml()方法對HTML字符串進行轉義和驗證。最后,將返回的SafeHtml對象綁定到[innerHTML]屬性上,以進行安全的HTML渲染。

通過使用DomSanitizer服務,Angular會對HTML字符串進行安全檢查,并只允許受信任的內容進行渲染,從而減少潛在的安全風險。

注意,在使用DomSanitizer時,確保只對受信任和經過驗證的HTML字符串進行操作,并避免直接從用戶輸入或不受信任的來源獲取HTML字符串。這樣可以確保應用的安全性,并防止潛在的XSS攻擊等安全問題。

二、HTML Sanitizer API

從上面的例子中可以看到,在常見的框架以及在HTML中渲染HTML字符串都存在一定的安全風險。當將用戶提供的或不受信任的HTML字符串直接渲染到應用中時,可能會導致跨站腳本攻擊(XSS)等安全漏洞。因此,在處理和渲染HTML字符串時,需要采取適當的安全措施來防止潛在的安全問題。

那 HTML 中有沒有方法可以讓我們安全的渲染 HTML 字符串呢?有,它就是 HTML Sanitizer API。不過這個 API 目前仍然是實驗性的,在主流瀏覽器都支持之前,盡量不要在生產環境使用。下面先來看看這個 API 是怎么用的,為未來該 API 普遍可用做準備。

是什么?

HTML Sanitizer API 在 2021 年初的草案規范中首次被宣布。它為網站上動態更新的HTML提供原生瀏覽器支持,可以從中刪除惡意代碼。可以使用 HTML Sanitizer API 在將不安全的 HTML 字符串和 Document 或 DocumentFragment 對象插入到 DOM 中之前對其進行清理和凈化。

構建獨立的 API 來進行清理的主要目標是:

  • 減少 Web 應用中跨站腳本攻擊的攻擊面。
  • 保證 HTML 輸出在當前用戶代理中的安全性。
  • 提高清理器的可用性并使其更方便使用。

HTML Sanitizer API 的出現旨在提供一種方便且安全的方式來處理和凈化 HTML,以減少潛在的安全風險,并提高用戶代理的安全性。

Sanitizer API 帶來了一系列新功能,用于字符串的凈化過程:

  • 用戶輸入的凈化:該 API 的主要功能是接受并將字符串轉換為更安全的形式。這些轉換后的字符串不會意外執行 JavaScript,并確保您的應用程序受到跨站腳本攻擊的保護。
  • 瀏覽器維護:此庫已預先安裝在瀏覽器中,并將在發現錯誤或新的攻擊向量時進行更新。因此,現在擁有了一個內置的凈化器,無需導入任何外部庫。
  • 安全且簡單易用:將凈化操作轉移到瀏覽器中使其更加便捷、安全和快速。由于瀏覽器已經具有強大而安全的解析器,它知道如何處理 DOM 中的每個活動元素。與瀏覽器相比,用 JavaScript 開發的外部解析器可能成本較高,并且很快就會過時。

怎么用?

使用 Sanitizer API 非常簡單,只需使用 Sanitizer() 構造函數實例化 Sanitizer 類,并配置實例即可。

對于數據的凈化,該 API 提供了三個基本方法。讓我們看看應該如何以及何時使用它們。

  • 使用隱含上下文對字符串進行凈化 

Element.setHTML() 用于解析和凈化字符串,并立即將其插入到 DOM 中。這適用于已知目標 DOM 元素并且 HTML 內容以字符串形式存在的情況。

const $div = document.querySelector('div');
const user_input = `<em>Hello There</em><img src="" notallow=alert(0)>`;
const sanitizer = new Sanitizer() // Our Sanitizer

$div.setHTML(user_input, sanitizer); // <div><em>Hello There</em><img src=""></div>

這里想將 user_string 中的 HTML 插入到 id 為 target 的目標元素中。也就是說,希望實現得到與 target.innerHTML = value 相同的效果,但避免 XSS 風險。

  • 使用給定上下文對字符串進行凈化

Sanitizer.sanitizeFor() 用于解析、凈化和準備字符串,以便稍后添加到 DOM 中。當 HTML 內容以字符串形式存在,并且已知目標 DOM 元素類型(例如 div、span)時,此方法最適用。

const user_input = `<em>Hello There</em><img src="" notallow=alert(0)>`
const sanitizer = new Sanitizer()

sanitizer.sanitizeFor("div", user_input) // HTMLDivElement <div>

Sanitizer.sanitizeFor()的第一個參數描述了此結果所用于的節點類型。

在使用 sanitizeFor() 方法時,解析 HTML 字符串的結果取決于其所在的上下文/元素。例如,如果將包含 <td> 元素的 HTML 字符串插入到 <table> 元素中,則是允許的。但如果將其插入到 <div> 元素中,它將被移除。因此,在使用 Sanitizer.sanitizeFor() 方法時,必須將目標元素的標簽指定為參數。

sanitizeFor(element, input)

這里也可以使用 HTML 元素中的 .innerHTML 來獲取字符串形式的清理結果。

sanitizer.sanitizeFor("div", user_input).innerHTML // <em>Hello There</em><img src="">
  • 使用節點進行凈化

當已經有一個用戶可控的 DocumentFragment 時,可以使用 Sanitizer.sanitize() 方法對 DOM 樹節點進行凈化。

const sanitizer = new Sanitizer()
const $userDiv = ...;
$div.replaceChildren(s.sanitize($userDiv));

除此之外,Sanitizer API 還通過刪除和過濾屬性和標簽來修改 HTML 字符串。例如,Sanitizer API:

  • 刪除某些標簽(script、marquee、head、frame、menu、object 等),但保留內容標簽。
  • 刪除大多數屬性。只會保留 <a> 標簽上的 href 和 <td>、<th> 標簽上的 colspans,其他屬性將被刪除。
  • 過濾可能引起腳本執行的字符串。

自定義

默認情況下,Sanitizer 實例僅用于防止 XSS 攻擊。但是,在某些情況下,可能需要自定義配置的清理器。接下來,下面來看看如何自定義 Sanitizer API。

如果想創建自定義的清理器配置,只需要創建一個配置對象,并在初始化 Sanitizer API 時將其傳遞給構造函數即可。

const config = {
  allowElements: [],
  blockElements: [],
  dropElements: [],
  allowAttributes: {},
  dropAttributes: {},
  allowCustomElements: true,
  allowComments: true
};
// 清理結果由配置定制
new Sanitizer(config)

以下配置參數定義了清理器應如何處理給定元素的凈化結果。

  • allowElements:指定清理器應保留在輸入中的元素。
  • blockElements:指定清理器應從輸入中刪除但保留其子元素的元素。
  • dropElements:指定清理器應從輸入中刪除,包括其子元素在內的元素。
const str = `hello <b><i>there</i></b>`

new Sanitizer().sanitizeFor("div", str)
// <div>hello <b><i>there</i></b></div>

new Sanitizer({allowElements: [ "b" ]}).sanitizeFor("div", str)
// <div>hello <b>there</b></div>

new Sanitizer({blockElements: [ "b" ]}).sanitizeFor("div", str)
// <div>hello <i>there</i></div>

new Sanitizer({allowElements: []}).sanitizeFor("div", str)
// <div>hello there</div>

使用 allowAttributes 和 dropAttributes 參數可以定義允許或刪除哪個屬性。

const str = `<span id=foo class=bar style="color: red">hello there</span>`

new Sanitizer().sanitizeFor("div", str)
// <div><span id="foo" class="bar" style="color: red">hello there</span></div>

new Sanitizer({allowAttributes: {"style": ["span"]}}).sanitizeFor("div", str)
// <div><span style="color: red">hello there</span></div>

new Sanitizer({dropAttributes: {"id": ["span"]}}).sanitizeFor("div", str)
// <div><span class="bar" style="color: red">hello there</span></div>

AllowCustomElements 參數允許或拒絕使用自定義元素。

const str = `<elem>hello there</elem>`

new Sanitizer().sanitizeFor("div", str);
// <div></div>

new Sanitizer({ allowCustomElements: true,
                allowElements: ["div", "elem"]
              }).sanitizeFor("div", str);
// <div><elem>hello there</elem></div>

注意:如果創建的 Sanitizer 沒有任何參數且沒有明確定義的配置,則將應用默認配置值。

瀏覽器支持

目前,瀏覽器對 Sanitizer API 的支持有限,并且規范仍在制定中。該 API 仍處于實驗階段,因此在生產中使用之前應關注其變化進展。

圖片圖片

三、第三方庫

到這里我們就知道了,原生 API 和常用的前端框架都沒有提供可用的方式來安全的渲染HTML。在實際的開發中,我們可以借助已有的第三方庫來安全的渲染 HTML,下面就來介紹幾個常用給的庫。

DOMPurify

DOMPurify 是一款流行的JavaScript庫,用于在瀏覽器環境下進行HTML凈化和防止跨站腳本攻擊(XSS)。它通過移除惡意代碼、過濾危險標簽和屬性等方式來保護網頁免受XSS攻擊的威脅。DOMPurify使用了嚴格的解析和驗證策略,并提供了可配置的選項,以便開發人員根據自己的需求進行定制。它可以輕松地集成到現有的Web應用程序中,并且被廣泛認為是一種安全可靠的HTML凈化解決方案。

可以通過以下步驟來使用 DOMPurify:

  1. 首先,安裝DOMPurify庫。可以通過運行以下命令來安裝它:
npm install dompurify
  1. 在需要使用的組件文件中,引入DOMPurify庫:
import DOMPurify from 'dompurify';
  1. 在組件的適當位置,使用 DOMPurify 來凈化HTML字符串,下面以 React 為例:
import React from 'react';

const MyComponent = () => {
  const userInput = '<script>alert("XSS");</script><p>Hello, World!</p>';
  const cleanedHtml = DOMPurify.sanitize(userInput);

  return <div dangerouslySetInnerHTML={{ __html: cleanedHtml }}></div>;
};

這里通過在React組件的dangerouslySetInnerHTML屬性中傳遞凈化后的HTML內容來顯示安全的HTML。

DOMPurify提供了一些選項和配置,可以使用這些選項來自定義DOMPurify的行為:

import DOMPurify from 'dompurify';

// 創建自定義的白名單(允許的標簽和屬性)
const myCustomWhiteList = DOMPurify.sanitize.defaults.allowedTags.concat(['custom-tag']);
const myCustomAttributes = ['data-custom-attr'];

// 創建自定義選項
const myOptions = {
  ALLOWED_TAGS: myCustomWhiteList,
  ATTRIBUTES: {
    ...DOMPurify.sanitize.defaults.ALLOWED_ATTR,
    'custom-tag': myCustomAttributes,
  },
};

const userInput = '<script>alert("XSS");</script><p>Hello, World!</p><custom-tag data-custom-attr="custom-value">Custom Content</custom-tag>';

const cleanedHtml = DOMPurify.sanitize(userInput, myOptions);

console.log(cleanedHtml);
// 輸出: <p>Hello, World!</p><custom-tag data-custom-attr="custom-value">Custom Content</custom-tag>

這里定義了一個自定義的白名單myCustomWhiteList,包含了DOMPurify默認的允許標簽,并添加了一個名為custom-tag的自定義標簽。我們還定義了一個包含自定義屬性data-custom-attr的對象myCustomAttributes。然后,創建了一個自定義選項myOptions,通過覆蓋ALLOWED_TAGS和ATTRIBUTES來應用自定義的白名單和屬性規則。最后,使用DOMPurify.sanitize()方法,并傳入用戶輸入的HTML和自定義選項myOptions,DOMPurify 會根據自定義規則進行過濾和凈化。

可以根據需要定義自己的白名單(允許的標簽)和屬性,并在自定義選項中使用它們來自定義DOMPurify的行為。

js-xss

js-xss是一個JavaScript庫,用于防御和過濾跨站腳本攻擊(XSS)。它提供了一組方法和函數,可以凈化和轉義用戶輸入的HTML內容,以確保在瀏覽器環境中呈現的HTML是安全的。

js-xss庫使用白名單過濾器的概念來防御XSS攻擊。它定義了一組允許的HTML標簽和屬性,同時還提供了一些選項和配置來定制過濾規則。使用js-xss,可以對用戶提交的HTML內容進行凈化,刪除或轉義所有潛在的危險代碼,只保留安全的HTML標簽和屬性。

可以通過以下步驟來使用 js-xss:

  1. 安裝js-xss庫:通過npm或yarn安裝js-xss庫。
npm install xss
  1. 導入js-xss庫:在React組件文件中導入js-xss庫。
import xss from 'xss';
  1. 使用js-xss過濾HTML內容:在需要過濾HTML的地方,調用js-xss的方法來凈化HTML。
import React from 'react';
import xss from 'xss';

const MyComponent = () => {
  const userInput = '<script>alert("XSS");</script><p>Hello, World!</p>';
  const cleanedHtml = xss(userInput);

  return <div dangerouslySetInnerHTML={{ __html: cleanedHtml }} />;
};

export default MyComponent;

這里在MyComponent組件中使用了dangerouslySetInnerHTML屬性來渲染HTML內容。通過調用xss()函數并傳入用戶輸入的HTML,我們可以將其過濾和凈化,并將結果設置為組件的內容。

js-xss庫提供了一些選項和配置,可以使用這些選項來定義自定義的過濾規則:

import xss from 'xss';

// 創建自定義WhiteList過濾規則
const myCustomWhiteList = {
  a: ['href', 'title', 'target'], // 只允許'a'標簽的'href', 'title', 'target'屬性
  p: [], // 允許空白的'p'標簽
  img: ['src', 'alt'], // 只允許'img'標簽的'src', 'alt'屬性
};

// 創建自定義選項
const myOptions = {
  whiteList: myCustomWhiteList, // 使用自定義的WhiteList過濾規則
};

const userInput = '<script>alert("XSS");</script><p>Hello, World!</p><a  target="_blank">Example</a>';

const cleanedHtml = xss(userInput, myOptions);

console.log(cleanedHtml);
// 輸出: <p>Hello, World!</p><a  target="_blank">Example</a>

這里定義了一個自定義的WhiteList過濾規則myCustomWhiteList,并將其傳遞給定義的選項myOptions。然后,調用xss()函數時傳入用戶輸入的HTML和自定義選項,js-xss庫會根據自定義的規則進行過濾和凈化。

sanitize-html

sanitize-html 是一個用于凈化和過濾HTML代碼的JavaScript庫。它被設計用于去除潛在的惡意或不安全的內容,以及保護應用程序免受跨站腳本攻擊(XSS)等安全漏洞的影響。它提供了一種簡單而靈活的方式來清理用戶輸入的HTML代碼,以確保只有安全的標簽、屬性和樣式保留下來,并且不包含任何惡意代碼或潛在的危險內容。

sanitize-html使用一個白名單(配置選項)來定義允許的標簽、屬性和樣式,并將所有不在白名單內的內容進行過濾和刪除。它還可以處理不匹配的標簽、標簽嵌套問題和其他HTML相關的問題。

可以通過以下步驟來使用 sanitize-html:

  1. 在項目中安裝sanitize-html庫:
npm install sanitize-html
  1. 在組件中引入sanitize-html庫:
import sanitizeHtml from 'sanitize-html';
  1. 在組件中使用sanitizeHtml函數來凈化和過濾HTML代碼。例如,您以將用戶輸入的HTML存儲在組件的狀態或屬性中,并在渲染時應用sanitizeHtml函數:
import React from 'react';
import sanitizeHtml from 'sanitize-html';

function MyComponent() {
  const userInput = '<script>alert("XSS");</script><p>Hello, World!</p>';
  const cleanedHtml = sanitizeHtml(userInput);

  return (
    <div>
      <div dangerouslySetInnerHTML={{ __html: cleanedHtml }}></div>
    </div>
  );
}

這里在組件內部定義了用戶輸入的HTML代碼,并使用sanitizeHtml函數對其進行凈化。然后,使用dangerouslySetInnerHTML屬性將經過凈化的HTML代碼渲染到頁面上。

可以使用sanitize-html提供的sanitize函數并傳遞一個配置對象作為參數來自定義sanitize-html的配置,配置對象可以包含一系列選項,用于定義過濾規則和允許的HTML標簽和屬性等。

import sanitizeHtml from 'sanitize-html';

const customConfig = {
  allowedTags: ['b', 'i', 'u'], // 允許的標簽
  allowedAttributes: {
    a: ['href'] // 允許的a標簽屬性
  },
  allowedSchemes: ['http', 'https'], // 允許的URL協議
  allowedClasses: {
    b: ['bold', 'highlight'], // 允許的b標簽的class
    i: ['italic'] // 允許的i標簽的class
  },
  transformTags: {
    b: 'strong', // 將b標簽轉換為strong標簽
    i: 'em' // 將i標簽轉換為em標簽
  },
  nonTextTags: ['style', 'script', 'textarea', 'noscript'] // 不允許解析的標簽
};

const userInput = '<b class="bold">Hello</b> <i class="italic">World</i> <a ;

const cleanedHtml = sanitizeHtml(userInput, customConfig);

這里創建了一個名為customConfig的配置對象,其中包含了一些自定義的過濾規則和選項。這個配置對象定義了允許的標簽、允許的屬性、允許的URL協議、允許的CSS類名、標簽的轉換規則以及不允許解析的標簽等。

然后,將用戶輸入的HTML代碼作為第一個參數傳遞給sanitizeHtml函數,并將customConfig作為第二個參數傳遞。sanitizeHtml函數將根據配置對象中定義的規則對HTML代碼進行過濾和凈化,并返回經過凈化后的HTML代碼。

責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2009-08-07 15:58:54

C#字符串插入html

2021-03-11 18:44:39

字符串SQL表達式

2017-12-07 16:08:47

數據優化HTML字符串

2010-09-09 11:48:00

SQL函數字符串

2023-01-09 09:52:06

Bash字符串

2021-05-31 07:57:00

拼接字符串Java

2024-04-01 08:41:39

字符串.NET

2022-04-27 10:35:27

邊緣渲染前端

2021-03-08 08:23:24

Java字符串截取

2010-03-12 18:29:56

Python字符串替換

2022-12-15 16:23:32

JavaScrip字符串開發

2010-05-26 15:36:23

MySQL字符串

2019-12-25 15:41:50

JavaScript程序員編程語言

2010-05-26 15:14:39

MySQL字符串

2021-01-09 23:11:33

SQL數據庫字母

2010-06-28 15:18:51

SQL Server

2010-02-01 16:22:36

Python字符串操作

2010-03-12 10:46:50

Python字符串

2022-11-25 07:53:26

bash腳本字符串

2009-06-23 14:13:00

Java字符串
點贊
收藏

51CTO技術棧公眾號

乱亲女秽乱长久久久| 在线欧美一区二区| 国产精品综合久久久久久| 久久久久久久久久91| 高清精品xnxxcom| 亚洲成人精品一区二区| 日本成人看片网址| 99久久国产免费| 国产精品视频| 欧美成人亚洲成人| 色噜噜日韩精品欧美一区二区| 欧美成人xxxx| 疯狂欧美牲乱大交777| 色姑娘综合网| 免费国产黄色片| 美女视频网站黄色亚洲| 久久久最新网址| 欧美福利在线视频| 神马日本精品| 日韩免费成人网| 在线观看国产一级片| sm久久捆绑调教精品一区| 国产拍欧美日韩视频二区| 91成人伦理在线电影| 日韩久久久久久久久久| 亚洲精选一区| 欧美另类极品videosbestfree| 欧美做受高潮6| 国产在线播放精品| 91精品国产91久久综合桃花 | 色综合天天综合网国产成人综合天 | 国产黄在线播放| 99久久婷婷国产综合精品| 91美女福利视频高清| 亚洲视屏在线观看| 美女国产精品| 欧美亚洲午夜视频在线观看| 久久久久久久久久久久国产| 婷婷久久一区| 日韩一区视频在线| 最新日韩免费视频| 激情五月综合网| 亚洲欧洲日产国码av系列天堂| 2018国产精品| 中文在线免费一区三区| 欧美一区日韩一区| 深爱五月综合网| 亚洲综合资源| 欧美另类一区二区三区| 一级做a免费视频| 成人在线视频观看| 精品视频在线免费| 亚洲不卡视频在线| 91亚洲视频| 欧美三级日韩三级| 亚洲77777| 日韩黄色三级在线观看| 欧美酷刑日本凌虐凌虐| 精品综合久久久久| 国产成人免费av一区二区午夜 | 黄大色黄女片18第一次| 日本在线中文字幕一区二区三区| 在线观看日韩一区| 午夜两性免费视频| 日韩专区视频| 91精品国产欧美一区二区成人| 999热精品视频| **爰片久久毛片| 亚洲国产精品嫩草影院久久| 日韩成人av一区二区| 网曝91综合精品门事件在线| 精品视频在线播放免| 国产特级黄色录像| av一区二区在线播放| 综合网日日天干夜夜久久| 永久免费看片直接| 欧美日韩在线大尺度| 国内精品久久久久久中文字幕| 国产成人无码精品久在线观看| 亚洲专区在线| 国产免费久久av| h狠狠躁死你h高h| 99视频在线精品| 亚洲高清精品中出| 在线中文免费视频| 欧美丝袜一区二区| 狠狠干狠狠操视频| aaa国产精品| 国产亚洲精品一区二555| 99久久精品久久亚洲精品| 国产精品毛片久久| 午夜精品一区二区三区在线| 一级黄色av片| 成人午夜短视频| 三级三级久久三级久久18| 成人在线免费看片| 天天影视色香欲综合网老头| 伊人国产在线视频| 精品国产影院| 久久天天躁日日躁| 东京热一区二区三区四区| 国产真实精品久久二三区| 国内精品久久国产| 免费在线看黄色| 狠狠久久五月精品中文字幕| 欧美日韩一区二区三区69堂| 精品人人人人| 麻豆乱码国产一区二区三区| chinese国产精品| 国产1区2区3区精品美女| 日韩欧美电影一区二区| 丰满大乳少妇在线观看网站| 欧美日韩www| 久久久久久亚洲中文字幕无码| 欧美在线二区| 国产欧美久久一区二区| 亚洲av激情无码专区在线播放| 亚洲男同1069视频| 久久久精品麻豆| 欧美有码在线| 欧美激情视频三区| 一级片视频网站| 久久久不卡影院| 日韩国产欧美亚洲| 无码国模国产在线观看| 色偷偷88888欧美精品久久久| 国产尤物在线视频| 成人a区在线观看| 成人性做爰片免费视频| 国产成+人+综合+亚洲欧美| 日韩极品精品视频免费观看| 动漫性做爰视频| 精品在线观看免费| 色婷婷精品国产一区二区三区| 欧美gv在线| 亚洲国产精品一区二区三区| 九九视频免费在线观看| 精久久久久久久久久久| 亚洲午夜精品国产| 福利视频一区| 在线亚洲午夜片av大片| 久久久久精彩视频| 国产农村妇女毛片精品久久麻豆| 成人在线观看黄| 国产成人精品三级高清久久91| 欧美在线不卡区| 日本福利在线观看| 色综合久久久久久久久久久| 91精品国产自产| 裸体一区二区| 日本一区二区在线| 国产精品久久亚洲不卡| 中文字幕av一区二区| 自拍偷拍福利视频| 国产精品久久久久久久久动漫| 色国产在线视频| 性欧美欧美巨大69| 91蜜桃网站免费观看| 色帝国亚洲欧美在线| 亚洲精品在线观看视频| 日韩 欧美 精品| www精品美女久久久tv| 国产a级片免费观看| 成人短片线上看| 成人欧美一区二区三区在线| 91高清在线观看视频| 欧美v国产在线一区二区三区| 久久久久久久久久久久久久免费看 | 97在线视频免费播放| 日本a一级在线免费播放| 色综合激情久久| 精品少妇一区二区三区密爱| 国产高清精品久久久久| 日韩成人三级视频| 先锋影音国产精品| 国产精品美女久久| 国产视频中文字幕在线观看| 精品日韩一区二区三区| 国产毛片aaa| 国产精品免费aⅴ片在线观看| 亚洲制服中文字幕| 99在线精品免费视频九九视| 久久青青草综合| 色狠狠一区二区三区| 欧美国产日韩免费| 美州a亚洲一视本频v色道| 欧美日韩在线播放三区| 久草福利资源在线观看| 91在线国产福利| 在线看免费毛片| 国产毛片久久| 中文字幕一区二区三区精彩视频| h视频久久久| 国产精品成人免费电影| av免费网站在线| 亚洲天堂av在线播放| 国产男女裸体做爰爽爽| 狠狠色噜噜狠狠狠狠97| 日本黄色片免费观看| 久久蜜臀精品av| 亚洲视频在线不卡| 久久先锋影音| 欧美这里只有精品| 成人av国产| 欧美黄色直播| 视频精品一区| 国产伦精品一区二区三区精品视频| 黄污视频在线观看| 久久精品亚洲国产| 国产视频精品久久| 亚洲国产第一页| 国产特级黄色片| 在线免费观看日本欧美| 日本一级淫片色费放| 亚洲手机成人高清视频| av网站免费在线看| 不卡av在线网| 精品国产午夜福利在线观看| 日本中文在线一区| 欧美精品一区免费| 狠狠入ady亚洲精品| 手机在线视频你懂的| 国产一卡不卡| 久久久婷婷一区二区三区不卡| 日韩成人在线视频观看| 日本亚洲欧美在线| 亚洲人成精品久久久久| 亚洲精品一区二区三区影院忠贞| www.亚洲色图.com| 免费国偷自产拍精品视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 内射国产内射夫妻免费频道| 黑人一区二区| 久久综合亚洲精品| 久久久久美女| 尤物一区二区三区| 日韩精品水蜜桃| 亚洲成人精品电影在线观看| 欧美禁忌电影网| 欧美高清性xxxxhd | 日本午夜一区二区| 99热自拍偷拍| 在线亚洲成人| 无码aⅴ精品一区二区三区浪潮 | 性chinese极品按摩| 首页综合国产亚洲丝袜| 日韩视频在线免费看| 老**午夜毛片一区二区三区| 成人羞羞国产免费网站| 国产精品毛片在线| 国产男女无遮挡| 久久久噜噜噜| 日本男人操女人| 免费av成人在线| 中文字幕亚洲影院| 国产一区不卡在线| 韩国三级在线播放| 激情图片小说一区| 被黑人猛躁10次高潮视频| 国产激情一区二区三区四区| 岛国精品一区二区三区| 成年人网站91| 性少妇bbw张开| 欧美激情一二三区| 国产探花在线视频| 一区二区三区四区在线| 国产无码精品一区二区| 高跟丝袜一区二区三区| 免费看一级视频| 欧美精品aⅴ在线视频| av片免费播放| 亚洲精品www久久久久久广东| 日韩一区av| 日韩最新中文字幕电影免费看| 黄色网址免费在线观看| 欧美激情一区二区三区高清视频| а√在线中文网新版地址在线| 青青草成人在线| 日韩伦理一区二区| 国产精品国产三级国产专区53| 欧美交a欧美精品喷水| 色播亚洲婷婷| 好看不卡的中文字幕| 大香煮伊手机一区| 久久精品二区亚洲w码| 91超薄肉色丝袜交足高跟凉鞋| 久久久不卡网国产精品二区| 麻豆明星ai换脸视频| 欧美日韩精品二区| 依依成人在线视频| 精品国产乱码久久久久久1区2区| 黑人与亚洲人色ⅹvideos| 不卡av日日日| 日韩精品99| 动漫精品视频| 日韩大片在线播放| 欧美深夜福利视频| 久久99国产精品成人| 国产精品九九视频| 国产精品不卡在线| 国产无遮挡裸体免费视频| 欧美色综合久久| 天天操天天干天天插| 久久精品亚洲国产| 666av成人影院在线观看| 亚洲一区二区三区xxx视频| 综合国产视频| 嫩草影院中文字幕| 麻豆国产精品777777在线| 亚洲欧美日韩色| 18涩涩午夜精品.www| 亚洲GV成人无码久久精品| 日韩欧美在线影院| 在线免费av电影| 日本高清不卡在线| 91久久精品无嫩草影院| 在线国产99| 日韩不卡一二三区| 最新中文字幕视频| 亚洲一级片在线观看| 国产伦精品一区二区三区免.费| 亚洲欧美一区二区激情| av免费不卡| 国产高清在线一区| 午夜日韩福利| 亚洲高清在线不卡| 国产精品久久久久久妇女6080| 久久久成人免费视频| 日韩大片免费观看视频播放| 欧美日韩经典丝袜| 99re在线视频上| 欧美黄色大片网站| 亚洲无在线观看| 中文字幕一区不卡| 亚洲图片中文字幕| 在线日韩精品视频| 另类中文字幕国产精品| 欧美日韩大片一区二区三区| 羞羞视频在线观看欧美| 一级特级黄色片| 精品成人在线视频| 午夜视频福利在线| 91sa在线看| 亚洲丝袜啪啪| 日韩精品免费播放| 国产欧美精品一区aⅴ影院| 午夜精品一区二| 一区二区中文字幕| 国内自拍亚洲| 在线不卡视频一区二区| 精品一区二区三区蜜桃| 婷婷在线精品视频| 日韩精品一区二区三区视频播放 | 欧美午夜片在线免费观看| 无码国产精品高潮久久99| 2021国产精品视频| 精品国产午夜| 一女二男3p波多野结衣| 成人免费在线视频| 午夜美女福利视频| 国模gogo一区二区大胆私拍 | 91av一区| japanese在线视频| 国产传媒日韩欧美成人| 国产大片aaa| 亚洲久久久久久久久久久| 忘忧草在线www成人影院| 在线观看欧美亚洲| 国产精一区二区三区| 豆国产97在线 | 亚洲| 精品视频久久久| 国产精品原创视频| 成人在线免费高清视频| av男人天堂一区| 国产精品51麻豆cm传媒| 欧美刺激性大交免费视频| 卡通动漫国产精品| 国产精品人人妻人人爽人人牛| 中文一区二区在线观看| 国产aⅴ爽av久久久久成人| 久久久中精品2020中文| 激情五月综合网| 中文字幕1区2区| 色狠狠色狠狠综合| 成年人网站在线| 久久久精品国产一区二区三区| 久久精品国产亚洲高清剧情介绍 | 日韩欧美有码在线| 日本精品在线| 久久99精品久久久久久青青日本| 日本免费新一区视频| 九九九免费视频| 伊人伊人伊人久久| 国产精品香蕉| 欧美伦理片在线观看| 午夜欧美视频在线观看| 91caoporm在线视频| 国产一区二区三区免费不卡| 美女免费视频一区二区| 久久精品国产亚洲av麻豆色欲|