互联网安全

一、Web常用攻击手段:
 1.XSS脚本 -> 使用Javascript脚本注入,浏览器默认支持脚本语言执行
  比如:<script>alert('sss')</script>
  <script>window.location.href='http://www.itmayiedu.com';</script>
  解决方法:过滤器拦截请求参数,参数的特殊字符转换成html源代码保存

StringEscapeUtils.escapeHtml(value);//实现转换,转为html

  SQL注入攻击->sql语句传递参数最好使用预编译,$会使用sql拼接,会被攻击

 2.防盗链技术:
  底层实现通过Http请求头中的Referer记录请求来源,Referer字段中记录了访问的来源链接地址,防盗链就是限制资源只能在某个域名来源(服务器)上进行访问,使用过滤器Filter

 3.CSRF:
  防止模拟请求、防止网络延迟重复提交
  互联网API接口幂等设计->防止表单重复提交,保证数据一致性,不重复
  会话信息使用Token方式进行保存
  防止其他用户使用Token伪造请求,使用图形验证码防止机器模拟接口请求攻击,在调用核心业务接口时,比如支付、下单、等接口,最好使用手机短信验证验证或者是人脸识别

  尽量避免程序有两把锁

 4.忘记密码漏洞:强行暴力破解密码,短信验证啥的
  隐藏于漏洞->使用开发工具篡改当前号码,用自己号码接受验证码,然后使用验证码 修改为别人的密码。尽量不要有隐藏于, 用户信息不使用url传输

 5.上传文件漏洞:上传木马文件,再访问木马文件,对机器进行相应操作
  a.上传文件时判断文件流方式确定上传的一定是图片,别使用判断后缀方式
  b,资源动静分离(Nginx+Tomcat实现)——最靠谱
  c.设置服务器环境上硬盘不能做删除操作
  d.前台做后缀限制
  e.服务器上不要有热部署功能

 6.html最好不要使用<!-- -->,能被看到,而是使用<%-- --%>
  异常展示使用全局捕获异常,详细放log
  会话信息不要使用用户信息进行传递

二、API幂等框架
 保证接口的唯一性
 使用使用token,必须是唯一的,再调用接口前先获取token,同时把token缓存到redis里,然后再调用接口的时候去判断redis里是否有次token,有则让其继续进行下一步访问,否则提示“重复操作”,访问成功的同时把redis里面的token删除。
 可以使用注解的形式去创建插件,环绕pround,如果是页面from表单提交,可以使用前置切面在访问也面前自动生成一个token,访问时在使用。

三、互联网API开放平台安全设计
 如何保证外网开放接口的安全性:
  1、基于令牌方式实现API接口调用,基于accessToken实现API
   accessToken=AppId(区分不同机构,不可变)+AppSecret(在传输中实现加密功能,可变),redis里存(accessToken,AppId)键值对,可以使用accessToken获取到AppId(作为id)然后去查数据库做相应权限判定,更新最新的accessToken
  2、开放平台设计Oauth2.0协议(安全认证);
   认证协议,第三方登陆授权管理
   授权码模式(authorization code)
   简化模式(implicit)
   密码模式(resource owner password credentials)
   客户端模式(client credentials)
   授权码模式(authorization code):比如微信->
    1.开发者去公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。
    2.用户访问客户端,客户端将用户导向认证服务器https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect,加上客户端自己的appid和重定向URI(redirect_uri)
    3.用户选择授权给客户端,认证服务器将用户导向客户端给的redirect_uri地址,并且附带一个code授权码
    4.客户端使用code,从认证服务器获取access_token,同时也获取到openid,请求链接https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
    认证服务器确认无误,则发放令牌,客户端可以使用refresh_token刷新令牌https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
    5.拉取用户信息
    GET请求 https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

  3、API接口数字签名,非对称加密RSA;
   a.URL特殊字符处理,
    

String encode = URLEncoder.encode("1+1", "UTF-8");
String decode = URLDecoder.decode(encode, "UTF-8");

   b.RPC远程调用使用加密,为了防止抓包分析Http请求,获取明文数据去篡改数据

    常见对称加密方案:DES、AES,速度快,移动客户端可能被破解,适用于非移动端
    密码使用单向加密,加盐
   c.移动APP接口安全设计:Https传输、使用令牌、使用非对称(避免黑客使用反编译移动打包APK)
   d.RSA非对称加密:公钥私钥,公钥加密+私钥解密,最安全但效率低
   e.如何防止抓包篡改数据:使用令牌方式,客户端先请求服务器端生成令牌,同时传输参数,然后拿到令牌去请求服务器端将进行需要的操作

  4、搭建API网关控制接口访问权限;
   网关包含过滤器实现的功能,还能实现Nginx基本功能反向代理、本地负载均衡ribbon(本地客户端),nginx软负载均衡
   网关核心应用场景:路由地址、反向代理、黑白名单、授权安全
   springCloud的Zuul实现网关,是基于Java写的,nginx是基于C

   客户端通过域名发访问服务器,DNS域名解析获取到访问服务的ip地址,先查看缓存,缓存没有就去本地host文件,没有就去DNS服务器查,找到了就访问,服务器,渠道服务主机然后获取到LVS生成的vip,然后通过局域网找到Nginx的master主机,实现七层负载均衡,找到对应服务,通过网关实现代理、授权、黑白名单过滤,进而访问到具体服务接口

  5.使用抓包工具Fiddler
   redirect重定向就是,服务器返回302状态码和一个地址location,客户端浏览器获取到302就直接触发本地location调用
   相当于中间加个代理,能进行相应篡改

  6.采用Https传输协议(使用nginx配置Https);
   SSL:非对称加密的目的,是为了确保对称加密的安全,然后使用对称加密通信

  微信小程序使用的Https协议,搜索引擎对https协议连接优先接受
  外网映射工具自带Https协议,natapp
  阿里云可以免费获取一年的https证书,生成一段配置和文件,再添加进Nginx模块里

 

 

 

posted @ 2020-06-08 16:49  shuG214xin  阅读(241)  评论(0编辑  收藏  举报