java基础-安全篇

2018-07-10  本文已影响0人  巨子联盟

什么是Oauth2

Oauth2是一种认证协议,支持第三方系统不知道特定服务提供者的用户名密码的情况下的认证,主要有4种授权方式:

  1. 授权码模式
    主要有3个角色,客户端,资源服务器,认证服务器
  2. 简化模式
  3. 密码模式
  4. 客户端模式
    具体内容可以参考网上赫赫有名的阮一峰大神的博客 理解OAuth 2.0
  1. 用户通过第三方应用访问资源受保护的资源,
  2. 资源服务器验证用户未授权,引导其到认证服务器的认证页面.
  3. 用户输入完成,认证服务器验证合法后发放授权码code并跳转自第三方应用
  4. 第三方应用根据返回的code去认证服务器申请访问令牌access_token和更新令牌refresh_token
  5. 认证服务器验证code无误后发放两个令牌,
  6. 第三方根据访问令牌访问受保护的资源.

OAuth2协议为什么会有一个Redirect阶段

  1. 先说一下原理
  2. 为什么要先后两次验证并提交redirect_uri,因为,第一次redirect_uri带回来的是一次性用的code,这个code和对应的redirect_uri相关联,在第二次用code换token时候要验证这个uri是否和刚刚生成code的一致,防止被攻击者修改uri而做到session劫持.

XSS攻击

  1. 什么是XSS攻击
    XSS,跨站脚本攻击,Cross Site Script,通常是指黑客通过"html注入"篡改了页面,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击.
  2. 防御之道
  1. 在展示的时候对一些特殊字符进行转义htmlencode,从而让其不能按照html渲染页面
    2)cookie设置HTTPONLY
    3)富文本中"事件标签"应该被严格控制,比如form,script,iframe,标签使用白名单,可用开源项目AntiSamy

CSRF攻击

  1. 概念
    CSRF,Cross Site Request Forgery,跨站脚本伪造;简单讲就是攻击者盗用了用户身份,以用户的身份操作了受信任的网站;
    过程是:
    1.用户登录一个合法的网站后未退出的情况下又打开了一个恶意网站,
    2.恶意网站中发送了攻击者事先精心准备好的请求,该请求会向用户刚刚登陆的受信任的网站
    3.因为用户刚刚登录并保存了cookie,此时恶意网站中的请求会将cookie带到受信任的网站,从而以用户的身份执行操作.

  2. 防御之道
    1 添加验证码,强制用户与应用进行交互,但该手段影响用户体验
    2 检查referer
    3 使用 csrf token,token足够随机,token保存在session,cookie,header,校验是否和session里面的相等且不能为空

文件上传漏洞

  1. 概念
    上传web脚本能够被服务器解析,
  2. 防御之道
    1 检查文件名后缀,用白名单的方式.
    2 判断上传文件的文件头来验证文件的类型,可以结合使用MIME Type
    3 文件上传的目录设置为不可执行
    4 使用随机数改写文件名和文件路径
    5 单独设置文件服务器的域名

如何解决Cookie盗取问题

  1. 做好XSS和CSRF攻击的防御
上一篇 下一篇

猜你喜欢

热点阅读