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

企業(yè)級數(shù)據(jù)脫敏方案!

數(shù)據(jù)庫 其他數(shù)據(jù)庫
本文總結(jié)了企業(yè)中脫敏方案實(shí)現(xiàn),包含數(shù)據(jù)庫脫敏、日志脫敏、輸出脫敏,并貼上關(guān)鍵實(shí)現(xiàn)代碼。能夠滿足業(yè)務(wù)的要求。

最近幾年經(jīng)常發(fā)生用戶數(shù)據(jù)泄漏的事件,給企業(yè)帶來危機(jī)。隨著用戶對個(gè)人隱私數(shù)據(jù)的重視和法律法規(guī)的完善,數(shù)據(jù)安全顯得愈發(fā)重要。一方面可以加強(qiáng)權(quán)限管理,減少能夠接觸數(shù)據(jù)的人員以及導(dǎo)出數(shù)據(jù)加強(qiáng)審批。另一方面,還需要從技術(shù)上對用戶隱私數(shù)據(jù)進(jìn)行脫敏處理,提高數(shù)據(jù)的安全性。

數(shù)據(jù)脫敏方法有很多種,大致可以按照以下進(jìn)行分類:

  1. 隱藏法: 只顯示敏感信息的部分內(nèi)容,其他部分進(jìn)行遮擋,比較常見使用星號替代。這種方式日常比較多見,比如手機(jī)號,銀行卡號等只顯示后面和后面幾位,好處是雖然只是部分內(nèi)容顯示,但足夠提供有效信息,同時(shí)不會暴露完整數(shù)據(jù)。
  2. 混淆法: 對原有數(shù)據(jù)截?cái)唷⑻鎿Q、隱藏、數(shù)字進(jìn)行隨機(jī)移位,使得原有數(shù)據(jù)完全失真或者部分失真,混淆真假。
  3. 加密: 通過加密密鑰和算法對敏感數(shù)據(jù)進(jìn)行加密得到密文,密文可見但是完全沒有可讀意義,是脫敏最徹底的方法。其中對稱加密還能密鑰解密可以從密文恢復(fù)原始數(shù)據(jù)。比如密碼保存采用非對稱加密,手機(jī)號存儲時(shí)采用對稱加密。

用戶的敏感數(shù)據(jù)包含姓名、電話號碼、身份證、銀行卡號、電子郵件、家庭住址、登錄密碼等等。需要考慮數(shù)據(jù)的敏感程度、數(shù)據(jù)安全要求以及實(shí)際業(yè)務(wù)使用場景選擇合適的脫敏方法。Hutool包里面提供了許多常用的脫敏方法。

企業(yè)脫敏方案

企業(yè)如何實(shí)現(xiàn)脫敏?我們先來看典型的系統(tǒng)數(shù)據(jù)交互鏈路,數(shù)據(jù)需要經(jīng)過數(shù)據(jù)庫、后端應(yīng)用、app端。

圖片圖片

  • 數(shù)據(jù)庫側(cè): 數(shù)據(jù)庫保存了原始數(shù)據(jù),有權(quán)限人員可以查看數(shù)據(jù)和導(dǎo)出數(shù)據(jù)。
  • 后端應(yīng)用內(nèi): 后端應(yīng)用中會打印相關(guān)日志,數(shù)據(jù)通過日志得到了存儲下來。通過日志,能夠得到原始數(shù)據(jù)。
  • 應(yīng)用輸出: app側(cè)能夠從后端讀取到原始數(shù)據(jù)。

數(shù)據(jù)庫脫敏方案

數(shù)據(jù)庫脫敏方法根據(jù)業(yè)務(wù)具體要求選擇合適脫敏方法。脫敏地點(diǎn)可以在應(yīng)用中手動脫敏,當(dāng)然這種方法不常用,改動點(diǎn)多對業(yè)務(wù)侵入大。

另外一種方案在ORM框架中修改sql實(shí)現(xiàn),其中mybatis框架為java后端系統(tǒng)中最常用的框架。mybatis自帶攔截器擴(kuò)展,允許在映射語句執(zhí)行過程中的某一點(diǎn)進(jìn)行攔截調(diào)用。關(guān)注公眾號:碼猿技術(shù)專欄,回復(fù)關(guān)鍵詞:1111 獲取阿里內(nèi)部Java性能調(diào)優(yōu)手冊!默認(rèn)情況下,MyBatis 允許使用插件來攔截的方法調(diào)用包括:

  • Executor: 攔截執(zhí)行器的方法,例如 update、query、commit、rollback 等。可以用來實(shí)現(xiàn)緩存、事務(wù)、分頁等功能。
  • ParameterHandler: 攔截參數(shù)處理器的方法,例如 setParameters 等。可以用來轉(zhuǎn)換或加密參數(shù)等功能。
  • ResultSetHandler: 攔截結(jié)果集處理器的方法,例如 handleResultSets、handleOutputParameters 等。可以用來轉(zhuǎn)換或過濾結(jié)果集等功能。
  • StatementHandler: 攔截語句處理器的方法,例如 prepare、parameterize、batch、update、query 等。可以用來修改 SQL 語句、添加參數(shù)、記錄日志等功能。

Mybatis執(zhí)行流程Mybatis執(zhí)行流程

數(shù)據(jù)庫脫敏另外一個(gè)問題是歷史數(shù)據(jù)問題。歷史原因最開始的技術(shù)方案保存明文,所以脫敏時(shí)需要做到平滑脫敏。要做到平滑脫敏,可按照如下流程:

  • 新增脫敏字段: 在源表上新增脫敏字段。
  • 數(shù)據(jù)雙寫: 源字段和脫敏字段都寫入數(shù)據(jù)。
  • 歷史數(shù)據(jù)遷移: 歷史數(shù)據(jù)遷移,刷入脫敏字段。
  • 讀切換脫敏字段: 從脫敏字段讀取數(shù)據(jù)返回。
  • 清空源字段: 確保所有流程都正確的情況下,清空源字段。

本文mybatis實(shí)現(xiàn)數(shù)據(jù)庫加解密為例。

1.表里面新增脫敏字段,示例中脫敏新字段格式規(guī)范為源字段添加encrypt后綴。vo里面添加脫敏注解標(biāo)記。

public class Employee {

    private Long id;
    private String name;

    @EncryptTag
    private String mobile;
    private String mobileEncrypt;
    private String email;
    private double salary;
}

2.實(shí)現(xiàn)自定義攔截。

/***
** 加密攔截
***/
@Intercepts({@Signature(
        type = Executor.class,
        method = "update",
        args = {MappedStatement.class, Object.class}
), @Signature(
        type = Executor.class,
        method = "query",
        args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}
), @Signature(
        type = Executor.class,
        method = "query",
        args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}
)})
public class EncryptPlugin implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        MappedStatement mappedStatement = (MappedStatement)invocation.getArgs()[0];
        Object param = invocation.getArgs()[1];
        PluginService.encrypt(invocation, param);
        return invocation.proceed();
    }


    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {

    }
}


/***
** 解密攔截
***/
@Intercepts({@Signature(
        type = ResultSetHandler.class,
        method = "handleResultSets",
        args = {Statement.class}
)})
public class DecryptPlugin implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
            Object result = invocation.proceed();
            if (result != null && result instanceof List) {
                this.decrypt(((List) result).iterator());
            }
            return result;
    }


    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {

    }

    private void decrypt(Iterator iterator) throws Throwable {
        while(iterator.hasNext()) {
            Object object = iterator.next();
            PluginService.decrypt(object);
        }
    }
}

3.實(shí)現(xiàn)sql修改,完成加解密邏輯。

public class PluginService {

    privatestaticfinal Logger LOGGER = LoggerFactory.getLogger(PluginService.class);

    privatestaticfinal Map<String, List<Field>> ENCRYPT_TAG_FIELDS = new ConcurrentHashMap();

    public static void encrypt(Invocation invocation, Object object) throws Throwable {
        if (object.getClass().isArray()) {
            int length = Array.getLength(object);
            if (length <= 0) {
                return;
            }

            for (int i = 0; i < length; ++i) {
                encryptSingleObject(Array.get(object, i));
            }
        } elseif (object instanceof Collection) {
            Collection collection = (Collection) object;
            Iterator itr = collection.iterator();
            while (itr.hasNext()) {
                Object item = itr.next();
                encryptSingleObject(item);
            }
        } else {
            encryptSingleObject(object);
        }
    }


    private static void encryptSingleObject(Object object) throws Throwable {
        if (object != null) {
            String className = object.getClass().getName();
            List<Field> EncryptTagFields = ENCRYPT_TAG_FIELDS.get(className);
            if (EncryptTagFields == null) {
                EncryptTagFields = findEncryptTagFields(object);
                ENCRYPT_TAG_FIELDS.putIfAbsent(className, EncryptTagFields);
            }
            encryptFields(object, EncryptTagFields);
        }
    }

    private static void encryptFields(Object object, List<Field> EncryptTagFields) throws Throwable {
        if (object != null && !EncryptTagFields.isEmpty()) {
            String[] originalValues = new String[EncryptTagFields.size()];

            for(int i = 0; i < EncryptTagFields.size(); ++i) {
                Field field = (Field)EncryptTagFields.get(i);
                String value = (String)field.get(object);
                originalValues[i] = value;
            }

            for(int i = 0; i < EncryptTagFields.size(); ++i) {
                Field field = (Field)EncryptTagFields.get(i);
                String value = originalValues[i];

                if (value == null) {
                    continue;
                }
                Field encryptField = getEncryptField(object, field);
                if (encryptField == null) {
                    continue;
                }
                String encryptValue = encryptFieldValue(value);
                encryptField.set(object, encryptValue);
                field.set(object, null);

            }
        }
    }

    private static String encryptFieldValue(String value) {
        String encryptValue = value + "encrypt";
        return encryptValue;
    }

    public static void decrypt(Object object) throws Throwable {
        if (object == null) {
            return;
        }
        String className = object.getClass().getName();
        List<Field> encryptTagFields = ENCRYPT_TAG_FIELDS.get(className);
        if (encryptTagFields == null) {
            encryptTagFields = findEncryptTagFields(object);
            ENCRYPT_TAG_FIELDS.putIfAbsent(className, encryptTagFields);
        }
        decryptFields(object, encryptTagFields);
    }


    private static void decryptFields(Object object, List<Field> encryptTagFields) throws Throwable {
        if (encryptTagFields.isEmpty()) {
            return;
        }

        for (int i = 0; i < encryptTagFields.size(); ++i) {
            Field field = encryptTagFields.get(i);
            Field encryptField = getEncryptField(object, field);
            Object fieldValue = encryptField.get(object);
            if (fieldValue == null) {
                continue;
            }
            if (fieldValue instanceof String) {
                String value = (String) fieldValue;
                value = AesUtil.decrypt(value);
                field.set(object, value);
                encryptField.set(object, null);
            }
        }
    }

    private static List<Field> findEncryptTagFields(Object object) {
        Class clazz = object.getClass();

        List<Field> fieldList = new ArrayList<>();
        for(; clazz != null; clazz = clazz.getSuperclass()) {
            Field[] declaredFields = clazz.getDeclaredFields();
            int length = declaredFields.length;

            for(int index = 0; index < length; ++index) {
                Field field = declaredFields[index];
                if (field.getAnnotation(EncryptTag.class) != null) {
                    if (field.getType() == String.class) {
                        field.setAccessible(true);
                        fieldList.add(field);
                    } else {
                        LOGGER.error("@EncryptTag should be used on String field. class: {}, fieldName: {}", clazz.getName(), field.getName());
                    }
                }
            }
        }

        return fieldList;
    }

    private static Field getEncryptField(Object object, Field field) throws Exception {
        String encryptFieldName = AesUtil.encrypt(field.getName());
        Field encyptField = getField(object, encryptFieldName);
        if (encyptField == null) {
            thrownew Exception(object.getClass() + "對象沒有對應(yīng)的加密字段:" + encryptFieldName);
        } else {
            encyptField.setAccessible(true);
            return encyptField;
        }
    }

    public static Field getField(Object object, String fieldName) {
        for(Class clazz = object.getClass(); clazz != null; clazz = clazz.getSuperclass()) {
            Field[] var3 = clazz.getDeclaredFields();
            int var4 = var3.length;

            for(int var5 = 0; var5 < var4; ++var5) {
                Field field = var3[var5];
                if (field.getName().equals(fieldName)) {
                    return field;
                }
            }
        }

        returnnull;
    }
}

日志脫敏方案

日志脫敏,核心在于序列化時(shí)對于敏感字段修改其序列化方式。各大序列化工具一般都有序列化自定義功能,關(guān)注公眾號:碼猿技術(shù)專欄,回復(fù)關(guān)鍵詞:IDEA 獲取最新版IDEA破解腳本!本文以fastjson為例講解實(shí)現(xiàn),實(shí)現(xiàn)方式有兩種:

  • 基于注解@JSONField實(shí)現(xiàn)
  • 基于序列化過濾器

@JSONField方式不建議使用,對業(yè)務(wù)入侵太大。另外一種繼續(xù)序列化過濾器,fastjson提供了多種SerializeFilter

  • PropertyPreFilter 根據(jù)PropertyName判斷是否序列化
  • PropertyFilter 根據(jù)PropertyName和PropertyValue來判斷是否序列化
  • NameFilter 修改Key,如果需要修改Key,process返回值則可
  • ValueFilter 修改Value
  • BeforeFilter 序列化時(shí)在最前添加內(nèi)容
  • AfterFilter 序列化時(shí)在最后添加內(nèi)容

通過實(shí)現(xiàn)ValueFilter自定義序列化擴(kuò)展,針對目標(biāo)類以及字段進(jìn)行脫敏返回。

核心代碼簡化如下:

public class FastjsonValueFilter implements ValueFilter {
    
    @Override
    public Object process(Object object, String name, Object value) {
        if (needDesensitize(object, name)) {
            return desensitize(value);
        }
    }
}    
String s = JSON.toJSONString(new Person("131xxxx1552","123@163.com"),new FastjsonValueFilter());

在標(biāo)記脫敏字段以及對應(yīng)方法時(shí),可以通過配置的方法, 對類相關(guān)的脫敏字段以及方法進(jìn)行封裝。要求不高的話添加響應(yīng)的注解也可實(shí)現(xiàn)。

輸出脫敏

在輸出層織入切面進(jìn)行攔截,在切面內(nèi)實(shí)現(xiàn)脫敏邏輯。實(shí)現(xiàn)邏輯跟日志脫敏類似,需要對脫敏字段進(jìn)行標(biāo)記以及對應(yīng)脫敏方法。

如果是Spring Boot集成,配置 Spring MVC 的話只需繼承 WebMvcConfigurer 覆寫 configureMessageConverters方法,支持全局和指定類脫敏配置,示例如下:

@Configuration
publicclass FastJsonWebSerializationConfiguration implements WebMvcConfigurer {

    @Bean(name = "httpMessageConverters")
    public HttpMessageConverters fastJsonHttpMessageConverters() {
        // 1.定義一個(gè)converters轉(zhuǎn)換消息的對象
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        // 2.添加fastjson的配置信息,比如: 是否需要格式化返回的json數(shù)據(jù)
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        // 中文亂碼解決方案
        List<MediaType> mediaTypes = new ArrayList<>();
        //設(shè)定json格式且編碼為UTF-8
        mediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConverter.setSupportedMediaTypes(mediaTypes);
        
        //添加全局自定義脫敏
        fastJsonConfig.setSerializeFilters(new ValueDesensitizeFilter());
       //添加指定類脫敏方法
        Map<Class<?>, SerializeFilter> classSerializeFilters = new HashMap<>();
        classSerializeFilters.put(Employee.class, new FastjsonValueFilter());
        fastJsonConfig.setClassSerializeFilters(classSerializeFilters);

        
        // 3.在converter中添加配置信息
        fastConverter.setFastJsonConfig(fastJsonConfig);
        // 4.將converter賦值給HttpMessageConverter
        HttpMessageConverter<?> converter = fastConverter;
        // 5.返回HttpMessageConverters對象
        returnnew HttpMessageConverters(converter);
    }
}

總結(jié)

本文總結(jié)了企業(yè)中脫敏方案實(shí)現(xiàn),包含數(shù)據(jù)庫脫敏、日志脫敏、輸出脫敏,并貼上關(guān)鍵實(shí)現(xiàn)代碼。能夠滿足業(yè)務(wù)的要求。


責(zé)任編輯:武曉燕 來源: 碼猿技術(shù)專欄
相關(guān)推薦

2009-03-19 09:49:00

華為數(shù)據(jù)備份賽門鐵克

2022-01-04 20:34:00

數(shù)據(jù)安全Relay

2022-01-09 21:46:22

安全數(shù)據(jù)Sentry

2022-01-05 20:16:52

Sentry Relay 數(shù)據(jù)安全

2022-01-08 15:08:17

項(xiàng)目配置Sentry

2022-01-06 20:00:39

數(shù)據(jù)企業(yè)安全

2022-01-12 23:54:27

Sentry企業(yè)級安全

2022-06-08 08:38:21

云存儲數(shù)據(jù)安全

2022-01-07 18:07:16

數(shù)據(jù)安全監(jiān)控

2010-12-14 19:56:32

IBM

2021-06-21 11:57:04

數(shù)據(jù)中臺數(shù)字化轉(zhuǎn)型數(shù)字化

2022-10-13 09:38:01

數(shù)據(jù)建設(shè)

2010-04-26 15:27:07

互聯(lián)網(wǎng)

2009-04-27 17:12:11

數(shù)據(jù)保護(hù)EDPSafeNet

2012-04-13 13:58:52

數(shù)據(jù)加密

2014-08-18 09:01:09

Teradata數(shù)據(jù)倉庫

2022-03-09 16:53:38

HiveSpark SQL數(shù)據(jù)湖

2019-11-06 10:43:20

HBaseSpark數(shù)據(jù)處理平臺

2013-07-19 10:21:02

數(shù)據(jù)中心四維模型評價(jià)

2011-02-24 10:58:16

數(shù)據(jù)庫開源
點(diǎn)贊
收藏

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

日韩成人在线观看| 六月婷婷综合网| a中文在线播放| 美女精品久久| 久久久久在线| 日韩一区二区三区电影 | 天天爽夜夜爽夜夜爽精品| 97人人做人人爽香蕉精品| 成人黄色在线看| 日韩中文在线中文网三级| 国产深夜男女无套内射| 99热这里只有精品5| 国产成人调教视频在线观看 | 男人的天堂一区二区| 国产精品色婷婷在线观看| 久久久国产综合精品女国产盗摄| 孩xxxx性bbbb欧美| 97人人模人人爽人人澡| 国产一二在线观看| 国产精品久久久久久久免费软件| 欧美一卡2卡三卡4卡5免费| 香蕉久久夜色| www毛片com| 九九久久电影| 日本高清不卡一区| 麻豆精品传媒视频| 免费在线观看黄网站| 久久亚洲国产| 337p亚洲精品色噜噜噜| 天天做天天爱天天高潮| 一级黄色a毛片| 水蜜桃精品av一区二区| 日韩电影中文字幕| 国产无套精品一区二区三区| 18av在线播放| 国产成人午夜高潮毛片| 久久精品视频在线观看| 日本不卡一区二区在线观看| 免费大片在线观看www| 久久精品99国产精品| 久久影院中文字幕| 亚洲熟妇一区二区| 97久久中文字幕| 一区二区三区免费观看| 成人黄视频免费| 日韩精品一区二区在线播放| 男人的天堂久久| 欧美午夜片在线免费观看| 欧美一区二区三区精美影视| 最新黄色网址在线观看| 国产精品久久久久久久免费观看 | 国产免费福利视频| 欧美午夜在线视频| 亚洲欧美成人网| 天天操狠狠操夜夜操| 日韩av福利| 国产精品久线在线观看| 91在线网站视频| 国产精品美女高潮无套| 色猫猫成人app| 一区二区三区在线观看动漫| 国产精品入口免费| 青青国产在线观看| 久久精品女人| 国产高清视频一区三区| 无码人妻精品中文字幕| 精品五月天堂| 在线观看区一区二| 国产欧美精品aaaaaa片| 男生女生差差差的视频在线观看| 韩国成人精品a∨在线观看| 久久久久九九九九| 欧美88888| 国产欧美三级电影| 这里只有精品视频在线观看| 日本免费色视频| 欧洲精品99毛片免费高清观看| 欧美色另类天堂2015| www一区二区www免费| 色开心亚洲综合| 久久蜜臀精品av| 国产 高清 精品 在线 a| 中文字幕视频免费观看| 国产精品普通话对白| 日本欧美在线视频| 欧美激情图片小说| av一区二区高清| 精品久久久久久久一区二区蜜臀| 午夜欧美福利视频| caoprom在线| 一区在线观看视频| 日韩欧美亚洲日产国产| 亚洲欧美一区二区三| 国产精品一区一区三区| 国产精品久久久久一区二区| 国产精品乱子伦| 精品动漫3d一区二区三区免费版 | 日本电影一区二区三区| 免费高清完整在线观看| 精品国产91久久久久久老师| 国产一二三四五| 一区二区三区视频网站 | 国产精品人人人人| 久久精品99国产精品日本| 国产欧美精品一区二区三区| www.日韩在线观看| 久久er99精品| 国产在线一区二区三区| 亚洲国产精品无码久久久| 亚洲欧美日本视频在线观看| 97超级碰碰碰| 国产盗摄一区二区三区在线| 国产视频亚洲| 亚洲free性xxxx护士hd| 久草福利在线视频| 亚洲福利一区二区| 国产精品久久中文字幕| 高清不卡一区| 中文在线不卡视频| 蜜桃av免费观看| 性欧美69xoxoxoxo| 欧美插天视频在线播放| 中文字幕人妻一区二| 久久国产精品亚洲77777| 91嫩草免费看| 99久久婷婷国产一区二区三区| 91麻豆123| 亚洲国产成人不卡| 菠萝菠萝蜜在线观看| 一区二区三区在线播| 最新中文字幕2018| 成人噜噜噜噜| 国产亚洲视频在线| 艳妇荡乳欲伦69影片| 亚洲一级二级| 99se婷婷在线视频观看| 毛片在线不卡| 欧美日韩不卡一区二区| 日韩精品国产一区| 欧美人成网站| 99在线观看视频| 2024最新电影免费在线观看| 777久久久精品| 国产麻豆视频在线观看| 精品影视av免费| 在线视频福利一区| 人妖欧美1区| 欧美色视频日本高清在线观看| av漫画在线观看| 欧美欧美黄在线二区| 日本韩国在线不卡| 国产精品区在线观看| 粉嫩绯色av一区二区在线观看| 久久久一本精品99久久精品66| 98在线视频| 亚洲一区中文日韩| 日本女优爱爱视频| 久久精品九色| 精品视频9999| 少妇一级淫片日本| 中文字幕av免费专区久久| 欧美少妇一区二区三区| 小黄鸭精品aⅴ导航网站入口| 日韩精品中文字| 国产一区二区精彩视频| 国产精品一区二区在线观看网站| 国产专区在线视频| 影音成人av| 日韩中文第一页| www.午夜激情| 欧美日韩一区二区在线| 中文字幕av一区二区三区人妻少妇| 欧美重口另类| 国产精品久久久久av| 欧美少妇bbw| 国产精品久久久久天堂| 天天色天天干天天色| 一区二区亚洲| 日韩欧美一区二区在线观看| 亚洲三级电影| 久久久亚洲精品视频| 国产一二在线观看| 日韩午夜激情av| 中文字幕视频网站| 国产精品久久久久久亚洲毛片| 性生活在线视频| 久久久久国产精品一区二区| 福利网在线观看| 亚洲精品一级二级三级| 久久久久女教师免费一区| 四虎国产精品永远| 亚洲国产综合91精品麻豆| 中文字幕一区二区三区人妻| 亚洲性色视频| 四虎影院一区二区三区 | 成人在线视频网址| 韩日精品一区二区| 亚洲第一区第一页| 免费在线观看日韩| 国产中文一区二区三区| 中国人体摄影一区二区三区| 精品亚洲自拍| 91人人爽人人爽人人精88v| 蜜桃麻豆影像在线观看| 亚洲成人久久一区| 怡红院成永久免费人全部视频| 亚洲一区二区三区自拍| 91视频免费在观看| 日韩av在线播放中文字幕| 奇米影视首页 狠狠色丁香婷婷久久综合| 日韩欧美三区| 另类色图亚洲色图| 青青草av免费在线观看| 色综合色综合色综合色综合色综合| 日本免费福利视频| 先锋影音国产一区| 国产精品一二三在线观看| 欧美日韩国产传媒| 欧美xxxx黑人又粗又长精品| 6080亚洲理论片在线观看| 欧美激情久久久久| 日本精品久久久久久| 午夜片欧美伦| 成人网在线视频| 手机在线精品视频| 午夜精品福利一区二区三区蜜桃| 国产乱淫av麻豆国产免费| 日韩成人一区二区三区在线观看| 你懂的视频在线一区二区| 激情综合五月| 成人激情综合网| 日韩不卡在线| 国产精品电影一区| 欧美特大特白屁股xxxx| 91av在线网站| 国产v日韩v欧美v| 亚洲女人被黑人巨大进入al| 免费观看毛片网站| 精品久久久久久久久久久院品网 | 亚洲人精品午夜在线观看| 无码无套少妇毛多18pxxxx| 亚洲成人精品在线观看| 九九九免费视频| 亚洲精品国产第一综合99久久| 亚洲a∨无码无在线观看| 国产精品网站在线| 东京热无码av男人的天堂| 日本一区二区三区dvd视频在线| 亚洲 国产 图片| 久久精品999| 日本77777| 国产午夜精品一区二区三区欧美| 精品视频在线观看一区| av在线不卡免费观看| 日本成人黄色| 日韩在线视频精品| 国内精品久久国产| 日韩高清一级| 1卡2卡3卡精品视频| 国语精品视频| 国产成人免费电影| 亚洲欧洲美洲国产香蕉| 日本欧美精品久久久| 欧美日韩在线网站| 中文字幕人成一区| 欧美区日韩区| 欧美日韩激情视频在线观看| av中字幕久久| 咪咪色在线视频| 亚洲午夜极品| 亚洲欧美日韩在线综合| 五月天久久777| 国产欧美123| 国产视频久久| 午夜国产福利在线观看| 福利91精品一区二区三区| a级一a一级在线观看| 美国三级日本三级久久99| 污污的视频免费观看| 成人午夜免费电影| 三日本三级少妇三级99| 日韩影院在线观看| 热久久久久久久久| av欧美精品.com| 欧美图片自拍偷拍| 久久综合av免费| www色aa色aawww| 五月婷婷久久综合| 中文字幕一区二区三区波野结 | 日本欧美国产在线| 91成人精品观看| 久久99欧美| 亚洲欧美偷拍自拍| 亚洲看片网站| 亚洲久久一区二区| 男人天堂av片| 国色天香一区二区| www.99在线| 国产suv精品一区二区883| 亚洲久久久久久久| 久久久影院官网| 九九精品视频免费| 日本高清成人免费播放| 成人午夜福利视频| 综合久久五月天| 欧美大胆a人体大胆做受| 成人网在线免费观看| 国产va免费精品观看精品视频| 50度灰在线观看| 麻豆精品国产91久久久久久| 国产精品一区二区入口九绯色| 亚洲黄色录像片| 在线观看日韩一区二区| 亚洲乱码国产乱码精品精天堂| 最近中文字幕免费mv2018在线| 国产成人在线视频| 欧美日韩精品一区二区三区在线观看| 影音先锋欧美资源| 日本伊人精品一区二区三区观看方式 | 在线观看黄网址| 91传媒视频在线播放| 少妇高潮久久久| 欧美日本啪啪无遮挡网站| 亚洲图片小说区| 一区二区免费在线视频| 亚洲综合自拍| 天天干天天干天天干天天干天天干| 91一区一区三区| www.av天天| 欧美性猛交xxx| 五月激情丁香婷婷| 欧美极度另类性三渗透| 久久av偷拍| 四虎4hu永久免费入口| 久久99久久久欧美国产| 国产又粗又猛又爽又黄的视频四季| 欧美日韩一区二区免费在线观看 | 久久久精品天堂| 国产欧美日韩另类| 精品国产乱码久久久久久1区2区| 少妇av在线播放| 国内精品免费午夜毛片| 成午夜精品一区二区三区软件| 国产区欧美区日韩区| 欧美视频二区| 国产a√精品区二区三区四区| 一区二区三区精品在线| www.五月激情| 国内精品免费午夜毛片| 欧美重口另类| www黄色在线| 中文天堂在线一区| 国产又粗又黄又爽的视频| 亚洲国产日韩欧美在线99| 国产小视频福利在线| 久久久成人的性感天堂| 亚洲高清影院| 国产一二三四区在线观看| 国产麻豆精品在线观看| 久久久久久天堂| 欧美日韩视频专区在线播放| 国产成人三级在线观看视频| 欧美激情一二三| 窝窝社区一区二区| 成人3d动漫一区二区三区| 国产精品网友自拍| 国产视频一二三四区| 久久免费视频这里只有精品| 欧美三级午夜理伦三级小说| 中文字幕欧美人妻精品一区| 国产精品系列在线| www.97av.com| 欧美性在线视频| 色妞ww精品视频7777| 亚洲熟妇无码av在线播放| 99久久99久久精品免费看蜜桃| 久草视频一区二区| 久久国产一区二区三区| 成人看片黄a免费看视频| av观看免费在线| 成人欧美一区二区三区1314| 免费成人在线看| 国产精品视频专区| 蜜乳av综合| 午夜啪啪小视频| 天天爽夜夜爽夜夜爽精品视频| 国产在线视频福利| 91精品视频大全| 一本色道久久| 娇妻高潮浓精白浆xxⅹ| 亚洲欧美日韩久久精品| 免费黄色片视频| 亚洲精品在线视频| 四虎视频在线精品免费网址| 亚洲国产精品无码观看久久| 国产亚洲一区二区三区四区| 日韩精品在线观看免费| 色狠狠久久aa北条麻妃| 哺乳一区二区三区中文视频| 91制片厂毛片|