简介
本文介绍网站常见的一些安全漏洞。
常见的漏洞有:SQL 注入、越权操作、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、DDoS 攻击、JSON 劫持、暴力尝试、HTTP 报头追踪漏洞、信息泄露、文件上传格式校验。
SQL 注入
简介
SQL 注入就是通过给 web 应用接口传入一些参数来拼凑SQL语句,使服务器执行恶意的sql命令。
实例
sql = “select * from users where name=” + name;
上面的 SQL 语句目的是通过用户输入的用户名查找用户信息,因为由于 SQL 语句是直接拼接的,也没有进行过滤,所以,当用户输入 ” or ‘1’=’1′ 时,这个语句的功能就是搜索 users 全表的记录。
select * from users where name=” or ‘1’=’1′;
防御方案
- 绑定变量
- 检查数据类型
- 使用过滤函数
越权操作
平行越权漏洞
只要一个账户即可控制全站用户数据。当然这些数据仅限于存在漏洞功能对应的数据。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判断。
案例分析:删除帖子时没有判断当前用户是否有权限删除该帖子,导致其他用户的帖子也被删掉了。
垂直越权操作漏洞
基于角色的权限管理,又称为“垂直权限管理”。不同角色的权限有高低之分。高权限角色访问低权限角色的资源往往是被允许的,而低权限角色访问高权限角色的资源往往是被拒绝的。如果低权限角色获得了高权限角色的能力,那么就发生了“越权访问”。
跨站脚本攻击(XSS)
简介
XSS(Cross Site Scripting)的含义:恶意攻击者通过某些输入点往Web页面里插入脚本代码,当用户浏览页面或执行某种操作时,就会触发嵌入的脚本代码,从而实现恶意攻击。
分类
1.存储型XSS(Stored XSS)
存入了数据库,再取出来时导致的xss。
输入
输出
2.反射型XSS(Reflected XSS)
案例:在网址url后输入xss代码,如<script>alert(1)</script>,然后访问时导致html页面加载这段代码即可达到弹框效果
3.DOM型XSS(DOM Based XSS)其实也是反射型的一种
严格来说该xss也属于反射型,本文的例子其实也是dom based,是指修改页面的dom对象模型,从而达成攻击。
防御方案
1.输出过滤
跨站请求伪造(CSRF)
简介
CSRF(Cross-site request forgery)跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
发生原因
网站是通过cookie来识别用户的,当用户成功进行身份验证之后浏览器就会得到一个标识其身份的cookie,只要不关闭浏览器或者退出登录,以后访问这个网站会带上这个cookie。
- 1. 登录受信任网站A,并在本地生成Cookie。
- 2. 如果在用户登录访问网站A的同时访问了网站B,访问者在网站A的数据就会被B使用用户cookie假冒更新。
案例
假如某网银转账操作是以GET请求来完成:
http://www.mybank.com/Transfer.php?toBankId=11&money=1000
网站B,它里面有一段HTML的代码如下:
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
当我在网银cookie有效的情况下访问了网站B,那我的网银就莫名其妙的被转账了1000。。。
防御方案
- 二次验证
- 比如:对于转账、修改密码之类的敏感操作,不能仅通过cookie进行验证,要重新验证,比如:短信验证码、账号密码、人脸识别。
- 对请求的referer进行检测
- 添加随机token校验
DDoS 攻击
简介
DDoS 攻击的全称是:分布式拒绝服务(Distributed Denial of Service)。
DoS 攻击:攻击者不断地提出服务请求,让合法用户的请求无法及时处理 。
DDoS 攻击:攻击者使用多台计算机或者计算机集群进行 DoS 攻击。
DDos攻击的分类
DDos攻击可以分为两类:
- 域名攻击。比如:CC攻击(用代理服务器向受害服务器发送大量貌似合法的请求)。
- IP攻击。比如:用TCP、UDP去攻击。
域名攻击的解决方案
限流(对单个IP限制单位时间的请求次数)。
限流方式有:
- 购买云服务器的限流服务
- 自己开发限流工具(定时读取服务器的访问日志,如果有异常IP,把这个IP禁掉)
IP攻击的解决方案
IP攻击是无法直接防御的!因为是利用的TCP/IP协议进行攻击。
唯一的方法是:使用CDN,隐藏服务器真实IP。
JSON 劫持
简介
JSON 劫持(JSON Hijacking)是用于获取敏感数据的一种攻击方式,属于 CSRF 攻击的范畴。
原因
一些 Web 应用会把一些敏感数据以 json 的形式返回到前端,如果仅仅通过 Cookie 来判断请求是否合法,那么就可以利用类似 CSRF 的手段,向目标服务器发送请求,以获得敏感数据。
比如下面的链接在已登录的情况下会返回 json 格式的用户信息:
http://www.test.com/userinfo
攻击者可以在自己的虚假页面中,加入如下标签:
<script src="http://www.test.com/userinfo"></script>
如果当前浏览器已经登录了 www.test.com,并且 Cookie 未过期,然后访问了攻击者的虚假页面,那么该页面就可以拿到 json 形式的用户敏感信息,因为 script 标签会自动解析 json 数据,生成对应的 js 对象。然后再通过:
Object.prototype.__defineSetter__
这个函数来触发自己的恶意代码。但是这个函数在当前的新版本 Chrome 和 Firefox 中都已经失效了。
解决方案
- X-Requested-With 标识
- 浏览器 JSON 数据识别
- 禁止 Javascript 执行 JSON 数据
暴力尝试
简介
这个一般针对密码而言,弱密码(Weak Password)很容易被别人(对你很了解的人等)猜到或被工具暴力尝试。
解决方案
- 密码复杂度要足够大,也要足够隐蔽
- 限制尝试次数
HTTP 报头追踪漏洞
简介
HTTP/1.1(RFC2616)规范定义了 HTTP TRACE 方法,主要是用于客户端通过向 Web 服务器提交 TRACE 请求来进行测试或获得诊断信息。
当 Web 服务器启用 TRACE 时,提交的请求头会在服务器响应的内容(Body)中完整的返回,其中 HTTP 头很可能包括 Session Token、Cookies 或其它认证信息。攻击者可以利用此漏洞来欺骗合法用户并得到他们的私人信息。
防御方案
禁用 HTTP TRACE 方法。
信息泄露
简介
由于 Web 服务器或应用程序没有正确处理一些特殊请求,泄露 Web 服务器的一些敏感信息,如用户名、密码、源代码、服务器信息、配置信息等。
防御方案
- 应用程序报错时,不对外产生调试信息
- 过滤用户提交的数据与特殊字符
- 保证源代码、服务器配置的安全
文件上传格式校验
简介
黑客攻击网站还有一个常见的方式就是通过文件上传漏洞,比如网站上传图片的功能没有严格校验后缀名。黑客可以通过此功能上传一些脚本文件,上传成功后,通过请求这些脚本文件运行脚本中的功能达到攻击的目的。
那么如果验证了上传文件的后缀名就可以吗?实际上并不是,举例说我们知道页面引入script标签时src写啥都行,比如http://www.baidu.com/123.jpg,也是可以的,攻击者只需要把一个script文件后缀名改为jpg即可通过后缀验证,后面一路畅通。所以这就提到了验证文件的真实格式。如何验证,网上一大堆…
防御方案
设置php文件、jsp文件不可直接被访问(不知道php可以不,jsp放在WEB-INF即可),这样攻击者上传此类文件也无法执行;
通过文件头信息严格验证文件格式,从上传功能开始防范。
请先
!