如何斩断SQL注入式攻击的疯狂魔掌?

近年来,SQL注入式攻击一直如幽灵般困扰着众多企业,成为令企业毛骨悚然的梦魇。从八月中旬以来,新一轮的大规模SQL注入式攻击袭掠了大量的网站,连苹果公司的网站也未能幸免。这种猖獗的攻击向业界招示其日渐流行的趋势,黑客们也越来越喜欢这种可以渗透进入企业的基础架构和数据库资源的攻击方式。 关于对付SQL注入攻击的方法已经有许多讨论,但是为什么还是有大量的网站不

近年来,SQL注入式攻击一直如幽灵般困扰着众多企业,成为令企业毛骨悚然的梦魇。从八月中旬以来,新一轮的大规模SQL注入式攻击袭掠了大量的网站,连苹果公司的网站也未能幸免。这种猖獗的攻击向业界招示其日渐流行的趋势,黑客们也越来越喜欢这种可以渗透进入企业的基础架构和数据库资源的攻击方式。

关于对付SQL注入攻击的方法已经有许多讨论,但是为什么还是有大量的网站不断地遭受其魔掌呢?安全研究人员认为,现在正是重新梳理最佳方法来对付大规模的SQL注入攻击的时候,从而减轻与注入攻击相关的风险。笔者在此介绍的这些方法未必是革命性的创举,但是又有多少企业真正按照要求全面地实施这些方法呢?

下面,我们将一一谈论这些方法:

使用参数化查询

企业应当制定并强化自行开发软件的安全编码指南,要求开发人员使用参数化查询来构建SQL查询,这样就可以将数据与代码区分开来。

对于多数SQL查询来说,开发人员需要指明某类标准,为此,就需要利用参数化查询,其实就是在运行时可传递的参数。参数化查询就是在SQL语句中有一个或多个嵌入参数的查询。这种将参数嵌入到SQL语句中的方法与动态构造SQL字符串相比,不易产生错误。下面我们看一个在.NET应用程序中使用参数化查询的例子。假设我们想给张三增加工资500元,可参考如下的代码。这些代码范例演示了参数化查询的使用,并展示了如何使用更新语句:

以下是代码片段:

通过利用SQL的更新命令,你可以更新记录。在上面的例子中,我们作了如下操作:创建并打开一个数据库链接;创建一个代表执行更新语句的数据库命令;使用EDBCommand 的ExecuteNonQuery()方法执行插入命令。

每一个参数都用一个EDBParameter对象指明。对于需要在SQL语句中指定的每一个参数来说,你需要创建一个EDBParameter对象,然后将值指派给这个对象。然后,将EDBParameter对象添加到EDBCommand命令的参数集中。

对于多数开发平台来说,应当使用参数化的语句而不是将用户输入嵌入到语句中。在许多情况下,SQL语句是固定的,每一个参数都是一个标量,而不是一个表。用户输入会被指派给一个参数。下面再给出一个使用Java和JDBC API的例子:

以下是代码片段:

PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE USERNAME=? AND PASSWORD=?");

prep.setString(1, username);

prep.setString(2, password);

prep.executeQuery();

笔者用这些例子只是想告诉开发人员,应当确保在查询数据库之前对输入进行净化。要保障用户输入到网站的内容就是你正要查找的数据类型,所以说,如果你正在寻找一个数字,就要努力保障这种输入一定是一个数字而非字符。

(责任编辑:安博涛)

顶一下
(2)
100%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
热点内容
图片资讯

监控之后是定位?信息安全如何坚守阵地

监控之后是定位?信息安全如何坚守阵地

棱镜门的爆发让全世界的人们知道,信息可能随时处于监控之下,必须拿起自主的数据安全...[详细]

浏览器数据安全东窗事发 企业安全如何

浏览器数据安全东窗事发 企业安全如何应对

上网现在已经成为一种习惯,而这种习惯正慢慢向企业蔓延。但是作为上网过程重要节点的...[详细]

顺畅访问局域网需设置Win7防火墙规则

顺畅访问局域网需设置Win7防火墙规则

小强在Windows 7系统的电脑上搭建WAMP环境后,发现在局域网中其他电脑不能访问。有朋...[详细]

MSN爆发“充值卡诈骗” 专家详解防护措

MSN爆发“充值卡诈骗” 专家详解防护措施

2011年11月25日,瑞星公司向广大MSN用户发布安全警告,近日网上爆发利用MSN进行的充值...[详细]

公民的“信息安全”,不是小问题

公民的“信息安全”,不是小问题

采写/本报记者吕林荫 日前,北京市丰台区检察院批捕了几个非法获取公民个人信息罪的犯...[详细]