关于Web安全漏洞的心得及解决方案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于Web安全漏洞的心得及解决方案

赵铁甲2010-9-23 这两天在解决安徽Web项目的安全漏洞时遇到一些以前没有考虑的问题,但通过查阅一些资料,最后还是基本解决了问题。现在将在安全漏洞解决过程中的一些心得做下整理。

1.常见的安全漏洞

⏹SQL注入

⏹跨站脚本

⏹PHP错误泄露系统信息

⏹日志等信息文件泄露

⏹服务器目录列表泄露

⏹未捕获异常泄露系统信息

2.漏洞扫描工具可能扫描出的不确定漏洞

⏹系统目录泄露

⏹使用默认目录

⏹存在邮箱地址泄露

⏹存在无效链接

由于扫描工具给出的解释不太详细加之我们对Web安全的积累较少,对于这些漏洞存在的隐患是如何被利用还无法获知。所以暂时认为是不确定漏洞。

以下是我对以上漏洞的理解及其解决方案说明。

3.SQL注入

SQL注入是指黑客通过Web输入特殊字符,从而构建与我们程序预期不同的SQL语句,以达到特殊目的。

3.1. 引发原因

在我们的项目中SQL语句都是通过字符串拼接完成的,字符串有引号匹配的问题,如果不加以处理,黑客就可利用这种字符串匹配关系实现特殊的SQL语句。

3.2. 实例

3.2.1.注入方式1(轻微)

以上是一个简单的FleaPHP的action。其功能是通过获取用户的输入name,来查询数据。

用户输入:a' OR 1=1 OR rowid='2。产生的SQL语句就是:

这样就会把整个数据取出来。

3.2.2.注入方式2(绕过登陆)

以上是一个简单的登陆验证Action。登陆名和密码由用户输入。用用户名和密码作为条件查询,如果存在则认为登陆成功。

用户输入:

用户名:a' OR 1=1 OR (rowid='1

密码:a') OR rowid='1

这时候产生的SQL语句是:

这样用户就绕过了登陆验证。

3.2.3.注入方式3(可能产生致命后果)

在3.2.1中实例中,如果用户输入改为:

产生的SQL语句是:

而且刚好你的数据库驱动直接采用query方式处理。那后果就是会将整个数据表清除。

3.3. 解决方案

3.3.1.输入过滤

SQL注入利用的是字符串的单引号和双引号匹配关系实现攻击的。因此我们在用户输入端做数据过滤就可避免。

其原理是对单双引号做转义,需要注意的是这种转义需要与数据库的转义规则相关。

3.3.2.针对FleaPHP的临时补丁

针对目前的情况,我写了一个临时方法来过滤输入。如下(这段代码在附件中有)

在FleaPHP的入口文件中,在FLEA::runMVC()之前调用secureGlobals函数。可以转义用户输入的单双引号,避免了以上提到的几种SQL注入漏洞。

对于其他非单一入口语言,就只能在所有接收用户输入的地方做输入过滤。

注意:输入过滤不单要在有用户输入窗口的文件中处理,所有有GET和POST的地方都要处理,因为我们还要考虑到用户有可能会篡改url来达到某种目录。

4.跨站脚本攻击

跨站脚本是指用户通过在连接地址中携带script脚本代码或是flash等实现的攻击。

4.1. 实例

以上是一个FleaPHP简单的action和一个模板文件。

4.1.1.攻击方式1(嵌入