CSRF 中文名为跨站请求伪造。原理就是攻击者构造出一个后端请求地址,诱导用户点击或者通过某些途径自动发起请求。如果用户是在登录状态下的话,后端就以为是用户在操作,从而进行相应的逻辑。

举个例子,假设网站中有一个通过 GET 请求提交用户评论的接口,那么攻击者就可以在钓鱼网站中加入一个图片,图片的地址就是评论接口

<img src="http://www.domain.com/xxx?comment='attack'"/>

那么你是否会想到使用 POST 方式提交请求是不是就没有这个问题了呢?其实并不是,使用这种方式也不是百分百安全的,攻击者同样可以诱导用户进入某个页面,在页面中通过表单提交 POST 请求。

如何防御

防范 CSRF 攻击可以遵循以下几种规则:

  1. Get 请求不对数据进行修改
  2. 不让第三方网站访问到用户 Cookie
  3. 阻止第三方网站请求接口
  4. 请求时附带验证信息,比如验证码或者 Token

SameSite

可以对 Cookie 设置 SameSite 属性。该属性表示 Cookie 不随着跨域请求发送,可以很大程度减少 CSRF 的攻击,但是该属性目前并不是所有浏览器都兼容。

验证 Referer

对于需要防范 CSRF 的请求,我们可以通过验证 Referer 来判断该请求是否为第三方网站发起的。

Token

服务器下发一个随机 Token,每次发起请求时将 Token 携带上,服务器验证 Token 是否有效。

点击劫持

什么是点击劫持?如何防范点击劫持?

点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,并将 iframe 设置为透明,在页面中透出一个按钮诱导用户点击。

对于这种攻击方式,推荐防御的方法有两种。

X-FRAME-OPTIONS

X-FRAME-OPTIONS 是一个 HTTP 响应头,在现代浏览器有一个很好的支持。这个 HTTP 响应头 就是为了防御用 iframe 嵌套的点击劫持攻击。

该响应头有三个值可选,分别是

  • DENY,表示页面不允许通过 iframe 的方式展示
  • SAMEORIGIN,表示页面可以在相同域名下通过 iframe 的方式展示
  • ALLOW-FROM,表示页面可以在指定来源的 iframe 中展示

JS 防御

对于某些远古浏览器来说,并不能支持上面的这种方式,那我们只有通过 JS 的方式来防御点击劫持了。

<head><style id="click-jack">html {display: none !important;}</style>
</head>
<body><script>if (self == top) {var style = document.getElementById('click-jack')document.body.removeChild(style)} else {top.location = self.location}</script>
</body>

以上代码的作用就是当通过 iframe 的方式加载页面时,攻击者的网页直接不显示所有内容了。

中间人攻击

什么是中间人攻击?如何防范中间人攻击?

中间人攻击是攻击方同时与服务端和客户端建立起了连接,并让对方认为连接是安全的,但是实际上整个通信过程都被攻击者控制了。攻击者不仅能获得双方的通信信息,还能修改通信信息。

通常来说不建议使用公共的 Wi-Fi,因为很可能就会发生中间人攻击的情况。如果你在通信的过程中涉及到了某些敏感信息,就完全暴露给攻击方了。

当然防御中间人攻击其实并不难,只需要增加一个安全通道来传输信息。HTTPS 就可以用来防御中间人攻击,但是并不是说使用了 HTTPS 就可以高枕无忧了,因为如果你没有完全关闭 HTTP 访问的话,攻击方可以通过某些方式将 HTTPS 降级为 HTTP 从而实现中间人攻击。

安全防范知识点 -- CSRF相关推荐

  1. CSRF跨站点伪造请求攻击之——CSRF钓鱼添加管理员账号及安全防范

    CSRF钓鱼添加管理员账号及安全防范 目录 CSRF钓鱼添加管理员账号及安全防范 本地网络设备 CSRF 攻击 CSRF 无需浏览器案例 burp 添加管理员账号 小结 CSRF 蠕虫模型 同域内 C ...

  2. 前端知识点汇总、深入浅出

    一.JavaScript常考题 1.原始(Primitive)类型 涉及面试题:原始类型有哪几种?null 是对象吗? 7种原始: boolean 布尔值 null 空值 undefined 未定义 ...

  3. T-SQL笔记3:事务、锁定和并发

    T-SQL笔记3:事务.锁定和并发 本章摘要 1:事务 1.1:显式事务 1.2:使用DBCC OPENTRAN显示最早的活动事务 2:锁定 2.1:查看锁的活动 3:并发影响及隔离级别 3.1:并发 ...

  4. C#笔记24:善用Visual Studio

    C#笔记24:善用Visual Studio 1:调试的四个窗口 2:加快编码速度 3:加快编码速度 4:使用第三方工具丰富VS 5:VS2010中的工具 6:学会调试 1:调试的四个窗口 立即窗口: ...

  5. java环境安装包出现覆盖,请查收

    正文 先问小伙伴们一个问题,登录难吗?"登录有什么难得?输入用户名和密码,后台检索出来,校验一下不就行了."凡是这样回答的小伙伴,你明显就是产品思维,登录看似简单,用户名和密码,后 ...

  6. 干货来袭!java核心技术卷一pdf

    正文 先问小伙伴们一个问题,登录难吗?"登录有什么难得?输入用户名和密码,后台检索出来,校验一下不就行了."凡是这样回答的小伙伴,你明显就是产品思维,登录看似简单,用户名和密码,后 ...

  7. 一线互联网架构师筑基必备技能之Java篇,工作感悟

    前言 前段时间发放了学习资料给予自学java的同学们,自学虽好,但是架不住没有老师讲解重侧点(实际上许多培训班的老师也是水分多多,甚至无实战经验),今天我就抽空把java零基础入门(六个月)的学习重点 ...

  8. C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent

    C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent 本章概要: 1:终止状态和非终止状态 2:AutoResetEvent和ManualResetE ...

  9. 前端面试超全整理1( js 浏览器安全 性能)

    1.JS 基础面试题(一) 原始(Primitive)类型 涉及面试题:原始类型有哪几种?null 是对象嘛? 在 JS 中,存在着 6 种原始值,分别是: boolean null undefine ...

  10. java电商面试问题以及回答,帮你解决90%的问题!

    正文 先问小伙伴们一个问题,登录难吗?"登录有什么难得?输入用户名和密码,后台检索出来,校验一下不就行了."凡是这样回答的小伙伴,你明显就是产品思维,登录看似简单,用户名和密码,后 ...

最新文章

  1. 浏览器事件监听的方法
  2. 拉格朗日、傅里叶、黎曼、柯西、狄利克雷、勒贝格杨、拉贝泰勒,这首诗都包括全了
  3. 推荐一个好用的 Java 工具类库
  4. 一键实现变老变年轻——Windows 10 下部署PaddleGAN,带你感受从年少到白头的浪漫
  5. java基础(七) java四种访问权限
  6. linux:scp命令
  7. Linux指令not found
  8. RxJava学习入门
  9. leetcode - 392. 判断子序列
  10. mac怎么查看gitlab的注册邮箱_单位企业邮箱是什么?公司邮箱怎么申请注册?
  11. 兼容input 文件选择_「HTML5」FileAPI 文件操作实战
  12. 按键精灵_字符串提取
  13. 华为网络设备-生成树协议配置
  14. 浩顺 HS-320 打印机驱动
  15. linux下codelite使用教程,codelite 在 ubuntu linux 中的安装和使用
  16. 深度学习方法(十四):轻量级CNN网络设计——MobileNet,ShuffleNet,文末有思考
  17. 最简单斐波那契数列输出C语言
  18. 笛卡尔坐标变换: UVA1602
  19. redis如何查看版本号?
  20. web实现视频播放-服务端所需工作

热门文章

  1. Java根据模板生成PDF文件|添加盖章|添加水印
  2. 网络流24题 餐巾计划(费用流)
  3. jQuery练习t188,从0到1
  4. 文件及文件夹删除失败的解决方法
  5. 基于IDEA Plugin插件开发,撸一个DDD脚手架
  6. IE提示:无法打开匿名级安全令牌
  7. linux 网络速度非常慢,Linux认证:解决ubuntu8.10上网速度慢的问题
  8. [Nowcoder] 2021年度训练联盟热身训练赛第六场 Mini Battleship | 深搜 回溯 乱搞
  9. 我是一名自由职业白帽黑客
  10. 修改系统时区 /etc/localtime