您的当前位置:首页正文

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

2023-12-31 来源:意榕旅游网


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

赵铁甲 2010-9-23

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

1. 常见的安全漏洞

 SQL注入  跨站脚本

 PHP错误泄露系统信息  日志等信息文件泄露  服务器目录列表泄露  未捕获异常泄露系统信息

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

 系统目录泄露  使用默认目录  存在邮箱地址泄露  存在无效链接

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

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

3. SQL注入

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

3.1. 引发原因

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

错误!未指定书签。

东信北邮信息技术有限公司

第1页 共12页

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语句是:

错误!未指定书签。

东信北邮信息技术有限公司

第2页 共12页

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

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

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

产生的SQL语句是:

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

3.3. 解决方案

3.3.1. 输入过滤

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

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

3.3.2. 针对FleaPHP的临时补丁

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

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

错误!未指定书签。

东信北邮信息技术有限公司

第3页 共12页

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

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

4. 跨站脚本攻击

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

4.1. 实例

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

4.1.1. 攻击方式1(嵌入