Api 接口安全性问题

有人说世上百分之九十的事都能用钱解决,但他们没告诉你剩下的百分之一需要更多的钱。

 

Api接口存在那些安全性问题呢?

1、重复提交 - 也就是幂等性设计问题

2、参数篡改  

  解决方式:签名以及加密

  防御方式:1)使用https协议传输  2)对参数以某种方式进行加密

3、防重发攻击 (就是把之前窃听到的数据原封不动的被重放或多次重放)

  防御方式:需要通过在请求体中携带当前请求的唯一标识,并且进行签名防止被篡改

    a) 基于timestamp和nonce

      微信支付的接口就是这样设计的 

      timestamp的作用
      每次HTTP请求,都需要加上timestamp参数,然后把timestamp和其他参数一起进行数字签名。
      HTTP请求从发出到达服务器一般都不会超过60s,所以服务器收到HTTP请求之后,首先判断时间戳参数与当前时间相比较,是否超过了60s,如果超过了则认为是非法的请求。

      一般情况下,从抓包重放请求耗时远远超过了60s,所以此时请求中的timestamp参数已经失效了,如果修改timestamp参数为当前的时间戳,则signature参数对应的数字签名就会失效,因为不知道签名秘钥,没有办法生成新的数字签名。

      但这种方式的漏洞也是显而易见的,如果在60s之后进行重放攻击,那就没办法了,所以这种方式不能保证请求仅一次有效

 

      nonce的作用
      nonce的意思是仅一次有效的随机字符串,要求每次请求时,该参数要保证不同。我们将每次请求的nonce参数存储到一个“集合”中,每次处理HTTP请求时,首先判断该请求的nonce参数是否在该“集合”中,如果存在则认为是非法请求。

      nonce参数在首次请求时,已经被存储到了服务器上的“集合”中,再次发送请求会被识别并拒绝。

      nonce参数作为数字签名的一部分,是无法篡改的,因为不知道签名秘钥,没有办法生成新的数字签名。

      这种方式也有很大的问题,那就是存储nonce参数的“集合”会越来越大。

      nonce的一次性可以解决timestamp参数60s(防止重放攻击)的问题,timestamp可以解决nonce参数“集合”越来越大的问题。

4、数据信息泄露(场景:截获用户登录请求,截获到账号、密码等)

  预防方式:参数进行加密传输

  如果为了保证更加的安全,可以加上RSA,RSA2,AES等等加密方式,保证了数据的更加的安全,但是唯一的缺点是加密与解密比较耗费CPU的资源。

5、SQL注入

  预防方式:1)普通用户与系统管理员用户的权限要有严格的区分;2)使用正则表达式过滤传入的参数;3)使用预编译语句来代替原生语句;4)

6、跨域脚本攻击 - XSS  JS脚本注入 获取用户信息(token等等)

  预防方式:使用特殊字符转换的方式 +过滤器拦截处理

7、CSRF(Cross Site Request Forgery, 跨域请求伪造)

8、Http请求防盗链

  防御方式: 判断http请求头Referer域中的记录来源的值,如果和当前访问的域名不一致的情况下,说明该图片可能被其他服务器盗用。 Referer字段中记录了访问的来源(浏览器访问链接地址),相当于限制资源(图片、文字) 只能在某个域名(限制某个服务器)来源进行访问。

9、文件上传漏洞

  预防方式:1)在上传文件时候 一定要使用判断文件流的方式 确定是图片 不要判断后缀方式获取图片

       2)静态资源与动态资源分开服务器 Nginx+Tomcat实现 动静分离 Nginx存放静态资源 没有tomcat环境

       3)服务器硬盘上不能做删除操作

       4)权限设置 对于目录的操作权限没有

       5)前端做后缀限制

       6)服务器上不要有热部署功能。如果我上传class文件。 Java程序就能获取到了。限制 jsp exe 等可执行程序。

10、Dos攻击

  防御方式: 解决这个问题就要用到高防服务器,如果租用高防服务器的话,它的防御能力、访问速度、稳定与否都是首要考虑因素

  

 

  

posted @ 2021-11-09 08:59  方达达  阅读(45)  评论(0编辑  收藏  举报