国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

前端水印實(shí)現(xiàn)方案

共 60538字,需瀏覽 122分鐘

 ·

2021-06-01 05:40

大廠技術(shù)  堅(jiān)持周更  精選好文

一、問題背景

為了防止信息泄露或知識(shí)產(chǎn)權(quán)被侵犯,在web的世界里,對(duì)于頁面和圖片等增加水印處理是十分有必要的,水印的添加根據(jù)環(huán)境可以分為兩大類,前端瀏覽器環(huán)境添加和后端服務(wù)環(huán)境添加,簡(jiǎn)單對(duì)比一下這兩種方式的特點(diǎn):

前端瀏覽器加水?。?/p>

  • 減輕服務(wù)端的壓力,快速反應(yīng)

  • 安全系數(shù)較低,對(duì)于掌握一定前端知識(shí)的人來說可以通過各種騷操作跳過水印獲取到源文件

  • 適用場(chǎng)景:

    資源不跟某一個(gè)單獨(dú)的用戶綁定,而是一份資源,多個(gè)用戶查看,需要在每一個(gè)用戶查看的時(shí)候添加用戶特有的水印,多用于某些機(jī)密文檔或者展示機(jī)密信息的頁面,水印的目的在于文檔外流的時(shí)候可以追究到責(zé)任人

后端服務(wù)器加水?。?/span>
  • 當(dāng)遇到大文件密集水印,或是復(fù)雜水印,占用服務(wù)器內(nèi)存、運(yùn)算量,請(qǐng)求時(shí)間過長
  • 安全性高,無法獲取到加水印前的源文件
  • 適用場(chǎng)景:資源為某個(gè)用戶獨(dú)有,一份原始資源只需要做一次處理,將其存儲(chǔ)之后就無需再次處理,水印的目的在于標(biāo)示資源的歸屬人 這里我們討論前端瀏覽器環(huán)境添加

二、收益分析

簡(jiǎn)單介紹一下目前主流的前端加水印的方法,以后其他同學(xué)在用到的時(shí)候可以作為參考。

三、實(shí)現(xiàn)方案

1. 重復(fù)的dom元素覆蓋實(shí)現(xiàn)

從效果開始,要實(shí)現(xiàn)的效果是「在頁面上充滿透明度較低的重復(fù)的代表身份的信息」,第一時(shí)間想到的方案是在頁面上覆蓋一個(gè)position:fixed的div盒子,盒子透明度設(shè)置較低,設(shè)置pointer-events: none;樣式實(shí)現(xiàn)點(diǎn)擊穿透,在這個(gè)盒子內(nèi)通過js循環(huán)生成小的水印div,每個(gè)水印div內(nèi)展示一個(gè)要顯示的水印內(nèi)容,簡(jiǎn)單實(shí)現(xiàn)了一下

<!DOCTYPE html> 
<html> 
    <head> 
        <meta charset="utf-8"> 
        <title></title> 
        <style> 
            #watermark-box { 
                position: fixed; 
                top0
                bottom0
                left0
                right0
                font-size24px
                font-weight700
                display: flex; 
                flex-wrap: wrap; 
                overflow: hidden; 
                user-select: none; 
                pointer-events: none; 
                opacity0.1
                z-index999;
            } 
            .watermark { 
                text-align: center; 
            } 
        
</style> 
    </head> 
    <body> 
        <div> 
            <h2> 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- </h2> 
            <br /> 
            <h2> 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- </h2> 
            <br /> 
            <h2 onclick="alert(1)"> 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- 機(jī)密內(nèi)容- </h2> 
            <br /> 
        </div> 
        <div id="watermark-box"> 
        </div> 
        <script> 
            function doWaterMark(width, height, content
                let box = document.getElementById("watermark-box"); 
                let boxWidth = box.clientWidth, 
                    boxHeight = box.clientHeight; 
                for (let i = 0; i < Math.floor(boxHeight / height); i++) { 
                    for (let j = 0; j < Math.floor(boxWidth / width); j++) { 
                        let next = document.createElement("div"
                        next.setAttribute("class""watermark"
                        next.style.width = width + 'px' 
                        next.style.height = height + 'px' 
                        next.innerText = content 
                        box.appendChild(next) 
                    } 
                } 
            } 
            window.onload = doWaterMark(300100'水印123'
        
</script> 
    </body> 
</html>

頁面效果是有了,但是這種方案需要要在js內(nèi)循環(huán)創(chuàng)建多個(gè)dom元素,既不優(yōu)雅也影響性能,于是考慮可不可以不生成這么多個(gè)元素。

2. canvas輸出背景圖

第一步還是在頁面上覆蓋一個(gè)固定定位的盒子,然后創(chuàng)建一個(gè)canvas畫布,繪制出一個(gè)水印區(qū)域,將這個(gè)水印通過toDataURL方法輸出為一個(gè)圖片,將這個(gè)圖片設(shè)置為盒子的背景圖,通過backgroud-repeat:repeat;樣式實(shí)現(xiàn)填滿整個(gè)屏幕的效果,簡(jiǎn)單實(shí)現(xiàn)的代碼。

 <!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div id="info" onclick="alert(1)" >
            123
        </div>
        <script>
           (function ({
              function __canvasWM({
                container = document.body,
                width = '300px',
                height = '200px',
                textAlign = 'center',
                textBaseline = 'middle',
                font = "20px Microsoft Yahei",
                fillStyle = 'rgba(184, 184, 184, 0.6)',
                content = '水印',
                rotate = '45',
                zIndex = 10000
              } = {}
{
                const args = arguments[0];
                const canvas = document.createElement('canvas');
        
                canvas.setAttribute('width', width);
                canvas.setAttribute('height', height);
                const ctx = canvas.getContext("2d");
        
                ctx.textAlign = textAlign;
                ctx.textBaseline = textBaseline;
                ctx.font = font;
                ctx.fillStyle = fillStyle;
                ctx.rotate(Math.PI / 180 * rotate);
                ctx.fillText(content, parseFloat(width) / 2parseFloat(height) / 2);
        
                const base64Url = canvas.toDataURL();
                const __wm = document.querySelector('.__wm');
        
                const watermarkDiv = __wm || document.createElement("div");
                const styleStr = `
                  position:fixed;
                  top:0;
                  left:0;
                  bottom:0;
                  right:0;
                  width:100%;
                  height:100%;
                  z-index:${zIndex};
                  pointer-events:none;
                  background-repeat:repeat;
                  background-image:url('${base64Url}')`
;
        
                watermarkDiv.setAttribute('style', styleStr);
                watermarkDiv.classList.add('__wm');
        
                if (!__wm) {
                  container.insertBefore(watermarkDiv, container.firstChild);
                }
                
                if (typeof module != 'undefined' && module.exports) {  //CMD
                    module.exports = __canvasWM;
                } else if (typeof define == 'function' && define.amd) { // AMD
                    define(function ({
                      return __canvasWM;
                    });
                } else {
                    window.__canvasWM = __canvasWM;
                }
              })();
                
            // 調(diào)用
            __canvasWM({
              content'水印123'
            });
        
</script>
    </body>
</html>

3. svg實(shí)現(xiàn)背景圖

與canvas生成背景圖的方法類似,只不過是生成背景圖的方法換成了通過svg生成,canvas的兼容性略好于svg。兼容性對(duì)比:

canvas

svg

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div id="info" onclick="alert(1)">
            123
        </div>
        <script>
           (function ({
              function __canvasWM({
                container = document.body,
                width = '300px',
                height = '200px',
                textAlign = 'center',
                textBaseline = 'middle',
                font = "20px Microsoft Yahei",
                fillStyle = 'rgba(184, 184, 184, 0.6)',
                content = '水印',
                rotate = '45',
                zIndex = 10000,
                        opacity = 0.3
              } = {}
{
                const args = arguments[0];
                  const svgStr = `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${width}">
                  <text x="50%" y="50%" dy="12px"
                    text-anchor="middle"
                    stroke="#000000"
                    stroke-width="1"
                    stroke-opacity="${opacity}"
                    fill="none"
                    transform="rotate(-45, 120 120)"
                    style="font-size: ${font};">
                    ${content}
                  </text>
                </svg>`
;
                const base64Url = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(svgStr)))}`;
                const __wm = document.querySelector('.__wm');

                const watermarkDiv = __wm || document.createElement("div");
                
                const styleStr = `
                  position:fixed;
                  top:0;
                  left:0;
                  bottom:0;
                  right:0;
                  width:100%;
                  height:100%;
                  z-index:${zIndex};
                  pointer-events:none;
                  background-repeat:repeat;
                  background-image:url('${base64Url}')`
;
        
                watermarkDiv.setAttribute('style', styleStr);
                watermarkDiv.classList.add('__wm');
        
                if (!__wm) {
                  container.style.position = 'relative';
                  container.insertBefore(watermarkDiv, container.firstChild);
                }
              if (typeof module != 'undefined' && module.exports) {  //CMD
                module.exports = __canvasWM;
              } else if (typeof define == 'function' && define.amd) { // AMD
                define(function ({
                  return __canvasWM;
                });
              } else {
                window.__canvasWM = __canvasWM;
              }
            })();
        
            // 調(diào)用
            __canvasWM({
              content'水印123'
            });
        
</script>
    </body>
</html>

但是,以上三種方法存在一個(gè)共同的問題,由于是前端生成dom元素覆蓋到頁面上的,對(duì)于有些前端知識(shí)的人來說,可以在開發(fā)者工具中找到水印所在的元素,將元素整個(gè)刪掉,以達(dá)到刪除頁面上的水印的目的,針對(duì)這個(gè)問題,我想到了一個(gè)很笨的辦法:設(shè)置定時(shí)器,每隔幾秒檢驗(yàn)一次我們的水印元素還在不在,有沒有被修改,如果發(fā)生了變化則再執(zhí)行一次覆蓋水印的方法。網(wǎng)上看到了另一種解決方法:使用MutationObserver

MutationObserver是變動(dòng)觀察器,字面上就可以理解這是用來觀察節(jié)點(diǎn)變化的。Mutation Observer API 用來監(jiān)視 DOM 變動(dòng),DOM 的任何變動(dòng),比如子節(jié)點(diǎn)的增減、屬性的變動(dòng)、文本內(nèi)容的變動(dòng),這個(gè) API 都可以得到通知。

但是MutationObserver只能監(jiān)測(cè)到諸如屬性改變、子結(jié)點(diǎn)變化等,對(duì)于自己本身被刪除,是沒有辦法監(jiān)聽的,這里可以通過監(jiān)測(cè)父結(jié)點(diǎn)來達(dá)到要求。監(jiān)測(cè)代碼的實(shí)現(xiàn):

const MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
if (MutationObserver) {
  let mo = new MutationObserver(function ({
    const __wm = document.querySelector('.__wm');
    // 只在__wm元素變動(dòng)才重新調(diào)用 __canvasWM
    if ((__wm && __wm.getAttribute('style') !== styleStr) || !__wm) {
      // 避免一直觸發(fā)
      mo.disconnect();
      mo = null;
    __canvasWM(JSON.parse(JSON.stringify(args)));
    }
  });

  mo.observe(container, {
    attributestrue,
    subtreetrue,
    childListtrue
  })
}

}

整體代碼

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div id="info" onclick="alert(1)">
                123
        </div>
        <script>
           (function ({
              function __canvasWM({
                container = document.body,
                width = '300px',
                height = '200px',
                textAlign = 'center',
                textBaseline = 'middle',
                font = "20px Microsoft Yahei",
                fillStyle = 'rgba(184, 184, 184, 0.6)',
                content = '水印',
                rotate = '45',
                zIndex = 10000
              } = {}
{
                const args = arguments[0];
                const canvas = document.createElement('canvas');
        
                canvas.setAttribute('width', width);
                canvas.setAttribute('height', height);
                const ctx = canvas.getContext("2d");
        
                ctx.textAlign = textAlign;
                ctx.textBaseline = textBaseline;
                ctx.font = font;
                ctx.fillStyle = fillStyle;
                ctx.rotate(Math.PI / 180 * rotate);
                ctx.fillText(content, parseFloat(width) / 2parseFloat(height) / 2);
        
                const base64Url = canvas.toDataURL();
                const __wm = document.querySelector('.__wm');
        
                const watermarkDiv = __wm || document.createElement("div");
                const styleStr = `
                  position:fixed;
                  top:0;
                  left:0;
                  bottom:0;
                  right:0;
                  width:100%;
                  height:100%;
                  z-index:${zIndex};
                  pointer-events:none;
                  background-repeat:repeat;
                  background-image:url('${base64Url}')`
;
        
                watermarkDiv.setAttribute('style', styleStr);
                watermarkDiv.classList.add('__wm');
        
                if (!__wm) {
                  container.style.position = 'relative';
                  container.insertBefore(watermarkDiv, container.firstChild);
                }
                
                const MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
                if (MutationObserver) {
                  let mo = new MutationObserver(function ({
                    const __wm = document.querySelector('.__wm');
                    // 只在__wm元素變動(dòng)才重新調(diào)用 __canvasWM
                    if ((__wm && __wm.getAttribute('style') !== styleStr) || !__wm) {
                      // 避免一直觸發(fā)
                      mo.disconnect();
                      mo = null;
                    __canvasWM(JSON.parse(JSON.stringify(args)));
                    }
                  });
        
                  mo.observe(container, {
                    attributestrue,
                    subtreetrue,
                    childListtrue
                  })
                }
        
              }
        
              if (typeof module != 'undefined' && module.exports) {  //CMD
                module.exports = __canvasWM;
              } else if (typeof define == 'function' && define.amd) { // AMD
                define(function ({
                  return __canvasWM;
                });
              } else {
                window.__canvasWM = __canvasWM;
              }
            })();
        
            // 調(diào)用
            __canvasWM({
              content'水印123'
            });
        
</script>
    </body>
</html>



當(dāng)然,設(shè)置了MutationObserver之后也只是相對(duì)安全了一些,還是可以通過控制臺(tái)禁用js來跳過我們的監(jiān)聽,總體來說在單純的在前端頁面上加水印總是可以通過一些騷操作來跳過的,防君子不防小人,防外行不防內(nèi)行


4. 圖片加水印

有時(shí)我們需要在圖片上加水印用來標(biāo)示歸屬或者其他信息,在圖片上加水印的實(shí)現(xiàn)思路是,圖片加載成功后畫到canvas中,隨后在canvas中繪制水印,完成后通過canvas.toDataUrl()方法獲得base64并替換原來的圖片路徑

代碼實(shí)現(xiàn):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    <div id="info" onclick="alert(1)">
        <img />
    </div>
    <script>
       (function({
         function __picWM({
           url = '',
           textAlign = 'center',
           textBaseline = 'middle',
           font = "20px Microsoft Yahei",
           fillStyle = 'rgba(184, 184, 184, 0.8)',
           content = '水印',
           cb = null,
           textX = 100,
           textY = 30
         } = {}
{
           const img = new Image();
           img.src = url;
           img.crossOrigin = 'anonymous';
           img.onload = function({
                 const canvas = document.createElement('canvas');
                 canvas.width = img.width;
                 canvas.height = img.height;
                 const ctx = canvas.getContext('2d');

                 ctx.drawImage(img, 00);
                 ctx.textAlign = textAlign;
                 ctx.textBaseline = textBaseline;
                 ctx.font = font;
                 ctx.fillStyle = fillStyle;
                 ctx.fillText(content, img.width - textX, img.height - textY);

                 const base64Url = canvas.toDataURL();
                 cb && cb(base64Url);
           }
         }

        if (typeof module != 'undefined' && module.exports) {  //CMD
           module.exports = __picWM;
         } else if (typeof define == 'function' && define.amd) { // AMD
           define(function ({
                 return __picWM;
           });
         } else {
           window.__picWM = __picWM;
         }
             
       })();

       // 調(diào)用
       __picWM({
           url'./a.png',
           content'水印水印',
           cb(base64Url) => {
                 document.querySelector('img').src = base64Url
           },
       });

    
</script>
    </body>
</html>

5. 拓展:圖片的隱性水印

對(duì)于圖片資源來說,顯性水印會(huì)破壞圖片的完整性,有些情況下我們想要在保留圖片原本樣式,這時(shí)可以添加隱藏水印。

簡(jiǎn)單實(shí)現(xiàn)思路是:圖片的像素信息里存儲(chǔ)著 RGB 的色值,對(duì)于RGB 分量值的小量變動(dòng),是肉眼無法分辨的,不會(huì)影響對(duì)圖片的識(shí)別,我們可以對(duì)圖片的RGB以一種特殊規(guī)則進(jìn)行小量的改動(dòng)。

通過canvas.getImageData()可以獲取到圖片的像素?cái)?shù)據(jù),首先在canvas中繪制出水印圖,獲取到其像素?cái)?shù)據(jù),然后通過canvas獲取到原圖片的像素?cái)?shù)據(jù),選定R、G、B其中一個(gè)如G,遍歷原圖片像素,將對(duì)應(yīng)水印像素有信息的像素的G都轉(zhuǎn)成奇數(shù),對(duì)應(yīng)水印像素沒有信息的像素都轉(zhuǎn)成偶數(shù),處理完后轉(zhuǎn)成base64并替換到頁面上,這時(shí)隱形水印就加好了,正常情況下看這個(gè)圖片是沒有水印的,但是經(jīng)過對(duì)應(yīng)規(guī)則(上邊例子對(duì)應(yīng)的解密規(guī)則是:遍歷圖片的像素?cái)?shù)據(jù)中對(duì)應(yīng)的G,奇數(shù)則將其rgba設(shè)置為0,255,0,偶數(shù)則設(shè)置為0,0,0)的解密處理后就可以看到水印了。

這種方式下,當(dāng)用戶采用截圖、保存圖片后轉(zhuǎn)換格式等方法獲得圖片后,圖片的色值可能是會(huì)變化的,會(huì)影響水印效果 加水印代碼實(shí)現(xiàn):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <canvas id="canvasText" width="256" height="256"></canvas>
        <canvas id="canvas" width="256" height="256"></canvas>
        
        <script>
            var ctx = document.getElementById('canvas').getContext('2d');
            var ctxText = document.getElementById('canvasText').getContext('2d');
            
            var textData;
            ctxText.font = '30px Microsoft Yahei';
            ctxText.fillText('水印'60130);
            textData = ctxText.getImageData(00, ctxText.canvas.width, ctxText.canvas.height).data;
            
            var img = new Image();
            var originalData;
            img.onload = function({
                ctx.drawImage(img, 00);
                // 獲取指定區(qū)域的canvas像素信息
                originalData = ctx.getImageData(00, ctx.canvas.width, ctx.canvas.height);
                console.log(originalData);
                    mergeData(textData,'G')
                    console.log(document.getElementById('canvas').toDataURL())
            };
            img.src = './aa.jpeg';
            
            var mergeData = function(newData, color){
                var oData = originalData.data;
                var bit, offset;  
             
                switch(color){
                    case 'R':
                        bit = 0;
                        offset = 3;
                        break;
                    case 'G':
                        bit = 1;
                        offset = 2;
                        break;
                    case 'B':
                        bit = 2;
                        offset = 1;
                        break;
                }
             
                for(var i = 0; i < oData.length; i++){
                    if(i % 4 == bit){
                        // 只處理目標(biāo)通道
                        if(newData[i + offset] === 0 && (oData[i] % 2 === 1)){
                            // 沒有水印信息的像素,將其對(duì)應(yīng)通道的值設(shè)置為偶數(shù)
                            if(oData[i] === 255){
                                oData[i]--;
                            } else {
                                oData[i]++;
                            }
                        } else if (newData[i + offset] !== 0 && (oData[i] % 2 === 0)){
                            // 有水印信息的像素,將其對(duì)應(yīng)通道的值設(shè)置為奇數(shù)
                            if(oData[i] === 255){
                                oData[i]--;
                            } else {
                                oData[i]++;
                            }
                        }
                    }
                }
                ctx.putImageData(originalData, 00);
            }
            
        
</script>
    </body>
</html>

顯示水印代碼實(shí)現(xiàn):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <canvas id="canvas" width="256" height="256"></canvas>
        
        <script>
            var ctx = document.getElementById('canvas').getContext('2d');
            var img = new Image();
            var originalData;
            img.onload = function({
                ctx.drawImage(img, 00);
                // 獲取指定區(qū)域的canvas像素信息
                originalData = ctx.getImageData(00, ctx.canvas.width, ctx.canvas.height);
                console.log(originalData);
                    processData(originalData)
            };
            img.src = './a.jpg';
            
            var processData = function(originalData){
                var data = originalData.data;
                for(var i = 0; i < data.length; i++){
                    if(i % 4 == 1){
                        if(data[i] % 2 === 0){
                            data[i] = 0;
                        } else {
                            data[i] = 255;
                        }
                    } else if(i % 4 === 3){
                        // alpha通道不做處理
                        continue;
                    } else {
                        // 關(guān)閉其他分量,不關(guān)閉也不影響答案,甚至更美觀 o(^▽^)o
                        data[i] = 0;
                    }
                }
                // 將結(jié)果繪制到畫布
                ctx.putImageData(originalData, 00);
            }
                
        
</script>
    </body>
</html>


這是一種比較簡(jiǎn)單的實(shí)現(xiàn)方式,有興趣想要了解更多的可以參看https://juejin.cn/post/6917934964202242061

四、參考文檔

1.盲水印和圖片隱寫術(shù):https://juejin.cn/post/6917934964202242061

2.不能說的秘密-前端也能玩的圖片隱寫術(shù):http://www.alloyteam.com/2016/03/image-steganography/

3.前端水印生成方案(網(wǎng)頁水印+圖片水印):https://juejin.cn/post/6844903645155164174


瀏覽 51
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 999成人电影| 日韩一区二区三区无码电影| 性满足BBwBBWBBw| 亚洲无码影院| 亚洲黄色网址| 高清无码一区二区三区四区| 久久久WWW成人免费精品| 免费日韩无码| 九九久久久久| 婷婷视频导航| 亚洲啪啪| 日韩图片区小说视频区日| 日韩欧美精品在线观看| 91久久精品无码一区| 日本黄色片在线播放| 欧美成人精品无| 亚洲日逼| 激情五月天网址| 三级中文无码| 我要操逼网| 爱操逼综合网| 亚洲AV无码乱码国产精品黑人| 久久久久久无码日韩欧美电影| H片在线免费观看| 国产成人免费做爰视频| 国产精品一色哟哟哟| 黄色搞逼视频| 五月天超碰| 亚洲v| 九九热免费视频| 人妻精品久久久久中文字幕69| 成人日韩AV| 亚州精品成人片| 国产A片录制现场妹子都很多 | 亚洲国产爱| 好操吊| 精品中文字幕视频| 五月欧美激情| 久久精品禁一区二区三区四区五区| www.91爱爱,com| 在线中文无码| 激情操逼网| 91色区| wwwxx国产| 精品视频在线免费| 韩国色情中文字幕| 日韩av在线免费观看| 成人午夜视频在线观看| 欧美国产日本| 中文无码字幕在线| 一本色道久久| 婷婷五月天电影网| 影音先锋无码AV| 免费无码进口视频| 91成人无码视频| 91超碰人人| 日韩一本道在线| 黄色片在线播放| 伊人天天干| 91在线无码精品秘| 国产一级a毛一级a做免费高清视频 | 2025毛片| 黄色视频在线免费观看高清视频 | 中国老女人性爱视频| 大鷄巴成人A片| 欧美BBWBBWBBWBBWBBwBBW | 特级婬片A片AAA毛片AA做头| 色三区| 欧美日韩亚洲综合| 在线观看视频亚洲| 国产精品V亚洲精品V日韩精品| 欧美一级一区| 自拍偷拍激情视频| 国产视频h| 日韩中文字幕av在线| 国产黄片一区二区三区| 日韩欧美在线一区| 丁香婷婷综合网| 免费在线观看视频a| 久久五月天综合| 精品秘一区性综合三区| 亚洲精品无码中文| 久久国产一区二区| 亚洲天堂一| 一级内射片在线网站观看| 91av导航| 99热在线观看者| 免费高清无码视频在线观看 | 成年免费视频| 精品国产重口乱子伦| 日韩一级片免费| 九九综合网| 三级片网站在线观看| 中文字幕日韩成人| 亚洲视频在线视频| 中文有码在线观看| 亚洲成人久久久| 日产无码| 91亚洲一线产区二线产区| 手机看片1204| 国产成人三级片| 激情性爱五月天| 久久久久三级片| 日本AⅤ在线| 拍拍视频| 五月婷婷丁香| 亚洲激情视频| 中文字幕在线观看a| 国产免费观看av| 欧美一区电影| 神马午夜激情| 人人爽人人爽人人| 高清无码免费观看视频| AAA日韩| 97人妻人人澡人人爽人人| 四川BBB搡BBB爽爽爽电影| 京东热av| 一级黄色片免费| 国产91精品在线观看| 亚洲无码999| 天天日天天射天天干| 无码人妻av黄色一区二区三区 | 国产性爱一级片| 天天干天天日蜜臀色欲av| 日韩三级片网址| 青娱乐一级无码| 免费黄网站在线观看| 影音先锋成人在线资源| 久久国产精品一区二区三区| 最新中文字幕免费MV第一季歌词 | 野花Av| 激情网站在线| 日B视频在线观看| 亚洲av毛片| 国产91在线亚洲| 91丨熟女丨首页| 老熟女痒到不行-ThePorn| 操老女人逼| 亚洲欧美日韩黑料吃瓜在线观看| 亚洲免费观看高清视频| 日逼高清视频| 成人无码激情| 日韩精品免费在线观看| 欧美日韩在线电影| 在线黄| 免费观看无码视频| 色mm在线播放| 日韩成人AV在线播放| 青青国产在线观看| 成人伊人综合网| 亚洲激情图| 青娱乐欧美| 尤物视频网| 内射毛片| 日韩人妻精品无码久久边| 夜夜爽夜夜爽| 亚洲AV无码成人H动漫| 91九色TS另类国产人妖| 亚州中文字幕| 一级黄色电影免费看| 安徽妇女BBBWBBBwm| 国产亚洲AV| 成人手机看片| 国产精品女人777777| 可以免费观看的毛片| 亚洲日产专区| 色片在线观看| 日韩高清无码一区| 国产麻豆AⅤMDMD0071| 日韩视频成人| 麻豆一级| 亚洲www在线观看| 成片免费观看视频大全| 五月丁香在线| 一级无码A片| 加勒比一区二区三区| 免费观看操逼| 成人在线精品视频| 天天干夜夜爽| 中文在线а√天堂8| 蜜臀久久99精品| 男人av在线| 无码人妻一区二区三区免费n狂飙 性猛交AAAA片免费看蜜桃视频 | 日韩免费一区| 日韩中文性受视频| 亚洲天堂高清无码| ChineSe露脸老女人| 人人艹人人干| 欧美大香蕉在线| 日韩一级片| 国产女人18| 黄色一级视频在线观看| 无码窝在线观看| 一级黄色视频网站| 中文字幕一区三区三A片密月 | 亚洲精品免费在线观看| 色欲av伊人久久大香线蕉影院| 国产成人a| 熟女少妇网站| 欧美日屄视频| 天天色AV| 超碰狠狠操| 中文大香蕉视频| 中文字幕乱伦视频| 精品亚洲无码视频| 激情一区二区三区| 欧美自拍视频| 人人操人人操人人操人人操| 久久久久亚洲AV无码麻豆 | 天天日天天操天天| 天堂网中文字幕| 四虎成人免费视频| 久久99精品视频| а√天堂中文最新版8| 国产中文字幕在线免费观看| 水果派中文解说AⅤ| 足交在线观看| 免费国产h| 无码不卡中文字幕| 国产精品无码天天爽视频| 51乱伦| 无码视频免费播放| 中文字幕色站| www.99爱| 999精品视频在线| 黄色片久久| 很很干在线视频| 国产成人a| 九九天堂网| 黑人精品| 亚洲精品中文字幕无码| 久久99精品国产.久久久久| 国产香蕉视频在线播放| 色老板亚洲| 东京热视频在线观看| 一本色道久久88亚洲精品综合| 大香蕉尹人在线观看| 日韩精品久久久久久久| 中文无码日韩| 国产小精品| A视频在线免费观看| 国产精品秘久久久久久网站| 日本草逼网| 久久久久久久久久8888| AV中文在线| 国产精品毛片VA一区二区三区| www.日批| jizzjizz国产| WWWA级片| 大香蕉啪啪视频| 亚洲黄色大片| 俺也去射| 天天爱天天爽| 毛片一区二区| 精品国产久久久久| 97精品在线观看| 狼友视频在线观看| 日韩黄色免费网站| 久久毛片视频| 成人视频网| 男人天堂资源网| 日本精品中文字幕| 免费一级无码婬片A片AAA毛片| 国产乱子伦一区二区三| 欧美性爱小说网| 亚洲一区二区黄色电影视频网站| 久干妞| 午夜激情视频网站| 国产激情免费视频| 四川BBB嫩BBBB爽BBBB| 欧美性爱在线视频| AV天堂手机| 99九九视频| 国产黄色在线视频| 久久久老熟女一区二区三区91| 久久涩| 欧美日韩成人| 国产真实乱婬A片久久久老牛| 人妻操| 国产av探花| 大学生一级特黄大片| 熟女人妻人蜜桃视频| 亚洲成人无码片| 俺去俺来WWW色官方| 大香蕉视频在线观看| 99热99re6国产线播放| 7777AV| 日韩在线欧美在线| 无码专区中文字幕| 男女av| 麻豆午夜福利视频| 中日韩无码| www超碰在线| 欧美日韩高清一区二区三区| 91视频观看| 一级特黄A片| 久久免费视频观看| 亚洲jizzjizz| 九九久久综合| 成人性爱福利视频| 亚洲人成人无码一区二区三区| 欧美熟女18| 国产精品久久一区二区三区影音先锋| 日韩高清av| 欧美偷拍一区二区| 中文成人无字幕乱码精品区| 九九九精品| 狠狠躁日日躁夜夜躁A片男男视频| 久久久9999| 热久久最新| 久久视频免费| 中文无码网站| 国产V在线观看| 影音先锋人妻资源| 丁香婷婷激情| 国产精品国产自产拍高清AV| 欧洲AV在线| 青青草手机视频| 国产又爽又黄免费观看| 中国一级A片| 97精品人妻一区二区三区香蕉农 | 伊人蕉久| 婷婷情色五月| 日韩啊v| 久艹| 91成人在线电影| 樱桃码一区二区三区| 中文无码一区二区三区四区| 亚洲欧洲免费视频| 免费黄色av网址| 婷婷在线观看视频| 欧美最猛黑A片黑人猛交蜜桃视频 色噜噜狠狠一区二区三区300部 | 国产在线视频91| 在线观看av网站中文字幕| 日本三级片网址| 成人做爰A片一区二区| 国产一级a免一级a免费| 亚洲51| 精品a片| 日本久久电影| 青青草网站在线观看| 国产无码高潮在线| av视屏| www.911国产| 欧美日韩中| 欧美性猛交XXXX乱大交3| 又大又粗AV| 黄网在线免费观看| 人妻综合第一页| 精品成人电影| 亚洲色图欧美| 天天干天天干天天日| www.99热视频| 91九色口爆吞精| 久久久激情| 熟妇无码| 成人毛片在线视频| 洞av| 一本到无码| 欧美成人网站视频| 天天日夜夜添| 国产激情精品视频| 国产在线观看AV| www.色中色| 五月婷婷六月激情| 性免费网站| 无码人妻视频| 日韩久久久久| 亚洲免费在线| 91超碰久久在线| 青青草成人免费在线视频| 国产嫩BBwBBw高潮| 亚洲精品一区二区三区四区高清| 欧美日韩免费一区二区三区| 无码视频一二三区| 精品无码秘人妻一区二区三区| 日本中文字幕在线观看视频| 国产成人A片| 黄色午夜| 日韩黄色中文字幕| 偷拍亚洲欧美| 91视频大全| 久久无码一区二区三区| 蜜臀久久精品久久久久| 青娱乐国产| 中文字幕精品在线视频| 91久久精品无码一区| 91av视频| AV无码免费一区二区三区不卡| 色色com| 天天想夜夜操| 欧美成人精品A片免费一区99| 91亚洲免费| 国内精品人妻无码久久久影院蜜桃| 中文无码日本一级A片久久影视| 国产成人黄色片| 一级理论片| 免费在线观看亚洲| 天天爽日日澡AAAA片| 婷婷午夜福利| 在线观看国产| 亚洲黄在线观看| 中文字幕av高清片,中文在线观看| 自拍偷拍一区二区| 亚洲精品97| 第九色| 激情五月丁香花| 人人摸人人干人人操| 草b在线| 亚洲无码电影在线| 男女啪啪国产| 欧美色视频网| 成人毛片100免费观看| av无码导航| 国产欧美精品一区二区| 日韩无码AV中文字幕| 中文字幕av久久波多野结| 少妇bbb搡bbbb搡bbbb| 欧美成人黄色小视频| 中文字幕不卡视频| 亚洲精品日韩综合观看成人91| 99精品视频在线播放免费| A片在线观看网站| 殴殴美日韩在线| 欧美激情无码一区二区三区张丽| 亚洲AV无码成人精品久久久| 在线观看禁无码精品| 在线中文字幕亚洲| 大香蕉久久久| 操逼视频欧美| 16一17女人毛片| 国模精品无码一区二区免费蜜桃| 欧美成人网站免费在线观看| 俺去也| 十八禁无码网站在线观看| 国产成人免费观看视频| 超碰成人在线观看| 老太色HD色老太HD-百度| 欧美性猛交一区二区三区精品| 影音先锋在线视频| 亚洲色a| 欧美一区二区在线| 国产精品第二页| 东京亚洲无码| 久久久一区二区三区四区| 一区二区无码av| 特级丰满少妇免费观看| 成人欧美视频| 99久久久精品久久久久久| 中文字幕日韩人妻| 自拍偷拍综合网| 天天操大香蕉| 免费无码国产在线观看| 高潮流水视频| 免费观看成人片| 影音先锋成人资源站| 一区二区三区观看| 免费日本A片| 91色伦| 婷婷丁香色五月| 性欧美成人播放77777| 麻豆A∨在线| 欧美草逼网| 婷婷国产成人精品| 一本色道久久综合亚洲精品久久| 国产午夜精品一区二区三区牛牛 | 色情电影网站| 女女久久| 91性爱小视频| 国产一级片免费观看| 狠狠成人| 激情aaa| 国产精品TV| 国产精品久久久久久久久久久久久久久 | 国产欧美一区二区精品性色超碰| 91精品国产aⅴ一区二区| 精品久久无码中文字幕| 国产一区二区三区视频| 搡中国东北老女人视频| 日韩精品无码一区二区三区| 激情一一区二区三区| 成人无码视频在线观看| 欧美BBWBBWBBWBBWBBwBBW | 四虎人妻| 日逼一级| 伊人东京热| 刘玥一区二区三区| 思思热在线视频精品| 成人免费黄片| 欧美丰满老熟妇XXXXX性| 成人黄色录像| 久久久久久无码视频| 亚洲小视频在线观看| 黄色片在线观看视频| 无码精品一区二区免费| 亚洲一区二区在线| 亚洲日本视频| 少妇A片| 国产精品自拍一区| 免费无码国产在线53| 成人毛片100免费观看| 亚洲阿v天堂| 999精品视频在线| 91在线无码精品秘入口| 亚洲中文久久| 99热99re6国产线播放| 免费无码视频一区二区| 欧美日韩高清在线| 天天高清无码| 先锋影音成人资源| 成人做爰100部片视频| 中文字幕人妻日韩在线| 91丝袜一区在线观看| 日日夜夜综合| 黄色带亚州| 免费一级电影| 精品久久成人| 欧美特黄一级视频| 超碰日| 无码一区二区三| 中文字幕+乱码+中文字幕在线| 亚洲无码高清在线视频| 亚洲无码一卡| 男女日逼| 操逼一级| 91男女| 国产91免费| 黄色在线网| 亚洲色情视频| 丁香六月综合| 精品人妻午夜| 国产精品中文字幕在线观看| 久久精品免费看| 夜夜骚av一区二区三区| av手机版| 人人操美女| 日韩第三页| 日韩欧AV| 強姦婬片A片AAA毛片Mⅴ| 丁香五月综合网| 日批动态图| 日韩精品免费一区二区在线观看| 伊人色女操穴综合网| 中文字幕第83页| 久久久久久久久国产精品| 大鸡巴久久久久久久| 国产婷婷五月| 亚洲图片激情乱伦小说| 久久精品国产视频| 亚洲偷拍网| a级毛片在线观看| 免费成人三级片| 成人先锋影音| 538在线观看| 米奇色色色| 爆菊花综合网| 欧美肏逼网| 国产成人女人在线观看| 超碰199| 热逼视频| 免费播放片色情A片| 国产高清免费视频| 婷婷五月天电影| 亚洲无码影音先锋| 婷婷操| 久久cao| 一区二区三区四区免费| 亚洲一区AV| 欧美成人怡红院| 无码久| 中文字幕人妻系列| 欧美丝袜脚交xxxxBH| 国产黄片网站| 国产精品大全| 波多野结衣大战黑人| 久久人视频| 韩国精品一区| 久久91久久久久麻豆精品| 免费a片在线观看| 水蜜桃视频免费观看| 天天操人人| 久久精品免费电影| 日韩黄色片在线观看| 91香蕉国产成人App| 黑人狂躁女人高潮视频| 777色色色| 欧美二区视频| 女人一区二区| AV性爱社区| 99热这里都是精品| 水果派av解说| 中文字幕AV播放| 京熱大亂交无碼大亂交| 国产成人亚洲综合AV婷婷| 91av一区二区三区| 精品国产一二三区| 夏目あきら被续侵犯7天| 国产曰韩欧美综合另类在线| 内射免费视频| 伊人久艹| www.一区二区三区| 国产无码播放| 久久嫩草国产成人一区| 91干干| 丝袜久久| 欧美熟妇另类久久久久久不卡 | 色悠悠中文字幕| 中文字幕免费一区| 日韩无码久| av福利电影在线| 中文字幕不卡| 午夜激情在线观看| 成人做爰黄A片免费看陈冠| 色九| 亚洲成人网在线| 国产黄色片视频| 亚洲国产无码在线观看| 国产白丝视频| 日本黄色高清视频| 亚洲午夜激情| 午夜理论在线| 777国产盗摄偷窥精品0000| 手机免费Av| 中文字幕1| 中文字幕国产| 国产黄片视频| 亚洲综合自拍| 中文字幕日韩欧美| 国产激情无码视频| 天天综合国产| 大香蕉av在线观看| 亚洲欧洲AV| 十八禁无码网站在线观看| 欧美成人福利| 国产人妻在线| 黄色无码av| 艹逼在线观看| 国产精品美女久久久久AV爽| 这里只有精品视频在线| 免费的一级片| 一级特黄A片| 国产第页| 操老骚逼视频| 青青国产在线观看| 国产乱子伦一区二区三区视频| 亚洲一区黄色| 亚洲超级高清无码第一在线视频观看 | 亚洲国产三级| 成人在线无码| 国产AV激情| 国产大鸡巴| 中文字幕精品在线| 国产免费无码| 自拍偷拍第一页| 五月天婷婷激情| av高清无码| 婷婷五月色| www.蜜桃| 精品福利在线观看| 伊人中文字幕| 激情六月| 亚洲av在线观看| 亚洲高清无码免费| 黄色在线网站| 91白浆| 波多野结衣一区二区三区| av资源在线| 九九热精品| 一区二区三区精品| 激情一区| 精品91美女| 欧美成人片免费看| 亚洲AAAAAA| 国产性综合| 亚欧在线视频| 男女啪啪啪| 青青草社区视频| 欧美一级操逼视频| 欧美午夜电影| 久久青娱乐| 色香蕉网| 丰满人妻一区二区三区四区53| 特级西西人体444www高清大胆| 日韩欧美黄| 欧美AAA在线观看| 99久久精品国产一区二区成人| 91成人大片| 欧美18禁网站| 国内自拍一区| 成人乱无码AV在线观看| 免费日逼| 色人人| 婷婷久久五月天| 操逼网址| 黄色3A片在线观看| 欧美操逼免费视频| 懂色一区二区二区在线播放视频| 国产高潮视频在线观看| 女人18片毛片60分钟翻译| 国产女人十八水真多| P站免费版-永久免费的福利视频平台| 色情小电影免费网站观看网址在线播 | 亚洲七区| 日韩中字幕无码| 永久m3u8在线观看| 亚洲大逼| 高清无码视频观看| 国产娇小13videos糟蹋| 国产成人午夜福利在线| 东京热视频一区| 中文字幕偷拍| 国产在线小视频| 柒私黄片| 求毛片网址| 黄色成年人视频在线观看| 亚洲无吗视频| 手机看片亚洲| 俺也日| 肏逼视频网站| 天天色色综合| 99人妻人人爽人人添人人精品| 嫩草在线精品| 日韩gay| av色在线| 国产乱码一区二区三区| 美女高潮在线| 欧美成人中文字幕在线| 久久99精品久久久久久水蜜桃| 深夜福利网| 成人午夜激情| 一区色| aa无码视频| 欧美精品毛片| 国产超级无码高清在线视频观看| 青青草原国产视频| 国产三级片AV| 边吃边摸| 日韩高清无码电影| 午夜福利码一区二区| 嫩BBB嗓BBBB榛BBBB| 污污污污污www网站免费民国| 在线免费黄色网址| 国产亚洲无码激情| 日韩AV一区二区三区四区| 中文字幕乱码中文字幕电视剧| 蜜桃传媒一区二区亚洲| 欧美一级性爱| 人人妻人人澡人人爽久久con| 成人资源站| 久久av一区二区三区观看| 99国产精品久久久久久久成人| 先锋影音av资源站| 亚洲日本视频| 思思操在线视频| 四虎精品影院| 欧美大骚逼| 国产乱国产乱老熟300视频| 国产激情网| 四川BBB嫩BBBB爽BBBB| 草少妇| 91免费网站在线观看| 97国产精品久久| 天天草天天干| 五十路无码| 成人在线视频免费观看| 北条麻妃在线播放一区| 人妻无码精品蜜桃| 久本草精品| 亚洲日韩免费观看| 久久成人毛片| 99热这里有精品| 98无码人妻精品一区二区三区| 激情五月天激情网| 欧美啊啊啊| A级毛片在线观看| 日韩av中文字幕在线播放| 秘亚洲国产精品成人网站| 亚洲成人AⅤ| 婷婷视频在线| 韩日一级17c| A免费观看| 国产精品久久久久久久9999| 国产精品视频网站| 豆花视频成人网站入口免费观看| 网址你懂的| 高潮视频在线| 高清无码免费观看视频| 日本高清不卡视频| 亚洲精品日韩无码| 日本中文字幕在线| 国产草逼网站| 9l视频自拍九色9l视频成人| 伊人无码在线| 日本A片在线观看| 嫩草视频在线观看免费网站| 色欲色欲一区二区三区| 99热这里只有精品7| 无码人妻一区二区三区免费n鬼沢| 亚洲AV成人无码久久精品麻豆| 六月丁香五月| 翔田千里无码一区| 亚洲不卡中文字幕| 大香蕉日逼| 国产欧美综合视频一区二区在线| 久久久精品少妇| 无码人妻在线播放| 99无码国产成人精品| 久久精品在线视频| 国产精品AV片| 91AV在线免费观看| 欧美三级片在线视频| 日韩成人视频在线观看| 大帝AV| 国产在线看片| Chinese搡老女人| 色中文字幕| 国产欧美日韩三级| 免费成人视频在线观看| 无码囯无精品毛片大码| 人人操人人摸人人干| 六月婷婷五月天| 精品一区二区三区四| 免费av在线播放| 亚洲免费婷婷| 欧美熟女一区| 97精品欧美91久久久久久久| 大香伊人中文字幕精品| 91麻豆视频| 欧美在线A片| 国产操逼大全| 欧美综合国产| 天干夜操| 亚洲在线观看中文字幕| 乖我硬了让老子cao你小视频| 亚洲一区二区视频| 爆菊花综合网| 一区二区三区精品无码| 亚洲国产精品久久| 狼友视频第二页| 探花一区二区| 内射视频免费观看| 精品无码一区二区三区四区| 中文字幕无吗| 久色91| 一区二区毛片| 久久精品v| 婷婷五月天丁香网| 国产高清自拍视频| 亚洲蜜桃av一区| 另类老妇极品BBWBBw| 2025AV天堂网| 人操人人| 先锋AV资源站| 91人妻最真实刺激绿帽| 18禁在线播放| 精品多人P群无码视频| 日本成人毛片| 国产成人99久久亚洲综合精品| 亚洲中文字幕在线观看免费| 一级免费黄色视频| 去干网欧美| 天天干天天操综合| 97国产精品视频人人做人人爱 | 人成视频在线观看| 久久久久久久久久久亚洲| 亚洲成人AV电影| www.高清无码| 波多野结衣中文字幕久久| 日韩性爱小说| 国产一区二区在线视频| 草逼A片| 日韩欧美国产精品综合嫩V| 色婷婷18| 精品蜜桃秘一区二区三区观看| 青青草在线免费视频| 河南少妇搡BBBB搡BBBB| 在线天堂9| 日本一级视频| 天天做天天爱| 亚洲欧美视频| 99re免费视频| 日韩一级无码| 日韩精品毛片| 欧美色图综合网| 五月天婷婷在线无码| 午夜免费网站| 欧美一区视频| 色福利网| 国产精品久久久久久久久久久久久久久 | 一区二区三区四区高清无码| 欧美日日| 天堂网2025| 欧美毛片A| 大香蕉网站在线观看| 国产黄色小视频在线观看| 色搞搞| 一本色道久久综合狠狠躁| 亚洲精品中文字幕乱码三区91| 四虎在线观看| 精品久久免费一区二区三区|