1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        如何保證API接口安全?

        共 16873字,需瀏覽 34分鐘

         ·

        2021-08-28 03:46


        一、摘要

        在實(shí)際的業(yè)務(wù)開發(fā)過程中,我們常常會(huì)碰到需要與第三方互聯(lián)網(wǎng)公司進(jìn)行技術(shù)對(duì)接,例如支付寶支付對(duì)接、微信支付對(duì)接、高德地圖查詢對(duì)接等等服務(wù),如果你是一個(gè)創(chuàng)業(yè)型互聯(lián)網(wǎng),大部分可能都是對(duì)接別的公司api接口。

        當(dāng)你的公司體量上來了時(shí)候,這個(gè)時(shí)候可能有一些公司開始找你進(jìn)行技術(shù)對(duì)接了,轉(zhuǎn)變成由你來提供api接口,那這個(gè)時(shí)候,我們應(yīng)該如何設(shè)計(jì)并保證API接口安全呢?

        二、方案介紹

        最常用的方案,主要有兩種:

        • token方案
        • 接口簽名

        2.1、token方案

        其中 token 方案,是一種在web端使用最廣的接口鑒權(quán)方案,我記得在之前寫過一篇《手把手教你,使用JWT實(shí)現(xiàn)單點(diǎn)登錄》的文章,里面介紹的比較詳細(xì),有興趣的朋友可以看一下,沒了解的也沒關(guān)系,我們?cè)诖撕?jiǎn)單的介紹一下 token 方案。

        從上圖,我們可以很清晰的看到,token 方案的實(shí)現(xiàn)主要有以下幾個(gè)步驟:

        • 1、用戶登錄成功之后,服務(wù)端會(huì)給用戶生成一個(gè)唯一有效的憑證,這個(gè)有效值被稱為token
        • 2、當(dāng)用戶每次請(qǐng)求其他的業(yè)務(wù)接口時(shí),需要在請(qǐng)求頭部帶上token
        • 3、服務(wù)端接受到客戶端業(yè)務(wù)接口請(qǐng)求時(shí),會(huì)驗(yàn)證token的合法性,如果不合法會(huì)提示給客戶端;如果合法,才會(huì)進(jìn)入業(yè)務(wù)處理流程。

        在實(shí)際使用過程中,當(dāng)用戶登錄成功之后,生成的token存放在redis中時(shí)是有時(shí)效的,一般設(shè)置為2個(gè)小時(shí),過了2個(gè)小時(shí)之后會(huì)自動(dòng)失效,這個(gè)時(shí)候我們就需要重新登錄,然后再次獲取有效token。

        token方案,是目前業(yè)務(wù)類型的項(xiàng)目當(dāng)中使用最廣的方案,而且實(shí)用性非常高,可以很有效的防止黑客們進(jìn)行抓包、爬取數(shù)據(jù)。

        但是 token 方案也有一些缺點(diǎn)!最明顯的就是與第三方公司進(jìn)行接口對(duì)接的時(shí)候,當(dāng)你的接口請(qǐng)求量非常大,這個(gè)時(shí)候 token 突然失效了,會(huì)有大量的接口請(qǐng)求失敗。

        這個(gè)我深有體會(huì),我記得在很早的時(shí)候,跟一家中、大型互聯(lián)網(wǎng)公司進(jìn)行聯(lián)調(diào)的時(shí)候,他們提供給我的接口對(duì)接方案就是token方案,當(dāng)時(shí)我司的流量高峰期時(shí)候,請(qǐng)求他們的接口大量報(bào)錯(cuò),原因就是因?yàn)閠oken失效了,當(dāng)token失效時(shí),我們會(huì)調(diào)用他們刷新token接口,刷新完成之后,在token失效與重新刷新token這個(gè)時(shí)間間隔期間,就會(huì)出現(xiàn)大量的請(qǐng)求失敗的日志,因此在實(shí)際API對(duì)接過程中,我不推薦大家采用 token方案。

        2.2、接口簽名

        接口簽名,顧名思義,就是通過一些簽名規(guī)則對(duì)參數(shù)進(jìn)行簽名,然后把簽名的信息放入請(qǐng)求頭部,服務(wù)端收到客戶端請(qǐng)求之后,同樣的只需要按照已定的規(guī)則生產(chǎn)對(duì)應(yīng)的簽名串與客戶端的簽名信息進(jìn)行對(duì)比,如果一致,就進(jìn)入業(yè)務(wù)處理流程;如果不通過,就提示簽名驗(yàn)證失敗。

        在接口簽名方案中,主要有四個(gè)核心參數(shù):

        • 1、appid表示應(yīng)用ID,其中與之匹配的還有appsecret,表示應(yīng)用密鑰,用于數(shù)據(jù)的簽名加密,不同的對(duì)接項(xiàng)目分配不同的appid和appsecret,保證數(shù)據(jù)安全
        • 2、timestamp 表示時(shí)間戳,當(dāng)請(qǐng)求的時(shí)間戳與服務(wù)器中的時(shí)間戳,差值在5分鐘之內(nèi),屬于有效請(qǐng)求,不在此范圍內(nèi),屬于無效請(qǐng)求
        • 3、nonce 表示臨時(shí)流水號(hào),用于防止重復(fù)提交驗(yàn)證
        • 4、signature 表示簽名字段,用于判斷接口請(qǐng)求是否有效。

        其中簽名的生成規(guī)則,分兩個(gè)步驟:

        • 第一步:對(duì)請(qǐng)求參數(shù)進(jìn)行一次md5加密簽名
        //步驟一
        String 參數(shù)1 = 請(qǐng)求方式 + 請(qǐng)求URL相對(duì)地址 + 請(qǐng)求Body字符串;
        String 參數(shù)1加密結(jié)果= md5(參數(shù)1)
        • 第二步:對(duì)第一步簽名結(jié)果,再進(jìn)行一次md5加密簽名
        //步驟二
        String 參數(shù)2 = appsecret + timestamp + nonce + 參數(shù)1加密結(jié)果;
        String 參數(shù)2加密結(jié)果= md5(參數(shù)2)

        參數(shù)2加密結(jié)果,就是我們要的最終簽名串。

        接口簽名方案,尤其是在接口請(qǐng)求量很大的情況下,依然很穩(wěn)定。

        換句話說,你可以將接口簽名看作成對(duì)token方案的一種補(bǔ)充。

        但是如果想把接口簽名方案,推廣到前后端對(duì)接,答案是:不適合。

        因?yàn)楹灻?jì)算非常復(fù)雜,其次,就是容易泄漏appsecret!

        說了這么多,下面我們就一起來用程序?qū)嵺`一下吧!

        二、程序?qū)嵺`

        2.1、token方案

        就像上文所說,token方案重點(diǎn)在于,當(dāng)用戶登錄成功之后,我們只需要生成好對(duì)應(yīng)的token,然后將其返回給前端,在下次請(qǐng)求業(yè)務(wù)接口的時(shí)候,需要把token帶上。

        具體的實(shí)踐,也可以分兩種:

        • 第一種:采用uuid生成token,然后將token存放在redis中,同時(shí)設(shè)置有效期2哥小時(shí)
        • 第二種:采用JWT工具來生成token,這種token是可以跨平臺(tái)的,天然支持分布式,其實(shí)本質(zhì)也是采用時(shí)間戳+密鑰,來生成一個(gè)token。

        下面,我們介紹的是第二種實(shí)現(xiàn)方式。

        首先,編寫一個(gè)jwt 工具。

        public class JwtTokenUtil {
            //定義token返回頭部
            public static final String AUTH_HEADER_KEY = "Authorization";
            //token前綴
            public static final String TOKEN_PREFIX = "Bearer ";
            //簽名密鑰
            public static final String KEY = "q3t6w9z$C&F)J@NcQfTjWnZr4u7x";
            //有效期默認(rèn)為 2hour
            public static final Long EXPIRATION_TIME = 1000L*60*60*2;
            /**
             * 創(chuàng)建TOKEN
             * @param content
             * @return
             */

            public static String createToken(String content){
                return TOKEN_PREFIX + JWT.create()
                        .withSubject(content)
                        .withExpiresAt(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
                        .sign(Algorithm.HMAC512(KEY));
            }
            /**
             * 驗(yàn)證token
             * @param token
             */

            public static String verifyToken(String token) throws Exception {
                try {
                    return JWT.require(Algorithm.HMAC512(KEY))
                            .build()
                            .verify(token.replace(TOKEN_PREFIX, ""))
                            .getSubject();
                } catch (TokenExpiredException e){
                    throw new Exception("token已失效,請(qǐng)重新登錄",e);
                } catch (JWTVerificationException e) {
                    throw new Exception("token驗(yàn)證失?。?,e);
                }
            }
        }

        接著,我們?cè)诘卿浀臅r(shí)候,生成一個(gè)token,然后返回給客戶端。

        @RequestMapping(value = "/login", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
        public UserVo login(@RequestBody UserDto userDto, HttpServletResponse response){
            //...參數(shù)合法性驗(yàn)證
            //從數(shù)據(jù)庫獲取用戶信息
            User dbUser = userService.selectByUserNo(userDto.getUserNo);
            //....用戶、密碼驗(yàn)證
            //創(chuàng)建token,并將token放在響應(yīng)頭
            UserToken userToken = new UserToken();
            BeanUtils.copyProperties(dbUser,userToken);
            String token = JwtTokenUtil.createToken(JSONObject.toJSONString(userToken));
            response.setHeader(JwtTokenUtil.AUTH_HEADER_KEY, token);
            //定義返回結(jié)果
            UserVo result = new UserVo();
            BeanUtils.copyProperties(dbUser,result);
            return result;
        }

        最后,編寫一個(gè)統(tǒng)一攔截器,用于驗(yàn)證客戶端傳入的token是否有效。

        @Slf4j
        public class AuthenticationInterceptor implements HandlerInterceptor {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                // 從http請(qǐng)求頭中取出token
                final String token = request.getHeader(JwtTokenUtil.AUTH_HEADER_KEY);
                //如果不是映射到方法,直接通過
                if(!(handler instanceof HandlerMethod)){
                    return true;
                }
                //如果是方法探測(cè),直接通過
                if (HttpMethod.OPTIONS.equals(request.getMethod())) {
                    response.setStatus(HttpServletResponse.SC_OK);
                    return true;
                }
                //如果方法有JwtIgnore注解,直接通過
                HandlerMethod handlerMethod = (HandlerMethod) handler;
                Method method=handlerMethod.getMethod();
                if (method.isAnnotationPresent(JwtIgnore.class)) {
                    JwtIgnore jwtIgnore = method.getAnnotation(JwtIgnore.class);
                    if(jwtIgnore.value()){
                        return true;
                    }
                }
                LocalAssert.isStringEmpty(token, "token為空,鑒權(quán)失??!");
                //驗(yàn)證,并獲取token內(nèi)部信息
                String userToken = JwtTokenUtil.verifyToken(token);
                //將token放入本地緩存
                WebContextUtil.setUserToken(userToken);
                return true;
            }
            @Override
            public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
                //方法結(jié)束后,移除緩存的token
                WebContextUtil.removeUserToken();
            }
        }

        在生成token的時(shí)候,我們可以將一些基本的用戶信息,例如用戶ID、用戶姓名,存入token中,這樣當(dāng)token鑒權(quán)通過之后,我們只需要通過解析里面的信息,即可獲取對(duì)應(yīng)的用戶ID,可以省下去數(shù)據(jù)庫查詢一些基本信息的操作。

        同時(shí),使用的過程中,盡量不要存放敏感信息,因?yàn)楹苋菀妆缓诳徒馕觯?/p>

        2.2、接口簽名

        同樣的思路,站在服務(wù)端驗(yàn)證的角度,我們可以先編寫一個(gè)簽名攔截器,驗(yàn)證客戶端傳入的參數(shù)是否合法,只要有一項(xiàng)不合法,就提示錯(cuò)誤。

        具體代碼實(shí)踐如下:

        public class SignInterceptor implements HandlerInterceptor {

            @Autowired
            private AppSecretService appSecretService;

            @Autowired
            private RedisUtil redisUtil;

            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                    throws Exception 
        {
                //appId驗(yàn)證
                final String appId = request.getHeader("appid");
                if(StringUtils.isEmpty(appId)){
                    throw new CommonException("appid不能為空");
                }
                String appSecret = appSecretService.getAppSecretByAppId(appId);
                if(StringUtils.isEmpty(appSecret)){
                    throw new CommonException("appid不合法");
                }
                //時(shí)間戳驗(yàn)證
                final String timestamp = request.getHeader("timestamp");
                if(StringUtils.isEmpty(timestamp)){
                    throw new CommonException("timestamp不能為空");
                }
                //大于5分鐘,非法請(qǐng)求
                long diff = System.currentTimeMillis() - Long.parseLong(timestamp);
                if(Math.abs(diff) > 1000 * 60 * 5){
                    throw new CommonException("timestamp已過期");
                }
                //臨時(shí)流水號(hào),防止重復(fù)提交
                final String nonce = request.getHeader("nonce");
                if(StringUtils.isEmpty(nonce)){
                    throw new CommonException("nonce不能為空");
                }
                //驗(yàn)證簽名
                final String signature = request.getHeader("signature");
                if(StringUtils.isEmpty(nonce)){
                    throw new CommonException("signature不能為空");
                }
                final String method = request.getMethod();
                final String url = request.getRequestURI();
                final String body = StreamUtils.copyToString(request.getInputStream(), Charset.forName("UTF-8"));
                String signResult = SignUtil.getSignature(method, url, body, timestamp, nonce, appSecret);
                if(!signature.equals(signResult)){
                    throw new CommonException("簽名驗(yàn)證失敗");
                }
                //檢查是否重復(fù)請(qǐng)求
                String key = appId + "_" + timestamp + "_" + nonce;
                if(redisUtil.exist(key)){
                    throw new CommonException("當(dāng)前請(qǐng)求正在處理,請(qǐng)不要重復(fù)提交");
                }
                //設(shè)置5分鐘
                redisUtil.save(key, signResult, 5*60);
                request.setAttribute("reidsKey",key);
            }

            @Override
            public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                    throws Exception 
        {
                //請(qǐng)求處理完畢之后,移除緩存
                String value = request.getAttribute("reidsKey");
                if(!StringUtils.isEmpty(value)){
                    redisUtil.remove(value);
                }
            }

        }

        簽名工具類SignUtil

        public class SignUtil {

            /**
             * 簽名計(jì)算
             * @param method
             * @param url
             * @param body
             * @param timestamp
             * @param nonce
             * @param appSecret
             * @return
             */

            public static String getSignature(String method, String url, String body, String timestamp, String nonce, String appSecret){
                //第一層簽名
                String requestStr1 = method + url + body + appSecret;
                String signResult1 = DigestUtils.md5Hex(requestStr1);
                //第二層簽名
                String requestStr2 = appSecret + timestamp + nonce + signResult1;
                String signResult2 = DigestUtils.md5Hex(requestStr2);
                return signResult2;
            }
        }

        簽名計(jì)算,可以換成hamc方式進(jìn)行計(jì)算,思路大致一樣。

        三、小結(jié)

        上面介紹的token和接口簽名方案,對(duì)外都可以對(duì)提供的接口起到保護(hù)作用,防止別人篡改請(qǐng)求,或者模擬請(qǐng)求。

        但是缺少對(duì)數(shù)據(jù)自身的安全保護(hù),即請(qǐng)求的參數(shù)和返回的數(shù)據(jù)都是有可能被別人攔截獲取的,而這些數(shù)據(jù)又是明文的,所以只要被攔截,就能獲得相應(yīng)的業(yè)務(wù)數(shù)據(jù)。

        對(duì)于這種情況,推薦大家對(duì)請(qǐng)求參數(shù)和返回參數(shù)進(jìn)行加密處理,例如RSA、AES等加密工具。

        同時(shí),在生產(chǎn)環(huán)境,采用https方式進(jìn)行傳輸,可以起到很好的安全保護(hù)作用!


        程序汪資料鏈接

        歡迎添加程序汪個(gè)人微信 itwang007  進(jìn)粉絲群或圍觀朋友圈

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            天天操大香蕉| 豆花在线视频| 黄色A毛片| 国产高清精品软件丝瓜软件| 欧美激情网站| 91成人精品一区二区| 亚洲AV一二三区| 国产AV一卡| 免费看日韩视频| a片网| 人妻无码一区二区| 久久久久久久久久国产精品| aV无码av天天aV天天爽第一| 成人三级黄色| 国产黄色三级片| HEZ-502搭讪绝品人妻系列| 亚州无码免费| 午夜成人网站在线观看| 国产伦精品一区二区三区色大师| 丁香色综合人妻| 老熟女痒到不行-ThePorn| 三级无码中文| 国产乱子伦-区二区三区熟睡91| 无码欧精品亚洲日韩一区| 在线观看视频日韩| 黄色毛片网站| 久在线| 日本操b| 操鸡巴网站| 中国操逼毛片| 日韩在线小电影| 91大神免费在线观看| 国内特级毛片| 欧美人妻少妇| 亚洲成人AV在线播放| 99er在线观看视频| 理论在线视频| 国产精品乱码一区二区三区| 日本国产高清| www.黄色| 亚洲无码第一页| 亚洲欧美在线观看视频| 亚洲秘无码一区二区三区蜜桃中文| 精品人妻一区二区三区阅读全文| 地表最强网红八月未央道具大秀 | 九九免费视频| 中文无码在线播放| 中文在线字幕电视剧免费平台| 秋霞福利网| 日本在线黄色视频| 成人伊人电影| 2021天天夜日| 伊人三级片| 国产理论视频在线观看| 偷拍视频网站北条麻妃| 国产成人免费| 国产性色| 成人91看片| 国产又爽又黄在线看| 久久久久久久大香蕉| 色婷五月| 噜噜噜久久久| 操逼短视频| 午夜无码精品| 亚洲AV片一区二区三区| 黄网| 性做久久久久久久久| a无码| 丁香久久| 中文字幕人妻日韩在线| 男女视频网站| 四季AV综合网站| AAAAA毛片| 北条麻纪无码视频| 黄色工厂这里只有精品| 久久久久久五月天| 五月激情丁香婷婷| 俺也要操| 九色91PORNY国产| 国产美女被爽到高潮免费A片软件| 亚洲无码在线高清| 国产成人AA| 国家一级A片| 欧美特级毛片| 精品蜜桃一区内容| 美少妇AV| 国产中文字幕片| 免费超碰| 91视频网| 大香蕉综合网| 色婷婷AV| 黑人av| 亚洲午夜福利| 亚洲天堂在线视频| www.cao| 日韩无码不卡| 亚洲三级无码| 桃色av| 伊人中文字幕| 欧美一区二区在线观看| www.俺去也| 毛片在线视频| 黄色三级视频| 中文字幕有码在线观看| 黄片无码| 国产黄色av| 欧美一区二区三区婷婷五月| 中国老熟妇| 亚洲欧美综合| 乳揉みま痴汉电车羽月希免费观看 | 无码人妻丰满熟妇精品区| 麻豆91网站| 久久Av电影| 国产操屄网| 在线免费小黄片| 欧美久久一区二区三区四区视频| 中文字幕无码毛片| 女人一区二区| 操B视频在线免费观看| 国产一二三区在线| 大香蕉在线播| 免费福利视频网站| 免费国产乱伦| 亚洲手机在线播放| 色婷婷在线综合| 91精品国产一区二区| 日韩无码精品一区二区三区| 成人欧美在线观看| 无码V| 嫩BBB槡BBBB槡BBBB视频-百度 | 激情青青草| 精品乱子伦一区二区在线播放| 嫩BBB槡BBBB槡BBBB| 婷婷综合av| 第一色网站| 午夜福利区| 国产无码性爱| 翔田千里在线播放| 9797色色| 日韩欧美二区| 人人操人人操人人操| 国产白丝在线| 黄色成人在线观看| 黄色大片AV在线| 狼友视频第二页| 亚洲无码操逼视频| 亚洲精品久久久久毛片A级牛奶| 97精产国品久久蜜桃臀| 偷拍视频图片综合网| sm国产在线调教视频| 免费欧美黄色| 西西444WWW无码大胆知乎| 毛片毛片毛片毛片毛片| 麻豆AV在线观看| 亚洲免费中文字幕| 天天干夜夜骑| 三级视频在线观看| 天天撸天天干天天日| 国内自拍青青| 久久2| 青草青在线| 99久久影院| 懂色av蜜臀av粉嫩av分享| 操东北女人逼| 国产毛片一区二区三区| www.色老板| 成人毛片网| 狠狠躁日日躁夜夜躁A片视频| YOUjiZZ欧美大全| 色色色色AV| 成人免费视频在线| 天天cao| 日韩中文字幕在线观看视频| 日本少妇高潮| 欧美一区二区三区视频| 少妇人妻偷人精品无码视频新浪| 五月婷婷黄色| 在线观看日韩精品| 久久国语| 国产欧美一区二区三区视频在线观看 | 嫩草A片www在线观看| 视频一区中文字幕| 北条麻妃波多波多野结衣| 西西444WWW无码精品| 日精品| 久久久性爱视频| 最近中文字幕高清2019中文字幕 | 天堂资源地址在线| 91国产免费视频| 国产黄片一区二区三区| 影音先锋av无码| 在线成人免费视频| 欧美性爱一区二区| 麻豆MD传媒MD0071| aaa精品视频| 怡春院在线视频| AV网站在线免费观看| 日本欧美视频| 性久久久久| 欧美成人看片| 久久免费毛片| 嫩小槡BBBB槡BBBB槡免费-百度 | 免费在线观看黄色视频| 91大神免费在线观看| 久草视频资源| 伊大香蕉| 日本内射在线观看| 51妺妺嘿嘿午夜成人A片| 日韩免费高清在线视频| 亚洲中文字幕免费观看视频| 国产91无码| 中文字幕在线国产| 欧美精品在线播放| 亚洲色无码人妻激情| 欧美爱爱免费看| 天天天日天天天天天天天日歌词| 日韩v欧美v日本v亚洲v国产v| 亚洲国产一| 成人A√| 99爱爱| 91在线精品视频| 啊啊啊啊国产| 手机看片亚洲| 视频在线观看一区| 色噜噜狠狠色综无码久久合欧美 | 91蜜桃精品| 日韩在线中文| 亚洲无码aa| 无码直播| 精品欧美乱码久久久久久| 国产性爱在线观看| 婷婷开心色四房播播在线| 日本视频在线免费| 午夜亚洲福利| 人妻FrXXeeXXee护士| 久热99| 成人免费高清| 91视频你懂的| 亚洲va国产天堂va久久en | 男人的天堂婷婷| а中文在线天堂精品| 男女啪啪动态图| 色老板在线观看| 日本一级片中文字幕| 亚洲AV一二三区| 蜜臀AV成人精品| 三级A片| www.91超碰在线| 成人免费一区| 91丨熟女丨首页| 成人大香蕉| 天天做天天日| 久色精品| 超碰乱伦| 超碰91免费在线观看| 国产成人精品无码| a在线免费| 色五月婷婷AV| 日韩在线中文字幕| 最新日韩无码| 精品无码在线观看| 黑人在线播放| 精品日韩一区二区三区| 青娱乐偷拍| 亚洲va欧美va天堂v国产综合| 国产网站精品| 精品视频国产| 精品无码一区二区三区四区久久久软件 | 99精品无码视频| 日本精品二区| 99久久黄色| 麻豆成人精品| 91av免费观看| 亚洲精品色色| 亚洲性无码| 精品1234| 欧美在线观看视频一区| 婷婷五月天大香蕉| 波多野结衣无码AV在线| 国产精品无码激情视频| 天天爽夜夜| 91狠狠综合久久久| 久草视频免费在线播放| www免费视频在线观看播放| 无码人妻丰满熟妇| 无码视屏| 在线婷婷| 亚洲激情网站| 男人的天堂婷婷| 亚洲无码色| 无码三级视频| 中文字幕亚洲专区| 久久这里都是精品| 国产一级a毛一级a做免费的视频l| 欧美性猛交XXXXⅩXX| 九色PORNY9l原创自拍| 亚洲精品mv| 国产丰满乱子伦无码| 日韩一级黄色| 久久综合加勒比| 欧美成人在线免费视频| 人人舔| 97免费在线观看视频| 午夜福利剧场| 久久毛久久久j| 欧美中文字幕视频| 日本性爱一区| 久久久免费黄色视频| 午夜成人中文字幕| 玉米地一级婬片A片| 欧美日韩国产三级| 美女黄色网| 大香蕉一区二区| 青青草91在线| 黄色成人网站免费在线观看| 青草久在线| 丝袜毛片| 欧美天堂在线| 五月天无码免费视频| 日韩无码三级| 在线操B视频| 色综合久久久无码中文字幕999| 激情一区二区| 在线无码视频观看| 最新在线中文字幕| 毛片黄色片| 毛片中文字幕| 亚洲综合激情五月久久| 丁香五月成人网| 亚洲精品娱乐| 婷婷丁香人妻天天爽| 人人干天天干| 三级视频在线播放| 人人综合网| 色999| 成年人视频在线观看免费| 在线观看免费成人网站| 日本伊人在线综合视频| 色色五月丁香婷婷| 日本在线免费| 久操久干| 91偷拍网| 久久青青草在线视频| 北京熟妇槡BBBB槡BBBB| www.色在线观看| 精品人妻二区三区蜜桃| 色色99| 人人cao| 免费的av| 国产精品小电影| 99人妻人人爽人人添人人精品| 亚洲在线无码播放| 国产高清无码一区二区| 久久久免费黄色视频| 久久久人妻熟妇精品无码蜜桃| 午夜亚洲国产一区视频网站| 性爱AV在线| 99视频在线免费观看| 免费黄色视频网站在线观看| 无码一区二区三区免费| 中文在线A∨在线| 无码免费在线视频| 欧美亚洲国产一区二区三区| 国产人妖在线观看| 影音先锋AV无码| 久久亚洲国产| 伊人网导航| 国产在线导航| 无码国产精品一区二区性色AV| 亚洲精品成人在线| 激情婷婷色五月| 国产学生妹在线播放| 国产免费黄色视频网站| 国产日韩一区| av在线观看网站| 日韩欧美毛片| 影音先锋麻豆传媒| 国产三级91| 霸道总裁雷总各种姿势白浆爱情岛论坛 | 人人草人人爱| 91无码人妻精品1国产四虎 | 日本麻豆| 欧美精品人妻| 爆菊花综合网| 人妻精品一区二区| 五月丁香激情四射| 成人福利网站| 欧美日韩一级二级三级| 黄色免费大片| 青青草网站在线观看| 西西888WWW大胆无码| 加勒比无码视频| 亚洲国产成人精品女人| 91精品婷婷国产综合久久蝌蚪| 中文字幕AV在线播放| 国产1区2区3区中文字幕| 九九无码| 亚洲AV成人无码AV小说| 亚洲vs天堂vs成人vs无码| 视色网站| 狠狠干,狠狠操| 超碰在线国产| 精品久草| 中文字幕1区| 国产91久久婷婷一区二区| 影音先锋自拍| 国产日女人| 雾水情缘电影港片| 久久婷婷激情| 丁香激情视频| 夜夜高潮夜夜爽| 在线视频播放| 国产高清不卡| 日本视频精品| 午夜艹 | 亚洲大片在线观看| 91视频在线| 日本天天操| 欧美成人性色欲影院| 西西西444www无码视| 另类老妇奶性生BBwBBw偷拍| 成人黄色电影在线观看| 午夜日逼网站| 成人av黄色三级片在线观看| 黄色电影中文字幕| 精品无码一区二区三区四区五区| 五月天av在线| 特级444www| 黄片av| 精品五月天| 亚洲国产精品欧美久久| 婷婷六月激情| 国产精品免费网站| 黄色视频在线观看免费| 亚洲女人在线| 国产精品成人3p一区二区三区| 国产porn| 天天激情站| 日本成人视频在线免费播放 | 久久久国产一区二区三区| 中文字幕一区二区三区四区在线视频 | 欧美视频综合| 国产性爱网址| 日韩欧美在线免费| 91视频一区| 日韩成人视频在线| 国产免费高清无码| 国内免费av| 国产做爰XXXⅩ久久久骚妇| 99电影网手机在线观看| 国产无遮挡| 亚洲国产高清国产精品| 无码免费在线视频| 2019国产精品| 亚洲wwwwww| 五月色综合| 天天操天天日天天射| youjizzcom日本| AV网站免费观看| 91探花秘入囗| 亚洲精品无码在线观看| 手机在线观看AV| 久久久偷拍视频| 亚洲免费视频观看| 特级西西444www大精品| 婚闹不堪入目A片| 爽好紧别夹喷水网站| 久久无码一区二区| 五月婷婷狠狠爱| 国产高清精品软件丝瓜软件| 日本成人黄色电影| 久久三级片电影| 国产女人18毛片18精品| 麻豆一区在线观看| 人人av在线| 免费一级电影| 亚洲码无| 黃色毛片A片AAAA级20| 天天干天天操天天射| 国产a级视频| 337P大胆粉嫩银噜噜噜| 黄视频免费在线观看| 一起草在线视频| 成人网站一区二区| AV黄色| 亚洲无码人妻| 亚洲毛片亚洲毛片亚洲毛片| 日韩TV| 亚洲人妻在线观看| 欧美性爱XXXX黑人XYX性爽| 久久成人三级| 日本一级黄色电影| 五月婷婷色播| 影音先锋女人aV鲁色资源网站| 免费在线观看黄色视频| 豆花av在线| 国产精品自产拍| 成人片成人网久久蜜桃臀| 午夜成人小电影| 黄色无码视频在线观看| 插吧插吧综合网| 国产精品扒开腿做爽爽爽A片唱戏| 五月婷婷操逼| 在线免费看A| 亚洲视频免费| 日韩激情无码一区二区| 99国产精品久久久久久久成人 | 日韩美在线| 日韩顶级毛片| A片在线观看视频| 日韩少妇无码视频| 国产看色免费| 无码秘蜜桃一区二区| 国产精品三级在线观看| AV色天堂| 9l视频自拍蝌蚪9l视频成人| 欧美精品久久久久久久多人混战| 色吟AV| 日韩动态视频| 狠狠操狠狠插| 大香蕉伊人在线视频| AV天堂无码| 青青草逼视频| 超碰最新在线观看| 高清无码毛片| AV不卡在线| 色色五月丁香婷婷| 成人色视| 亚洲视频一区| 欧美中文字幕在线视频| 国产一区二区免费| 日韩午夜在线观看| 成人视频欧美| 无码国产精品一区二区免费式直播| 91久久综合| 日韩一级性爱视频| 亚洲欧美高清视频| 亚洲日韩在线播放| 亚洲AV观看| 免费中文字幕av| 欧美二区视频| 韩国三级AV| 777777视频| av片在线观看| 欧一美一婬一伦一区二区三区黑人-亚 | 超碰中文字幕| 在线免费观看AV片| 中文无码字幕在线| 91色| 免费观看高清无码视频| 欧美成人免费| 少妇搡BBBB搡BBB搡造水爽| 日日骚av一区二区三区| 亚洲真人无码| 豆花视频成人网站入口| 欧美一级在线观看| 嫩草在线观看| 日韩啪啪网站| 国产口爆视频| 午夜精品在线观看| 亚洲日本三级片| www.婷婷五月天| 91热在线| 大香蕉三级| 国产午夜精品一区二区三区四区| 99在线精品视频在线观看| 黄色一区二区三区| 陈冠希和张柏芝mv| 99国产精品99久久久久久粉嫩| 中文无码在线观看中文字幕av中文| 大荫蒂精品另类| 亚洲国产另类精品| 乱伦天堂| 操屄视频在线观看| 嫩草视频在线观看| 欧美日韩中文字幕在线视频| 永久中文字幕| 久久A√一区二区| 国产性爱自拍一下| 亚洲一级黄色| 人人操人人干人人爽| www.黄色电影| 日皮网站在线观看| 另类老妇奶性生BBwBBw偷拍 | 性99网站| 国产XXXX| A片视频在线观看| 无码人妻中文字幕| 波多野结衣一区二区三区在线观看 | 女女女女女女BBBBBB手| 成人免费区一区二区三区| 中文字幕一区二区三区四区| 欧美人妻视频| 日本无码免费视频| 国产69精品久久久久久| 丰滿人妻-区二区三区| 成年片免费观看网站免费观看,亚洲+欧...| 国产一级影院| 91乱子伦国产乱子伦无码| 四川少妇搡BBBB搡BBB视频网 | 五月丁香婷中文字幕| 亚洲视频综合网| 午夜色色福利| 中文字幕的| 蜜桃传媒一区二区亚洲AV| 超碰九九| 亚洲无码视频免费| 欧美大香蕉伊人| 人妻精品免费| 无码人妻AⅤ一区二区三区| 久久午夜成人电影| 亚洲中文自拍| 五月天青青草超碰免费公开在线观看 | 99cao| 黑人AV| 嫩BBB槡BBBB槡BBBB撒尿-百度 | 牛牛成人在线视频| 操逼视频免费观看| 黃色一级一片免费播放| 毛片福利| 另类罕见稀奇videos| 北条麻妃无码精品AV| 日本国产在线观看| 婷婷五月天基地| 亚洲一区二区三区在线播放| 日皮网站在线观看| 日韩精品极品视频在线观看免费| 亚洲七区| 人妻无码精品久久人妻成人| 五月天亭亭.com| 久久91久久久久麻豆精品| 天堂资源在线| 69av在线播放| 午夜性爱网| 高清无码视频在线免费观看| 青草无码视频| 视频二区中文字幕| 成人激情综合| 五月天综合| 无码专区在线观看| 免费成人黄色| 亚洲一区二区三区在线播放| 成人免费网站在线观看| 无码熟妇人妻无码AV在线天堂 | 无码人妻A片一区二区青苹果| 亚洲GV成人无码久久精品| 蜜臀AV午夜精品| 欧美日韩日逼视频| 五月天综合在线| 99久久大香蕉| 在线观看免费a片| 91精品少妇高潮一区二区三区不卡 | av字幕网| 久久日韩操| 亚洲s在线| 久久人搡人人玩人妻精AV香蕉| 日本韩国叼嘿片| 日韩中文字幕视频| 亚洲午夜视频| 91午夜福利| 在线观看亚洲视频| 中文字幕一区二区三区四区| 大香蕉操逼| 波多野结衣成人视频| 国产无遮挡又黄又爽免费网站 | 91热99| 骚妇一区| 亚洲精品成人片在线观看精品字幕| 久久精品禁一区二区三区四区五区| 逼逼AV网站-日韩电影| 蜜臀AV一区二区三区免费看| 日本精品乱伦| 欧美老女人操逼群| 男女网站在线观看| 草久精品| 亚洲日韩免费在线观看| 青草视频精品| 91人妻无码视频| 欧美亚洲综合在线观看| 亚洲精品一区二区三区四区高清 | 翔田千里无码精品| 久久中文字幕免费| 亚洲天堂av在线观看| 五月天亭亭.com| 欧美激情性爱网站| 老司机福利在线视频| 日韩v欧美v日本v亚洲v国产v| 国产一级A片在线观看| 欧美日韩国| 99r6热只有精品免费观看| 老司机午夜免费精品视频| 免费观看A级毛片| 国精品无码人妻一区二区三区 | 国产欧美一区二区三区特黄手机版| 亚洲在线观看网站| 大荫蒂精品另类| 午夜亚洲AⅤ无码高潮片苍井空 | 精品免费国产一区二区三区四区的使用方法 | 91精品国产91久久久久久吃药 | 婷婷五月激情小说| 国产suv精品一区二区6精华液 | 嫩草99| 688AV秘无码一区二区| 大鸡巴久久久久| 91理论片| 真实白嫖91探花无码| 另类老妇性BBwBBw图片| 7799精品视频天天看| 丁香五月天av| 26uuu亚洲| 国产一级女婬乱免费看| 免费在线看黄色| 91日本| 小h片在线观看| 超碰青娱乐| 色婷婷天天操天天干| 天天想天天干| 91精品国产一区二区三区四区大| 欧美精品三区| 经典三级在线视频| 丁香五月婷婷中文字幕| 国产内射精品| 特大妓女BBwBBWBBw| 亚洲AV无码乱码精| av久草| 国产美女操逼| 久久精品99久久久久久久久| 99热加勒比| 婷婷五月激情中文字幕| 国产亚洲欧美日韩高清| 国产福利电影在线| 国产aaaaaa| 欧美性猛交XXXX乱大交HD | 西西www444无码免费视频| 无码主播| 大香蕉色视频| 亚洲天堂无码AV| 黄色免费看视频| 日韩一区二区在线视频| 久久国产精品久久| 亚洲福利视频在线| 成人视频网| 偷拍九九热| 亚洲内射无码| 亚洲综合视频网| 亚洲精品成人无码AV在线| 婷婷夜色福利网| 爱逼AV| 成人免费毛片AAAAAA片| 特黄视频| 无码精品一区二区三区在线观看 | 婷婷精品国产a久久综合| 成人性爱在线观看| 日本高清一区二区高清免费视频| 日韩高清一级免费| 日韩毛片在线免费观看| 性生活无码视频| 综合大香蕉| 亚洲无码一本道| 亚洲高清视频在线| 日韩在线观看免费| 成年人毛片视频| 91人妻人人澡人人爽人人DVD | 国产性爱免费视频| 欧美性猛交XXXX乱大交HD| 日韩成人三级| 一二三四在线视频| 男女操逼网站| 中文无码日韩| 日韩国产成人在线| 国产性猛交╳XXX乱大交| 特级西西444www大精品| 91人人草| 超碰乱伦| 韩国中文字幕HD久久精品| 青青草原视频在线免费观看| 17c白丝喷水自慰| 粉嫩av懂色av蜜臀av熟妇| 日韩欧美午夜成人无码| av天天干| 国产黄色AV片| 色国产视频| 亚洲最新无码| 国产一级婬片A片免费无成人黑豆 国产真实露脸乱子伦对白高清视频 | 99久草| 久久久久久综合| 亚洲综合一区二区| 欧美无人区码suv| 99久久精品一区二区成人| 豆花视频在线免费观看| 大香蕉在线75| 一本色道久久综合无码人妻| 免费黄片在线看| 亚洲福利一区二区| 亚洲成人高清在线| 成人精品一区二区区别解析| 亚洲永久视频| 91视频观看| 亚洲影视中文字幕| 免费电影日本黄色| 国产香蕉视频在线观看| 日本人人操| 国产无码av| 欧美三区四区| 亚洲尤物在线| 91九色91蝌蚪91窝成人| 操逼99| 婷婷五月天激情丁香| 国产激情无码免费| 亚洲AV无码国产综合专区| 亚洲无码成人网站| 成人小说视频在线社区| sm视频网站| 色五月婷婷久久| 色色色五月| 97综合| 免费啪啪视频| 成人午夜无码| 国产精品18禁| 久久久在线| 水蜜桃成人在线| 狠狠干天天操| 日本伊人大香蕉| 亚洲色情视频| 久久香蕉电影| 性爱视频久久| 男人色天堂网| 尻屄视频| 无码精品一区二区免费| 黄色视频导航| 91日逼视频| 亚洲欧美大香蕉视频网| 一本色道久久综合亚洲怎么玩| 亚洲黄在线观看| www.国产在线观看| 香蕉黄色三级片| 91精品午夜少妇| 欧美性爱天天操| 成人做爰A片AAA毛真人| 国产二区视频| 性欧美欧美巨大69| 99精品视频免费看| av无码在线观看| 欧美十区| WWW色色| 亚洲激情婷婷| 欧美在线成人网| 中国丰满妇BBwBBwHD| 日本一本不卡| 日韩操逼片| 日本大香蕉在线视频| 一本无码视频| 成人在线视频播放| 手机毛片在线播放| 翔田千里无码AV在线观看| 视频一区二区三区免费| 国产一级黄片| 久草视频2| 男人的天堂亚洲| 操人妻视频| 草b网站| 午夜成人福利剧场| 亚洲成人网站在线| 2019狠狠操| 大伊香蕉在线| 婷婷网址| 欧美激情性爱网站| 亚洲乱码一区二区三区| 九九热免费视频| 无码专区在线看v| 四季AV之日韩人妻无码| 黄片亚洲| 少妇人妻偷人精品无码视频新浪| 99国产综合| 国产又爽又黄免费网站在线看| 性欧美成人18| 蜜桃Av噜噜| 怡红院一区| 日韩精品一区二区三区免费观看高清| 日本久久成人| 伊人久久爱| 免费看日韩视频| 天天日天天干天天草| 国产资源在线观看| 中文字幕观看av| 想要xx视频| AV在线免费观看网站| 日韩大码无码| Av毛片| 欧美人与禽乱婬A片| 蜜桃视频欧美| 欧美久久久久久| 男人的天堂在线视频| 99在线观看视频在线高清| 人人草人人摸人人看| 北条麻妃在线无码| 怡红院一区二区| 欧美a级视频| 狼友视频第二页| 综合色色婷婷|