精华内容
下载资源
问答
  • 抓包工具 Win 上不外乎 WireShark,Linux 上是 TCPDump,本文就是用实际的抓包,一步一步分析 TCP/IP 协议栈,读懂数据包,从而理解协议栈,理解了协议栈,在网络编程中无往而不利。 本文主要讲解一下内容: 教你...
  • 奋斗在软件测试领域已经有十年了分,总结软件测试人员应该具备的能力主要分为硬技能 + 软技能 两部分。...抓包工具的基本使用 HTTP 基础知识 对接口测试,有一些基本的了解 需要了解持续集成这块的内容,至少会

      奋斗在软件测试领域已经有十年了分,总结软件测试人员应该具备的能力主要分为硬技能 + 软技能 两部分。

    image/20200713/55dfc917fcf0ac3640471f9394244301.jpeg

    硬技能:

    看得懂基本的代码

    能了解整个项目的数据流、业务流,方便快速定位问题,测试深层次 Bug

    对项目管理,有一个基本的认识

    Linux (必备知识)

    Git (必备知识)

    DB (数据库这块,必备知识)

    对于行业内,通过的测试工具,有一些基本的了解,并能快速的上手使用

    抓包工具的基本使用

    HTTP 基础知识

    对接口测试,有一些基本的了解

    需要了解持续集成这块的内容,至少会使用

    至于安全测试、性能测试,能了解更好

    如上列举了一些硬技能,看起来好像很多,其实没那么复杂,很多东西平时工作中都会用到,用几次就会了 。

    但对于一名合格的软件测试从业者,仅仅会一些硬技能还不够。你还需要具备一些软技能。

    软技能:

    质量意识(很多时候,团队中,并不缺技术,唯独缺质量意识)

    好的工作习惯(每天把不懂的内容,用本子记下来,弄懂为止,几年后,成长超速)

    善于主动寻找答案(多数内容,搜索引擎都可以检索到)

    简单事情,重复做

    重复事情,微创新(提升效率)

    有始有终(对于质量的最后一环节,一定要确保所有的问题,有始有终,走完整个生命周期)

    知道怎么提问

      要求这么多,如果只是会功能测试,什么都不会,怎么办?此刻开始学习还来得及,把工作中项目相关的所有内容弄懂,上面的技能就会了。这其实要不了多久,一年足够(对于工作了五年左右的同学,还是有一定的基础的,学习起来不难)。

      对于单纯的测试执行。招应届生,或者一年左右的同学,足以。他们更认真、一张白纸,更好培养,而且战斗力爆棚。好好学习,每天进步一点点。否则,就不是 35 岁的中年危机,28 岁也许会成为你的危机。

     

    展开全文
  • 首先,通过浏览器进入汽车之家,进入车商城页面,因为需求不一样,所以抓包抓到的url也不一样,在这里,我是将国家定位于中国,城市定位为深圳,爬取2019年的家庭轿车销售信息,数据清洗则主要使用了正则表达式,将...

    此次数据来源于汽车之家车商城,仅作参考使用,如有侵权,请联系我740449043@qq.com,会立即删除

    首先,通过浏览器进入汽车之家,进入车商城页面,因为需求不一样,所以抓包抓到的url也不一样,在这里,我是将国家定位于中国,城市定位为深圳,爬取2019年的家庭轿车销售信息,数据清洗则主要使用了正则表达式,将清洗后的数据写入MySQL保存。

     

    首先,明确的定义目标,要哪些数据,定义在items.py里面

    # -*- coding: utf-8 -*-
    
    # Define here the models for your scraped items
    #
    # See documentation in:
    # https://doc.scrapy.org/en/latest/topics/items.html
    
    import scrapy
    
    #定义目标数据的字段
    class MyscrapyItem(scrapy.Item):
       
        #汽车之家之车商城所用到的参数
        carname = scrapy.Field()                # 汽车全称
        volume = scrapy.Field()                 # 成交量
        inventory = scrapy.Field()              # 库存
        patdiscount = scrapy.Field()            # 厂商指导价
        content = scrapy.Field()                # 权益内容
        manufacturers = scrapy.Field()          # 汽车制造商
        carURL = scrapy.Field()                 # 汽车所在链接
    
    
    
    
    编写爬虫部分代码,在spider里,如下:
    # -*- coding: utf-8 -*-
    import scrapy
    import re
    
    import time
    
    #导入自定义的包
    from MyScrapy.items import MyfirstscrapyItem
    
    
    
    class MaichespiderSpider(scrapy.Spider):
        name = 'MaiCheSpider'
        allowed_domains = ['mall.autohome.com.cn']
        page = 1
        url_1 = r'https://mall.autohome.com.cn/list/0-440300-0-0-0-0-0-1-0-'
        url_2 = r'.html?factoryId=0&minPrice=-1&maxPrice=-1&stageTag=0&importTag=0&double11Tag=0&newenergyTag=0&selectionTag=0&dataSource=&eventId=&eventProcessId=&providerId=&itemIds=&eventProcessIds=&providerIds=&dataSources=&specId=0&minDownPay=-1&maxDownPay=-1&businessType='
        start_urls = [url_1 + str(page) + url_2]
    
        def parse(self, response):
            data = response.body.decode('utf-8')
    
            #获取每一页宝贝标签
            pat = r'<a href="(.*?)" target="_blank">'
            data_1 = re.findall(pat,data)
    
            #向每个宝贝发送链接
            for each in data_1[::-1]:
    
                url_son = r'https:' + each
                yield scrapy.Request(url_son,callback=self.parse_son)
    
            #执行翻页功能
            self.page += 1
            if self.page < 32:
                yield scrapy.Request(self.url_1 + str(self.page) + self.url_2,callback=self.parse)
    
    
        #此方法用来处理汽车所在链接
        def parse_son(self,response):
            item = MyfscrapyItem()
            data_a = response.body.decode('utf-8')
    
            #提取所需数据
            pat_1 = r'<h2 class="detail-info-title">(.*)</h2>'  # 汽车全称
            pat_2 = r',historySaleCount:"(\d*)"'                # 成交量
            pat_3 = r',sellableStock:(\d*)'                     # 库存
    
            pat_4 = r',factoryName:"(.*?)"'                      # 汽车制造商
            pat_4_1 = r',name:"(.*?\s)'
    
            pat_5 = r'id="detailInfoPrice"\s*price="(.*)"'      # 厂商指导价
            pat_6 = r'class="list-pop-title-txt">(.*)</a>'      # 网店名
            pat_x = response.url                                # 汽车所在链接
    
            #清洗数据r';">(.*?)</a></li>'  r'list-pop-title-txt">(.*?)</a>'
    
    
            item['carname'] = re.findall(pat_1,data_a)[0]
            item['volume'] = re.findall(pat_2, data_a)[0]
            item['inventory'] = re.findall(pat_3, data_a)[0]
    
            if len(re.findall(pat_4, data_a)[0]) == 0:
                item['patdiscount'] = re.findall(pat_4_1, data_a)[0]
            else:
                item['patdiscount'] = re.findall(pat_4, data_a)[0]
    
            item['content'] = re.findall(pat_5,data_a)[0]
            item['manufacturers'] = re.findall(pat_6, data_a)[0]
            item['carURL'] = pat_x
    
            '<b class="detail-info-price" id="detailInfoPrice" price="110000" style="">¥11.00</b>'
    
            #返回数据
            yield item
    
    拿到数据,在pipelines.py中编写保存,就是写入到数据库文件中:
    
    # -*- coding: utf-8 -*-
    
    # Define your item pipelines here
    #
    # Don't forget to add your pipeline to the ITEM_PIPELINES setting
    # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
    
    import pymysql
    
    
    #管道文件,负责item的后期处理或保存
    class MyfirstscrapyPipeline(object):
    
        def __init__(self):#定义一些需要初始化的参数
    
            #连接数据库
            self.connect = pymysql.Connect(host='localhost',port=3306,user='****',password='*****',db='scrapyspider',charset='utf8')
            self.cursor = self.connect.cursor()
            #self.file = open('tengxun.csv','a+')
    
        #管道每次接收到item后执行的方法
        #return item 必须要有
        def process_item(self, item, spider):
            #往数据库写入数据
            self.cursor.execute('insert into cheshangchengspider(汽车全称,成交量,库存,汽车制造商,厂商指导价,网店名,所在链接) value (%s,%s,%s,%s,%s,%s,%s)',
                (
                    item['carname'],
                    item['volume'],
                    item['inventory'],
                    item['patdiscount'],
                    item['content'],
                    item['manufacturers'],
                    item['carURL']
                )
                )
    
            self.connect.commit()
    
            #content = str(item) + '\n'
            #self.file.write(content) #写入数据到本地
            #return item
            return item
    
        #当爬取执行完毕时执行的方法(可以省略)
        def close_spider(self,spider):
            #关闭数据库
            self.cursor.close()
            self.connect.close()
            #self.file.close()

     

    数据已经提交到数据库,我们来看看结果:

    数据写入正常,厂商指导价这里1或者99都是定金抵权益,到后面出现的就是整车价格

    排版是按销量排序的,所以数据干脆就把定金抵权益和整车价格排在同一列了逛个汽车之家,我都想买车了....

     

    展开全文
  • 如何设计一个安全的对外接口

    千次阅读 2020-04-30 16:38:03
    好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受. ...我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以...

    好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.

    目录

     

    安全措施

    1.数据加密

    2.数据加签

    3.时间戳机制

    4.AppId机制

    5.限流机制

    6.黑名单机制

    7.数据合法性校验

    如何实现

    1.数据加密

    2.数据加签

    3.时间戳机制

    4.AppId机制

    5.限流机制

    6.黑名单机制

    7.数据合法性校验

    总结


    安全措施

    个人觉得安全措施大体来看主要在两个方面,一方面就是如何保证数据在传输过程中的安全性,另一个方面是数据已经到达服务器端,服务器端如何识别数据,如何不被攻击;下面具体看看都有哪些安全措施。

    1.数据加密

    我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,常见的做法对关键字段加密比如用户密码直接通过md5加密;现在主流的做法是使用https协议,在http和tcp之间添加一层加密层(SSL层),这一层负责数据的加密和解密;

    2.数据加签

    数据加签就是由发送者产生一段无法伪造的一段数字串,来保证数据在传输过程中不被篡改;你可能会问数据如果已经通过https加密了,还有必要进行加签吗?数据在传输过程中经过加密,理论上就算被抓包,也无法对数据进行篡改;但是我们要知道加密的部分其实只是在外网,现在很多服务在内网中都需要经过很多服务跳转,所以这里的加签可以防止内网中数据被篡改;

    3.时间戳机制

    数据是很容易被抓包的,但是经过如上的加密,加签处理,就算拿到数据也不能看到真实的数据;但是有不法者不关心真实的数据,而是直接拿到抓取的数据包进行恶意请求;这时候可以使用时间戳机制,在每次请求中加入当前的时间,服务器端会拿到当前时间和消息中的时间相减,看看是否在一个固定的时间范围内比如5分钟内;这样恶意请求的数据包是无法更改里面时间的,所以5分钟后就视为非法请求了;

    4.AppId机制

    大部分网站基本都需要用户名和密码才能登录,并不是谁来能使用我的网站,这其实也是一种安全机制;对应的对外提供的接口其实也需要这么一种机制,并不是谁都可以调用,需要使用接口的用户需要在后台开通appid,提供给用户相关的密钥;在调用的接口中需要提供appid+密钥,服务器端会进行相关的验证;

    5.限流机制

    本来就是真实的用户,并且开通了appid,但是出现频繁调用接口的情况;这种情况需要给相关appid限流处理,常用的限流算法有令牌桶和漏桶算法;

    6.黑名单机制

    如果此appid进行过很多非法操作,或者说专门有一个中黑系统,经过分析之后直接将此appid列入黑名单,所有请求直接返回错误码;

    7.数据合法性校验

    这个可以说是每个系统都会有的处理机制,只有在数据是合法的情况下才会进行数据处理;每个系统都有自己的验证规则,当然也可能有一些常规性的规则,比如身份证长度和组成,电话号码长度和组成等等;

    如何实现

    以上大体介绍了一下常用的一些接口安全措施,当然可能还有其他我不知道的方式,希望大家补充,下面看看以上这些方法措施,具体如何实现;

    1.数据加密

    现在主流的加密方式有对称加密和非对称加密;
    对称加密:对称密钥在加密和解密的过程中使用的密钥是相同的,常见的对称加密算法有DES,AES;优点是计算速度快,缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥,如果一方的秘钥被泄露,那么加密信息也就不安全了;
    非对称加密:服务端会生成一对密钥,私钥存放在服务器端,公钥可以发布给任何人使用;优点就是比起对称加密更加安全,但是加解密的速度比对称加密慢太多了;广泛使用的是RSA算法;

    两种方式各有优缺点,而https的实现方式正好是结合了两种加密方式,整合了双方的优点,在安全和性能方面都比较好;

    对称加密和非对称加密代码实现,jdk提供了相关的工具类可以直接使用,此处不过多介绍;
    关于https如何配置使用相对来说复杂一些,可以参考本人的之前的文章HTTPS分析与实战

    2.数据加签

    数据签名使用比较多的是md5算法,将需要提交的数据通过某种方式组合和一个字符串,然后通过md5生成一段加密字符串,这段加密字符串就是数据包的签名,可以看一个简单的例子:

    str:参数1={参数1}&参数2={参数2}&……&参数n={参数n}$key={用户密钥};
    MD5.encrypt(str);
    复制代码

    注意最后的用户密钥,客户端和服务端都有一份,这样会更加安全;

    3.时间戳机制

    解密后的数据,经过签名认证后,我们拿到数据包中的客户端时间戳字段,然后用服务器当前时间去减客户端时间,看结果是否在一个区间内,伪代码如下:

    long interval=5*60*1000;//超时时间
    long clientTime=request.getparameter("clientTime");
    long serverTime=System.currentTimeMillis();
    if(serverTime-clientTime>interval){
        return new Response("超过处理时长")
    }
    复制代码

    4.AppId机制

    生成一个唯一的AppId即可,密钥使用字母、数字等特殊字符随机生成即可;生成唯一AppId根据实际情况看是否需要全局唯一;但是不管是否全局唯一最好让生成的Id有如下属性:
    趋势递增:这样在保存数据库的时候,使用索引性能更好;
    信息安全:尽量不要连续的,容易发现规律;
    关于全局唯一Id生成的方式常见的有类snowflake方式等;

    5.限流机制

    常用的限流算法包括:令牌桶限流,漏桶限流,计数器限流;
    1.令牌桶限流
    令牌桶算法的原理是系统以一定速率向桶中放入令牌,填满了就丢弃令牌;请求来时会先从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务;令牌桶允许一定程度突发流量,只要有令牌就可以处理,支持一次拿多个令牌;
    2.漏桶限流
    漏桶算法的原理是按照固定常量速率流出请求,流入请求速率任意,当请求数超过桶的容量时,新的请求等待或者拒绝服务;可以看出漏桶算法可以强制限制数据的传输速度;
    3.计数器限流
    计数器是一种比较简单粗暴的算法,主要用来限制总并发数,比如数据库连接池、线程池、秒杀的并发数;计数器限流只要一定时间内的总请求数超过设定的阀值则进行限流;

    具体基于以上算法如何实现,Guava提供了RateLimiter工具类基于基于令牌桶算法:

    RateLimiter rateLimiter = RateLimiter.create(5);
    复制代码

    以上代码表示一秒钟只允许处理五个并发请求,以上方式只能用在单应用的请求限流,不能进行全局限流;这个时候就需要分布式限流,可以基于redis+lua来实现;

    6.黑名单机制

    如何为什么中黑我们这边不讨论,我们可以给每个用户设置一个状态比如包括:初始化状态,正常状态,中黑状态,关闭状态等等;或者我们直接通过分布式配置中心,直接保存黑名单列表,每次检查是否在列表中即可;

    7.数据合法性校验

    合法性校验包括:常规性校验以及业务校验;
    常规性校验:包括签名校验,必填校验,长度校验,类型校验,格式校验等;
    业务校验:根据实际业务而定,比如订单金额不能小于0等;

    总结

    本文大致列举了几种常见的安全措施机制包括:数据加密、数据加签、时间戳机制、AppId机制、限流机制、黑名单机制以及数据合法性校验;当然肯定有其他方式,欢迎补充。

    展开全文
  • 前言 最近有个项目需要对外提供一个接口,提供公网域名进行访问,而且接口和...我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,

    前言

    最近有个项目需要对外提供一个接口,提供公网域名进行访问,而且接口和交易订单有关,所以安全性很重要;这里整理了一下常用的一些安全措施以及具体如何去实现。

    安全措施

    个人觉得安全措施大体来看主要在两个方面:

    • 一方面就是如何保证数据在传输过程中的安全性;
    • 另一个方面是数据已经到达服务器端,服务器端如何识别数据,如何不被攻击;下面具体看看都有哪些安全措施。

    1.数据加密

    我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,常见的做法对关键字段加密比如用户密码直接通过md5加密;现在主流的做法是使用https协议,在http和tcp之间添加一层加密层(SSL层),这一层负责数据的加密和解密;

    2.数据加签

    数据加签就是由发送者产生一段无法伪造的一段数字串,来保证数据在传输过程中不被篡改;你可能会问数据如果已经通过https加密了,还有必要进行加签吗?数据在传输过程中经过加密,理论上就算被抓包,也无法对数据进行篡改;但是我们要知道加密的部分其实只是在外网,现在很多服务在内网中都需要经过很多服务跳转,所以这里的加签可以防止内网中数据被篡改;

    3.时间戳机制

    数据是很容易被抓包的,但是经过如上的加密,加签处理,就算拿到数据也不能看到真实的数据;但是有不法者不关心真实的数据,而是直接拿到抓取的数据包进行恶意请求;这时候可以使用时间戳机制,在每次请求中加入当前的时间,服务器端会拿到当前时间和消息中的时间相减,看看是否在一个固定的时间范围内比如5分钟内;这样恶意请求的数据包是无法更改里面时间的,所以5分钟后就视为非法请求了;

    4.AppId机制

    大部分网站基本都需要用户名和密码才能登录,并不是谁来能使用我的网站,这其实也是一种安全机制;对应的对外提供的接口其实也需要这么一种机制,并不是谁都可以调用,需要使用接口的用户需要在后台开通appid,提供给用户相关的密钥;在调用的接口中需要提供 appid+密钥,服务器端会进行相关的验证;

    5.限流机制

    本来就是真实的用户,并且开通了appid,但是出现频繁调用接口的情况;这种情况需要给相关appid限流处理,常用的限流算法有令牌桶和漏桶算法;

    6.黑名单机制

    如果此appid进行过很多非法操作,或者说专门有一个中黑系统,经过分析之后直接将此appid列入黑名单,所有请求直接返回错误码;

    7.数据合法性校验

    这个可以说是每个系统都会有的处理机制,只有在数据是合法的情况下才会进行数据处理;每个系统都有自己的验证规则,当然也可能有一些常规性的规则,比如身份证长度和组成,电话号码长度和组成等等;

    如何实现

    以上大体介绍了一下常用的一些接口安全措施,当然可能还有其他我不知道的方式,希望大家补充,下面看看以上这些方法措施,具体如何实现;

    1.数据加密

    现在主流的加密方式有对称加密和非对称加密

    对称加密:对称密钥在加密和解密的过程中使用的密钥是相同的,常见的对称加密算法有DES,AES;优点是计算速度快,缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥,如果一方的秘钥被泄露,那么加密信息也就不安全了;
    非对称加密:服务端会生成一对密钥,私钥存放在服务器端,公钥可以发布给任何人使用;优点就是比起对称加密更加安全,但是加解密的速度比对称加密慢太多了;广泛使用的是RSA算法;
    两种方式各有优缺点,而https的实现方式正好是结合了两种加密方式,整合了双方的优点,在安全和性能方面都比较好;

    对称加密和非对称加密代码实现,jdk提供了相关的工具类可以直接使用,此处不过多介绍;关于https如何配置使用相对来说复杂一些,可以参考本人的之前的文章HTTPS分析与实战

    2.数据加签

    数据签名使用比较多的是md5算法,将需要提交的数据通过某种方式组合和一个字符串,然后通过md5生成一段加密字符串,这段加密字符串就是数据包的签名,可以看一个简单的例子:

    str:参数1={参数1}&参数2={参数2}&……&参数n={参数n}$key={用户密钥};
    MD5.encrypt(str);
    注意最后的用户密钥,客户端和服务端都有一份,这样会更加安全;

    3.时间戳机制

    解密后的数据,经过签名认证后,我们拿到数据包中的客户端时间戳字段,然后用服务器当前时间去减客户端时间,看结果是否在一个区间内,伪代码如下:

    long interval=5*60*1000;//超时时间
    long clientTime=request.getparameter("clientTime");
    long serverTime=System.currentTimeMillis();
    if(serverTime-clientTime>interval){
        return new Response("超过处理时长")
    }
    

    4.AppId机制

    生成一个唯一的AppId即可,密钥使用字母、数字等特殊字符随机生成即可;生成唯一AppId根据实际情况看是否需要全局唯一;但是不管是否全局唯一最好让生成的Id有如下属性:

    趋势递增:这样在保存数据库的时候,使用索引性能更好;
    信息安全:尽量不要连续的,容易发现规律;
    关于全局唯一Id生成的方式常见的有类snowflake方式等;

    5.限流机制

    常用的限流算法包括:固定窗口计数器算法、滑动窗口计数器算法、漏桶限流、令牌桶限流

    固定窗口计数器算法

    规定我们单位时间处理的请求数量。比如我们规定我们的一个接口一分钟只能访问10次的话。使用固定窗口计数器算法的话可以这样实现:给定一个变量counter来记录处理的请求数量,当1分钟之内处理一个请求之后counter+1,1分钟之内的如果counter=100的话,后续的请求就会被全部拒绝。等到 1分钟结束后,将counter回归成0,重新开始计数(ps:只要过了一个周期就讲counter回归成0)。

    这种限流算法无法保证限流速率,因而无法保证突然激增的流量。比如我们限制一个接口一分钟只能访问10次的话,前半分钟一个请求没有接收,后半分钟接收了10个请求。
    在这里插入图片描述

    滑动窗口计数器算法

    算的上是固定窗口计数器算法的升级版。滑动窗口计数器算法相比于固定窗口计数器算法的优化在于:它把时间以一定比例分片比如一分钟分为6个区间,每个区间为10s。每过一定区间的时间,就抛弃最前面的一个区间,如下图所示。如果当前窗口的请求数量超过了限制数量的话,就拒绝后续请求。
    在这里插入图片描述

    很显然:当滑动窗口的格子划分的越多,滑动窗口的滚动就越平滑,限流的统计就会越精确。
    在这里插入图片描述

    漏桶算法

    我们可以把发请求的动作比作成注水到桶中,我们处理请求的过程可以比喻为漏桶漏水。我们往桶中以任意速率流入水,以一定速率流出水。当水超过桶流量则丢弃,因为桶容量是不变的,保证了整体的速率。如果想要实现这个算法的话也很简单,准备一个队列用来保存请求,然后我们定期从队列中拿请求来执行就好了。
    在这里插入图片描述

    令牌桶算法

    令牌桶算法也比较简单。和漏桶算法算法一样,我们的主角还是桶(这限流算法和桶过不去啊)。不过现在桶里装的是令牌了,请求在被处理之前需要拿到一个令牌,请求处理完毕之后将这个令牌丢弃(删除)。我们根据限流大小,按照一定的速率往桶里添加令牌。
    在这里插入图片描述

    具体基于以上算法如何实现,Guava提供了RateLimiter工具类基于基于令牌桶算法:

    RateLimiter rateLimiter = RateLimiter.create(5);
    以上代码表示一秒钟只允许处理五个并发请求,以上方式只能用在单应用的请求限流,不能进行全局限流;这个时候就需要分布式限流,可以基于redis+lua来实现;

    6.黑名单机制

    如何为什么中黑我们这边不讨论,我们可以给每个用户设置一个状态比如包括:初始化状态,正常状态,中黑状态,关闭状态等等;或者我们直接通过分布式配置中心,直接保存黑名单列表,每次检查是否在列表中即可;

    7.数据合法性校验

    合法性校验包括:

    常规性校验 :包括签名校验,必填校验,长度校验,类型校验,格式校验等;
    业务校验 :根据实际业务而定,比如订单金额不能小于0等;

    总结

    本文大致列举了几种常见的安全措施机制包括:数据加密、数据加签、时间戳机制、AppId机制、限流机制、黑名单机制以及数据合法性校验;当然肯定有其他方式,欢迎补充。

    学习是永无止境的,为了方便更好的学习点击这里了解最新大厂面试题、最新的学习资料哦!
    展开全文
  • 前言 最近有个项目需要对外提供一个接口,提供公网域名进行访问,而且接口和交易...我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据
  • 前言 最近有个项目需要对外提供一个接口,提供公网域名进行访问,而且接口...我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,常
  • 前言 最近有个项目需要对外提供一个接口,提供公网域名进行访问,...我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过 http 协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,常见的做
  • 最近在学习爬虫技术,就用抖音练了一下手,发现抖音爬虫并不是那么难,主要还是签名算法花了我一点时间,只要能搞定签名,要爬取哪些数据基本就迎刃而解了。 至于签名算法的实现,网上有很多文章,大家如果要自己...
  • 前言 最近有个项目需要对外提供一个接口,提供公网域名进行访问...我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,常见的做法对
  • 前言 最近有个项目需要对外提供一个接口,提供公网域名进行访问...我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,常见的做法对
  • 起来好像前后端分离是个浪潮,原来只有APP客户端会考虑这些,现在连Web都要考虑前后端分离 。这里面不得不谈的就是API的设计和安全性,...数据抓包窃取 数据被调包篡改 数据被爬取泄露 API的设计中,主要考...
  • 2.学会掌握HttpWatch抓包看http背后向服务器请求的一些细节 3.Get和Post的区别 二、什么是协议 协议就是双方在交互、通讯的时候遵守的一种规范、规则。 三、Http协议 客户端与服务器在执行Http请求时候双方...
  • 破解wifi无线网络密码

    热门讨论 2012-11-07 10:46:02
     抓包无线网卡一块  ü笔记本电脑一台(定义为STA3,作为入侵者) 2.2软件环境  入侵者STA3:WinAirCrackPack工具包,  注意:STA3要开启在控制面板->管理工具->服务中开启Wireless Zero Config服务。  3、...
  • 最后安利一款工具,学习网络必备的抓包神奇:wireshark,如果你学网络没抓过包,那基本等于白学了(有点严重)。 操作系统 学什么? 作为一名 Javaer 在平时的工作中可能不会直接跟操作系统打交道,因为 JVM 帮...
  • 一、WSE抓包结果(存到1.txt里): POST /bbs/upPhoto/upfile.asp HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application...
  • -- 数据不保证完全准确,错误之处还望海涵,如需深入使用还望自己求证。 -- 买房有风险,投资需谨慎 ,资料内容不保证完全正确,使用需谨慎。 新增杭州学区房购房指南 新增各地控规文件 一:认识杭州从板块...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

抓包主要看哪些数据