文档介绍:基于SQL的Web系统安全防范——SQL注入漏洞
攻击研究及防范措施
SQL-Based Web System Security——Structured Query Language Injection Leak Attack Study And Defense Measure
摘要:在当今的数字世界中,连接的同时,保护网络和计算机系统的安全变得越来越困难。病毒、木马、后门、蠕虫等攻击层出不穷,虚假网站的钓鱼行为也让警惕性不高的公众深受其害。据有关部门统计,2008年一季度,我国有15万台主机被植入木马,网站篡改数量迅速增加,预计已达5835个,其中政府网站达484个,每月564次的安全事件报告。为了减轻信息泄露及系统攻击带来的风险,企业和机构开始对自己的系统进行渗透性测试,找出其中存在的漏洞和安全隐患。本文通过对目前最流行的SQL注入漏洞攻击的过程做了逐一的分析, 并提出了检测方法和防范措施。
关键字:SQL注入漏洞攻击脚本攻击 SQL注入点检测防范模型有害代码
SQL注入(SQL Injection)漏洞攻击是目前网上最流行最热门的黑客脚本攻击方法之一,那什么是SQL注入漏洞攻击呢?它是指黑客利用一些Web应用程序(如:网站、论坛、留言本、文章发布系统等)中某些存在不安全代码或SQL语句不缜密的页面,精心构造SQL语句,把非法的SQL语句指令转译到系统实际SQL语句中并执行它,以获取用户名、口令等敏感信息,从而达到控制主机服务器的攻击方法。
1. SQL注入漏洞攻击原理
1. 1 SQL注入漏洞攻击实现原理
SQL(Structured Query Language)是一种用来和数据库交互的语言文本。SQL注入的攻击原理就是攻击者通过Web应用程序利用SQL语句或字符串将非法的数据插入到服务器端数据库中,获取数据库的管理用户权限,然后将数据库管理用户权限提升至操作系统管理用户权限,控制服务器操作系统,获取重要信息及机密文件。
SQL注入漏洞攻击主要是通过借助于HDSI、NBSI和Domain等SQL注入漏洞扫描工具扫描出Web页面中存在的SQL注入漏洞,从而定位SQL注入点,通过执行非法的SQL语句或字符串达到入侵者想要的操作。代码为例,说明一下SQL 注入攻击的实现方法。
SqlConnection nwConn = new SqlConnection((string)
tings["DBconnStrings"]);
string queryStr = "SELECT userid, userpwd, username,type FROM users where userid='" + + "'";
DataSet userSet = new DataSet();
SqlDataAdapter userAdapter = new SqlDataAdapter(queryStr, nwConn);
(userSet, "Users");
Session["UserID"] = ();
Session["type"] = ();
("/Myweb/admin/");
从上面的代码中可以看出,程序在与数据库建立连接得到用户数据之后,,没有进行任何的过滤和处理措施, 直接用来构造SQL 语句, 其危险系数是非常高的, 攻击者只要根据SQL 语句的编写规则就可以绕过身份验证,从而达到入侵的目的。
1. 2 SQL注入漏洞攻击分析
SQL注入可以说是一种漏洞,也可以说是一种攻击。当程序中的变量处理不当,没有对用户提交的数据类型进行校验,编写不安全的代码,构造非法的SQL语句或字符串,都可能产生这个漏洞。
例如Web系统有一个login页面,这个login页面控制着用户是否有权访问,要求用户输入一个用户名和口令,连接数据库的语句为:
“select * from users where username = 'username' and password = 'password'”
攻击者输入用户名为aa or 1=1口令为1234 or 1=1之类的内容。我们可以看出实际上攻击者并不知道真正的用户名、口令,该内容提交给服务器之后,服务器执行攻击者构造出的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:
“select * from