SQL注入攻击与防御

什么是SQL注入
程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。

攻击者可以提交一段精心构造的数据库查询代码,根据返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

受影响的系统:对输入的参数不进行检查和过滤的系统。

简单的SQL注入实例
假设这么一个情景,一个网页的后台入口处需要验证用户名和密码,验证程序的SQL语句是这样写:
Select* fromadminwhereuser=‘TxtBox1.txt’andpass=‘TxtBox2.txt’
如果用户填写的用户名和密码都是: ‘abc’ or ‘1’=‘1’
那么将导致SQL语句是:
Select* fromadminwhereuser=‘abc’ or ‘1’=‘1’andpass==‘abc’ or ‘1’=‘1’
这条语句是永真式,那么攻击者就成功登陆了后台。这就是最简单的SQL注入方式。

SQL注入过程
(1).寻找可能存在SQL注入漏洞的链接
(2).测试该网站是否有SQL注入漏洞
(3).猜管理员帐号表
(4).猜测管理员表中的字段
(5).猜测用户名和密码的长度
(6).猜测用户名
(7).猜测密码

SQL注入的防范
由于SQL注入攻击是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以许多防火墙等都不会对SQL注入发出警报。而目前互联网上存在SQL注入漏洞的Web站点并不在少数,对此,网站管理员和Web应用开发程序员必须引起足够的重视。

SQL注入漏洞在网上极为普遍,通常是由于程序员对用户提交的数据和输入参数没有进行严格的过滤所导致的。

比如过滤逗号,单引号,分号等;如果select、delete、from、*、union之类的字符串同时出现多个的话,也要引起重视;最好对用户提交的参数的长度也进行判断。

防范SQL注入的另一个可行办法是摒弃动态SQL语句,而改用用户存储过程来访问和操作数据。这需要在建立数据库后,仔细考虑Web程序需要对数据库进行的各种操作,并为之建立存储过程,然后让Web程序调用存储过程来完成数据库操作。这样,用户提交的数据将不是用来生成动态SQL语句,而是确确实实地作为参数传递给存储过程,从而有效阻断了SQL注入的途径

PHP与SQL注入防御小例

下面的代码:PHP代码

if ($admin)    
{    
echo '登陆成功!';    
include('admin.php');    
}    
else    
{    
echo '你不是管理员,无法进行管理!';    
}    

我们的这个页是http://daybook.diandian.com/login.php,那么我们提交:http://daybook.diandian.com/login.php?admin=1,直接就是管理员了,直接进行管理。
如何避免上面的问题呢?首先,从php.ini入手,把php.ini里面的register_global =off,就是不是所有的注册变量为全局,那么就能避免了。但是,我们不是服务器管理员,只能从代码上改进了,那么我们如何改进上面的代码呢?我们改写如下:

PHP代码

$admin = 0; // 初始化变量    
if ($_POST['admin_user'] && $_POST['admin_pass'])    
{    
// 判断提交的管理员用户名和密码是不是对的相应的处理代码    
// ...    
$admin = 1;    
}    
else    
{    
$admin = 0;    
}    
if ($admin)    
{    
echo '登陆成功!';    
include('admin.php');    
}    
else    
{    
echo '你不是管理员,无法进行管理!';    
}    

那么这时候你再提交`http://daybook.diandian.com/login.php?admin=1`就不好使了。

这是实验室一个师姐之前做项目的一个小例子。当然还有对sql语句有四大句:select 、update、delete、insert,进行的防御。采用正则判断如果是这四大sql语句就提示用户非法操作,否则进行过滤处理请求。
关于sql注入还有很多防御方法,希望感兴趣的同学,一起讨论!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL注入攻击是一种利用输入的SQL代码进行非法操作的攻击方式。攻击者可以通过在输入框中注入恶意的SQL代码,从而绕过应用程序的认证和授权机制,对数据库进行各种操作,例如删除、修改、插入数据,甚至获取数据库中的敏感信息。 《SQL注入攻击防御第二版》是一本关于SQL注入攻击防御和应对策略的书籍。该书介绍了SQL注入攻击的原理、常见的攻击方式、实际案例以及相应的防御措施。 在防御SQL注入攻击时,我们可以采取以下一些措施: 1. 使用参数化查询或预编译语句:这种方式可以防止攻击者通过输入恶意的SQL代码来注入攻击。参数化查询使用占位符来代替输入的变量,预编译语句将SQL查询语句和变量分开进行处理,从而有效防止注入攻击。 2. 对输入进行过滤和验证:在接收用户输入时,可以对输入进行过滤和验证。例如,可以使用正则表达式或编码转换函数来过滤用户输入中的特殊字符,从而防止注入攻击。 3. 最小权限原则:数据库用户应该被赋予最小权限,在应用程序连接数据库时,使用具有最小权限的数据库用户,限制了攻击者对数据库的操作。 4. 定期更新和升级软件:应该及时更新数据库和应用程序的补丁,以修复已知的漏洞,提高系统的安全性。 5. 日志监控和异常检测:及时监控数据库操作日志,发现异常操作并进行相应的处理。可以通过设置数据库的审计功能、使用入侵检测系统等方式进行日志监控和异常检测。 通过了解并遵循上述防御措施,可以增强系统的安全性,有效地防范SQL注入攻击。《SQL注入攻击防御第二版》这本书将为读者提供更深入的理解和应对策略。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值