常见的漏洞有: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 攻击
DoS 攻击全称拒绝服务(Denial of Service),简单的说就是让一个公开网站无法访问,而 DDoS 攻击(分布式拒绝服务 Distributed Denial of Service)是 DoS 的升级版。这个就完全属于后端的范畴了。
原因
攻击者不断地提出服务请求,让合法用户的请求无法及时处理,这就是 DoS 攻击。
攻击者使用多台计算机或者计算机集群进行 DoS 攻击,就是 DDoS 攻击。
解决方案
防止 DDoS 攻击的基本思路是限流,限制单个用户的流量(包括 IP 等)。
- 设置高性能设备
- 要保证网络设备不能成为瓶颈,因此选择路由器、交换机、硬件防火墙等设备的时候要尽量选用知名度高、口碑好的产品。再就是假如和网络提供商有特殊关系或协议的话就更好了,当大量攻击发生的时候请他们在网络接点处做一下流量限制来对抗某些种类的DDoS攻击是非常有效的。
- 带宽得保证
- 网络带宽直接决定了能抗受攻击的能力,假若仅仅有10M带宽的话,无论采取什么措施都很难对抗现在的SYN Flood攻击。所以,最好选择100M的共享带宽,当然是挂在1000M的主干上了。
- 不要忘记升级
- 在有网络带宽保证的前提下,请尽量提升硬件配置,要有效对抗每秒10万个SYN攻击包。而且最好可以进行优化资源使用,提高web server 的负载能力。
- 异常流量的清洗
- 通过DDoS硬件防火墙对异常流量的清洗过滤,通过数据包的规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等顶尖技术能准确判断外来访问流量是否正常,进一步将异常流量禁止过滤。
- 考虑把网站做成静态页面
- 把网站尽可能做成静态页面,不仅能大大提高抗攻击能力,而且还给黑客入侵带来不少麻烦,最好在需要调用数据库的脚本中,拒绝使用代理的访问,经验表明,使用代理访问你网站的80%属于恶意行为。
- 分布式集群防御
- 这是目前网络安全界防御大规模DDoS攻击的最有效办法。分布式集群防御的特点是在每个节点服务器配置多个IP地址,并且每个节点能承受不低于10G的DDoS攻击,如一个节点受攻击无法提供服务,系统将会根据优先级设置自动切换另一个节点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态,从更为深度的安全防护角度去影响企业的安全执行决策。
- IP轮询技术
- 对稳定性、流畅性以及安全性上要求较高的业务,用户遭受 DDoS 攻击且达到一定峰值时,系统通过 IP 轮询机制,将从IP 池中灵活调取一个新的 IP 充当业务 IP,使攻击者失去攻击目标,以此保证业务在 DDoS 的攻击下正常运转。
- BGP高防IP
- 当用户应用 BGP 高防 IP 且配置转发规则和域名回源后,此时所有的访问流量都将流经 BGP 高防 IP 集群,通过端口协议转发的方式(支持网站业务和非网站业务)将访问流量转发至源站,同时攻击流量将在 BGP 高防 IP 集群进行清洗和过滤,只会将正常业务流量返回至源站,从而确保源站业务的稳定。
- 运营商过滤
- 针对反射放大类攻击,都有相同的特点,可以直接在运营商侧进行过滤,不用将流量流入抗D设备,从而使防御与反射放大类压制更有效果。本不存在放大效果,但基于其真实 IP 的原因,穿透性与隐蔽性都十分显著。
- 流量预压制
- 流量预压制/UDP 预压制等能力,从容应对新型的超大流量攻击。 (Memcached的5W倍反射)
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即可),这样攻击者上传此类文件也无法执行;
通过文件头信息严格验证文件格式,从上传功能开始防范。