目录
背景知识
从互联网诞生之初起,无时无刻不存在网络攻击,其中XSS攻击和SQL注入攻击是网站应用攻击的最主要的两种手段,全球大约70%的网站应用攻击都来自XSS攻击和SQL注入攻击。此外,常用的网站应用攻击还包括CSRF、Session劫持等。
XSS 攻击
- 全称跨站脚本攻击 Cross Site Scripting
- 为了与重叠样式表 CSS 进行区分,所以换了另一个缩写名称 XSS
- XSS攻击者通过篡改网页,注入恶意的 HTML 脚本,一般是 javascript,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式
- XSS 攻击经常使用在论坛,博客等应用中。攻击者可以偷取用户Cookie、密码等重要数据,进而伪造交易、盗取用户财产、窃取情报等私密信息
防御措施
- 过滤一些特殊的字符,比如 javascript 脚本中的 <> 进行转移 <> 再进行存储,这样就能有效的进行 xss 攻击的预防
- 另外如果 cookie 中设置了 HttpOnly 属性,那么通过 js 脚本将无法读取到cookie 信息,这样也能有效的防止 XSS 攻击窃取 cookie 内容
SQL 注入
- SQL注入攻击指的是攻击者在 HTTP 请求中注入恶意 SQL 命令,服务器用请求参数构造数据库 SQL 命令时,恶意 SQL 被一起构造,并在数据库中执行,以便得到数据库中的感兴趣的数据或对数据库进行读取、修改、删除、插入等敏感的操作,从而导致数据被随意篡改。
- 但是 SQL注入 攻击,需要攻击者对数据库表有所了解才行,比如你的项目 开源 了,不小心公开了数据库的账号和密码;另外你的网站上线没有 关闭调试模式,有心者可以网站的根据错误回显可以猜测表结构;另外还有就是 盲注,也即是很多有心者会盲猜数据表结构,但是这种难度最大。
防御措施
SQL注入 可以通过预编译手段进行预防,绑定参数是最好的防 SQL 注入方法。现在流行的框架基本都实现了 SQL预编译和 参数绑定,恶意攻击的 SQL 会被当做 SQL 的参数,而不是 SQL 命令被执行。
# 正常获取用户信息的sql
select * from users where id=1
# sql注入了 1 or 1=1,就可以把用户表中的所有数据全部查出,导致数据泄露
select * from users where id=1 or 1=1
CSRF 攻击
CSRF 全称 Cross Site Request Forgery,跨站点请求伪造,攻击者通过跨站请求,以合法的用户身份进行非法操作,如转账交易、发表评论等。其核心是利用了浏览器 Cookie 或服务器的 Session 策略,盗取用户的身份信息
- 在打开 A网站 的情况下,另开 Tab页面 打开恶意 网站B,此时在 B页面 的 恶意意图 下,浏览器发起一个对 网站A 的 HTTP 请求
- 因为之前 A网站 已经打开了,浏览器存有 A网站 中的 Cookie 或其他用于身份认证的信息,这一次被 恶意意图 的请求,将会自动带上这些信息,这将会导致身份劫持,造成并非本人意愿的操作结果
防御措施
对应 CSRF攻击 的防御策略有:表单token、 验证码、Referer 检测 等