前端安全-CSRF攻击,sql注入,点击劫持

447 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

本文开始讲述CSRF攻击,sql注入,点击劫持。

定义

CSRF(Cross Site Request Forgery),即跨站请求伪造。利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义进行非法操作

要点

1.用户已经登录了站点A,并在本地记录了cookie

2.在用户没有登出站点A的情况下(cookie生效情况下),访问了攻击者提供的引诱危险站点B(B站点要求访问站点A)

3.站点A没有做CSRF防御

打开用户站点A:http://localhost:3000/

此时评论显示:

图片

当用户访问了攻击者提供的站点B:http://localhost:4000/csrf.html

图片

此时再看下站点A的评论:

图片

可以看到站点A被攻击了。

下面看下攻击者是如何攻击的:

document.write(`      <form name="form" action="http://localhost:3000/updateText" method="post" target="csrf">        添加评论: <input type="text" name="text" value="CSRF评论。。" />      </form>      `)
var iframe = document.createElement('iframe')
iframe.name = 'csrf'
iframe.style.display = 'none'
document.body.appendChild(iframe)
setTimeout(function() {
    document.querySelector('form').submit();
},1000)

  从上面代码可以看出来,是在iframe中加了form表单,调用站点A的评论接口,然后iframe隐藏到body中,做到静默处理,让用户无感知。

CSRF攻击的危害

  1. 盗取用户资金
  2. 冒充用户发帖背锅
  3. 损害网站声誉
  4. ...

防御手段

  1. 禁止第三方网站带cookie,存在兼容性问题
  2. 验证referer
  3. 验证码

点击劫持

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

首先此时的评论处是这个评论:

图片

假如网页上有个漂亮小姐姐,你忍不住想看小姐姐的最新动态

图片

你点击了最新动态,此时再看下评论处的显示。

image.png

直接变成了好评。

看下攻击者怎么做的,分析下这个诱惑站点的dom

image.png

可以看出,是加了一个隐藏的iframe,iframe指向用户站点,并且将最新动态和点赞按钮重合了,这样点击最新动态就是点击了点赞按钮。

点击劫持防御手段

设置X-FRAME-OPTIONS,有3个值。

1.DENY,表示页面不允许通过iframe的方式展示

2.SAMEORIGIN,表示页面可以在相同域名下通过iframe展示

3.ALLOW-FROM,表示页面可以在指定来源的iframe展示

sql注入:

在一个登录的网站,如果输入了这样的密码:直接就可以登录了。

图片

这是因为后端是直接把获取到的密码拼接起来,看下拼接后的sql语句

select * from sec.user where username='curry' and password = '1' or '1' = '1' 

这样不论输入什么,1 =1 总为真,就能登录上去了。

防御手段:

1.查询语句使用数据库提供的参数化查询接口,例如node中的mysqljs库的query方法中的?占位符

2.严格控制数据库操作权限

3.后端代码对入库的特殊字符进行转义