网盾科技IT教育,只培训技术精英
全国免费咨询电话: 15827351614
常见web漏洞有哪些?(上)

知己知彼,百战不殆。企业信息化的过程中,Web业务的迅速发展吸引了黑客们的热切关注,那么常见web漏洞有哪些呢?

1. cookie重要性

cookie是浏览器用来判断用户登录状态的。一旦cookie被窃取,相当于别人不用你的用户名和密码,就已经登录了你的个人网站。

2. 同源策略

没有同源策略的危害

早期的浏览器,没有同源策略。不同域名的javascript可以相互访问cookie。

假设这么一种情形,你登录了某银行网站,没有关闭,就访问了另一个病毒网站,这个网站的javascript读取了你银行网站的cookie,就相当于登陆了你的网上银行。

所以现在浏览器普遍都设置了同源策略,即:不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。

跨域资源共享

同时,在实际开发时,我们经常会碰到需要用javascript异步请求不同域名服务器的接口。这时候服务器可以设置一个白名单,允许指定域名的脚本,访问本服务器。这种方法叫做"跨域资源共享"(Cross-origin resource sharing)。

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。比如在b.com里面添加响应头声明允许a.com的访问,代码:

 

Access-Control-Allow-Origin: http://a.com

1

然后a.com就可以用ajax获取b.com里的数据了。

 

3. XSS攻击

攻击方法:

受同源策略影响,不同域名的的客户端脚本无法相互访问cookie。那么我们可不可以把恶意脚本,注入到原网站中,从而获取cookie呢?这就是xss(cross site scripting)攻击的思路。

这种攻击一般出现在允许用户自定义输入的输入框中,比如评论,博客等等。

防御方法:

 

用cookie的HttpOnly属性,加上了这个属性的cookie字段

用户输入框,加转义

4. CSRF攻击

攻击方法:

CSRF,全称跨站请求伪造(Cross Site Request Forgery)。

CSRF,不直接盗取cookie,而是诱骗用户在不关闭浏览器或退出登录的情况下,请求恶意网站的url,则相当于发出了身份认证后的请求,可能会执行一些用户不想做的敏感操作。

目标网站:www.webA.com

恶意网站:www.webB.com

转账功能链接:

http://www.webA.com/transport?account=abc&total=500

恶意网站www.webB.com某CSRF页面:

 

<script>

new Image().src=’http://www.webA.com/transport?account=abc&total=500’;

</script>

诱骗受害用户访问恶意网站CSRF页面

这种攻击方式,要求恶意网站知道转账功能的链接参数(比如转账功能链接)。

防御方法:

防护csrf的措施虽然很多,但归根到底就是一条:在客户端提交请求时增加伪造随机数。使得链接请求参数不可预测。

 

Token要足够随机–只有这样才算不可预测

Token是一次性的,即每次请求成功后要更新Token–这样可以增加攻击难度,增加预测难度

Token要注意保密性–敏感操作使用post,防止Token出现在URL中

5. SQL 注入

攻击方式:

由于程序中对用户输入检查不严格,用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

SQL注入的本质是对于输入检查不充分,导致SQL语句将用户提交的非法数据当作语句的一部分来执行。

SQL注入漏洞,就是将用户可控的数据拼接进了SQL语句中,一起提交到了数据库执行。

攻击者通过注入语句,改变SQL语句执行逻辑,通过控制部分SQL语句,攻击者可以查询数据库中任何自己需要的数据,利用数据库的一些特性,可以直接获取数据库服务器的系统权限。

防御方式:

防止 SQL 注入主要是不能允许用户输入的内容影响正常的 SQL 语句的逻辑,

 

严格限制Web应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度的减少注入攻击对数据库的危害

 

后端代码检查输入的数据,对进入数据库的特殊字符(’,",,<,>,&,*,; 等)进行转义处理,或编码转换。

 

所有的查询语句建议使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中,即不要直接拼接 SQL 语句。

 

在应用发布之前建议使用专业的 SQL 注入检测工具进行检测,以及时修补被发现的 SQL 注入漏洞。网上有很多这方面的开源工具,例如 sqlmap、SQLninja 等。

 

避免网站打印出 SQL 错误信息,比如类型错误、字段不匹配等,把代码里的 SQL 语句暴露出来,以防止攻击者利用这些错误信息进行 SQL 注入。

 

不要过于细化返回的错误信息,如果目的是方便调试,就去使用后端日志,不要在接口上过多的暴露出错信息。