一、XSS—跨站脚本攻击
跨站脚本攻击(cross site script
)
1、原理
恶意攻击者往web
页面插入恶意可执行网页脚本代码,当用户浏览该页时,嵌入其中web
里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其它侵犯用户安全隐私的目的。XSS
的攻击方式千变万化,但仍可大致分成几个类型:
2、非持久XSS(反射型XSS)
一般是通过给别人发送带有恶意脚本代码参数的URL
,当URL
地址被打开时,特有的恶意代码参数被html
解析,执行。
2.1、特点
- 即时性,不经过服务器存储,直接通过
HTTP
的GET
和POST
请求就能完成一次攻击,拿到用户隐私数据 - 攻击者需要诱骗点击
- 反馈率低,所以较难发现和响应修复
- 盗取用户敏感保密信息
2.2、如何防止
- web页面渲染的所有内容/数据都必须来自服务端
- 尽量不要从
URL
、document
(文档)、referrer
、document.forms
这种DOM API
中获取数据直接渲染 - 尽量不要使用
eval
、new function()
、document.write()
、window.setInterval()
、innerhtml
、document.setTimeout()
、document.createElement()
等执行字符串的方法 - 如果做不到以上几点,也必须对设计
DOM
渲染的方法传入的字符串参数做escope
转义 - 前端渲染的时候对任何的字段都需要做
escope
转义代码
3、持久性XSS(存储型XSS)
一般存在于form
表单提交等交互操作,如发帖留言、提交文本信息等。黑客利用XSS
漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰将其渲染执行。
3.1、条件
此攻击成功需同时满足以下条件:
POST
请求提交表单后端没做转义直接入库- 后端从数据库中取出数据没做转义直接输出前端
- 前端拿到后端数据没做转义直接渲染成
DOM
3.2、特点
- 持久性久,植入在数据库中
- 危害面广,甚至可以让用户机器变成
DDOS
攻击的肉鸡 - 盗取用户私密信息
- 基于字符集的XSS
- 基于Flash 的跨站XSS
- 未经验证的跳转XSS
二、CSRF—跨站请求伪造攻击
跨站请求伪造攻击(cross-site request forgery
)
1、原理
攻击者盗用了你的身份,以你的名义发送恶意请求。
以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账。
造成个人隐私泄露以及财产安全问题
可以理解为有一个小偷在你配钥匙的地方得到了你家的钥匙,然后拿着去你家想偷什么偷什么。
2、条件
完成CSRF
攻击必须有三种条件:
- 用户以及登陆了站点
A
,并在本地记录了cookie
- 用户在没有登出站点
A
的情况下(也就是cookie
生效的情况下),访问了恶意攻击者提供的引诱危险站点B
(B
要求访问A
)——(B
也可能为一个存在其他漏洞的可信任网站) - 站点
A
没有做任何CSRF
防御
3、预防CSRF
- 正确使用
GET
、POST
和cookie
- 在非GET请求中增加token
当正确使用GET和POST后,剩下的就剩在所有非GET请求中国增加随机数 - 验证码 token
三、SQL注入
1、原理
攻击者成功的向服务器提交恶意的SQL
查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。
举例: ' OR '1' = '1'
这是最常见的SQL
注入攻击,当我们输入如用户名admin
,然后密码输入 ' OR '1'='1'
的时候,我们在查询用户名和密码是否正确的时候,本来要执行的是 select * from user where username=' ' and password