SQL 注入
核心就是攻击者希望 web 服务器执行攻击者希望执行的 SQL 语句,从而对数据库中的数据进行增删改查
手段
将 sql 语句放入表单提交或者是 url 参数中传递给服务器,后端如果没有做输入校验直接将变量取出进行数据库操作则及容易中招
防御
-
限制 web 应用操作数据库的权限
-
不要直接拼接 SQL 语句
-
检查输入的数据格式是否符合预期
-
对特殊字符进行转译
XSS 攻击
攻击者希望用户的浏览器可以执行他的 JS 代码
存储型 XSS 攻击
存储型与反射型的区别就是,反射型只是服务器将用户的请求参数转手后返回给浏览器执行;而存储型则是服务器会将可以执行的 JS 代码存储到数据库中,后面查询时将脚本插入到返回的网页中给浏览器渲染
可以看一个简单的例子:
-
攻击这将 js 代码写入到评论中,提交给服务器
-
服务器将数据存储进数据库
-
这个时候又用户来查看这个评论,服务器从数据库中查询到评论内容,构建完整的网页返回给浏览器
-
浏览器渲染网页,中招!
反射型 XSS 攻击
-
攻击者将可以执行的 JS 代码通过 URL 参数放入一个链接中诱导用户去点击
-
web 服务器收到请求,没有进行特殊字符的过滤直接从请求中取出参数的值构造页面,然后返回给浏览器
-
浏览器解析并执行 js 代码,中招!
防御手段
-
不要相信用户的输入,对特殊字符进行转译
-
设置 cookie 的 HttpOnly 属性,禁止脚本访问用户 cookie
-
CSP(Content Security Policy)
CSP 内容安全策略:CSP 的本质就是建立一个白名单,告诉浏览器哪些外部资源可以被加载和执行。我们只需要配置规则,如何拦截是浏览器自己实现的。可以通过这种方式来尽量减少 XSS 攻击。
配置 CSP 的方式有两种:
- meta 标签
- 设置 HTTP Header:Content-Security-Policy
CSRF 跨站请求伪造
攻击者利用用户已经登陆的身份,在用户毫不知情的情况下进行一些操作。cookie 被泄露。
CSRF 攻击的条件
-
用户登陆受信任的网站 A 并且生成 cookie
-
在不登出 A 的情况下,访问危险网站 B
-
B 拿到 A 的 cookie(伪造 A 的身份)来发送请求
对于 cookie 不允许跨域访问,指的是,跨域的情况下 js 脚本是无法获取 cookie 的,但是不代表跨域的 http 请求无法携带 cookie
防御手段
-
给 cookie 设置 SameSite 属性,禁止跨域请求携带 cookie
-
验证 http 请求的 referer 字段。判断请求的来源是否是允许的
-
Token
浏览器可以在请求的时候在请求的接口中添加一个 token 参数,服务器收到请求之后验证这个 token 和 cookie 中的 token 是否一致一致的时候再允许请求。这样攻击者就需要在请求的时候构造这个 token 参数,而他可能无法构造一个带有 token 的完整的 URL
- 验证码
用户输入验证码才可以完成请求
注意:浏览器的同源策略是不能防御 CSRF 攻击的(对于简单请求不能防御,因为他不会发送预检请求,会直接携带 cookie 请求服务器,但是复杂请求是先会发送一个 OPTIONS 的预检请求,此时不会携带 cookie,只有服务器允许跨域之后才会携带,所以对于 CSRF 攻击有一定的防御作用),因为跨域请求依旧是可以发送出去而且可以正常被服务器接收以及处理,只不过返回的响应在没有设置正确的 Access-Control-的头部信息的情况下会被浏览器拦截
CSRF 攻击大多数都不会基于 ajax 请求,一般都是表单请求
OS 注入攻击
和 SQL 注入类似,只不过它是基于操作系统的。
通过 web 应用注入一些危险的 OS 命令,服务器在没有防范的情况下执行这些 OS 命令 rm -rf *
防御
-
后端对前端提交的内容进行校验
-
不要直接拼接命令
点击劫持
视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入到自己的网页中,并将 iframe 设置为透明,在页面中透出一个按钮诱导用户点击
原理
用户在登陆网站 A 的系统后,被攻击者诱惑打开第三方网站,而第三方网站通过 iframe 引入了 A 网站,用户在第三方网站中点击被修饰过的按钮,实际上点击的是 A 网站的按钮。
比如说在优酷上发布了一些视频,想让更多的人关注它,就可以通过点击劫持来实现。
防御
- X-Frame-Options
它是一个响应头,用于防止 iframe 嵌套的点击劫持
取值:
-
deny 禁止使用 iframe 加载该页面
-
same-origin 同源的页面可以使用 iframe 来加载该页面
-
allow-from 允许指定的域名使用 iframe 来加载该页面
URL 跳转漏洞
借用 url 跳转将使应用加载不安全的页面,从而导致安全问题
原理
将不安全的页面的 url 作为参数跟在用户信任的网站 url 的后面,点击之后经过服务器或者是浏览器解析之后跳转到恶意的页面
http://gate.baidu.com/index?act=go&url=http://t.cn/RVTatrd
http://qt.qq.com/safecheck.html?flag=1&url=http://t.cn/RVTatrd
http://tieba.baidu.com/f/user/passport?jumpUrl=http://t.cn/RVTatrd
实现方式
-
JS 跳转
-
meta 跳转
-
php header 跳转
防御
- referer 限制
如果确定 url 参数进入的来源,我们就可以通过该方式来实现安全限制,保证 url 的有效性,避免恶意用户生成自己的连接
网友评论