十年专注于品牌网站建设 十年专注于品牌网站建设,低调、有情怀的网络应用服务商!
南昌百恒网络微信公众号 扫一扫关注
小程序
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络微信小程序

百恒网络

南昌百恒网络

防Sql注入专业知识--sql注入的危害及防治

百恒网络 2012-01-06 1273

Web SQL注入攻击的危害性

Web安全纷繁复杂,危害最严重的当属SQL注入。SQL Injection,中文名称为“SQL 注入”是一种数据库攻击手段,也是WEB应用程序漏洞存在的一种表现形式,它的实际意义就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。

SQL Injection 的主要形式是,直接将代码插入与 SQL 命令串联并执行的用户输入变量中,间接的将恶意代码注入要在表中存储或作为元数据存储的字符串,在存储的字符串随后串连到一个动态 SQL 命令中时,执行该恶意代码。基本的攻击是提前终止文本字符串,然后追加一个新的命令。由于插入的命令可能在执行前追加其他字符串,因此攻击者将用注释标记“‑‑”来中止注入的字符串。执行时,此后的指令将被忽略.

SQL Injection 攻击技术就起本质而言,它利用的工具是SQL的语法,针对的是应用程序开发者编程中的漏洞,当攻击者能操作数据,向应用程序中插入一些SQL语句时,SQL Injection攻击就发生了。实际上,SQL Injection攻击是存在于常见的多连接的应用程序中的一种漏洞,攻击者通过在应用程序预先定义好的查询语句结尾加上额外的SQL语句元素,欺骗数据库服务器执行非授权的任意查询。这类应用程序一般是Web Application,它允许用户输入查询条件,并将查询条件嵌入SQL 语句中,提交到数据库中执行。通过构造畸形SQL语句攻击者能够获取额外的信息数据。

就风险而言,SQL Injection攻击也是位居前列,和缓冲区溢出漏洞相 比,其优势在于能够轻易的绕过防火墙直接访问数据库,甚至能够获得数据库所在的服务器的访问权限。在某些环境下,SQL Injection 漏洞的风险要高过

其他所有的漏洞。SQL Injection攻击利用的是SQL 语法,这使得这种攻击具有广泛性。特点鲜明:

隐蔽性强

利用Web漏洞发起对WEB应用的攻击纷繁复杂,包括SQL 注入,跨站脚本攻击等等,一个共同特点是隐蔽性强,不易发觉,因为一方面普通网络防火墙是对HTTP/HTTPS全开放的,另一方面,对Web应用攻击的变化非常多,传统的基于

特征检测的IDS对此类攻击几乎没有作用。

攻击时间短

可在短短几秒到几分钟内完成一次数据窃取、一次木马种植、完成对整个数据库或Web服务器的控制,以至于非常困难作出人为反应。

危害性大

南昌网站建设公司百恒网络认为目前几乎所有银行,证券,电信,移动,政府以及电子商务企业都提供在线交易,查询和交互服务。用户的机密信息包括账户,个人私密信息(如身份证),交易信息等等,都是通过Web存储于后台数据库中, 这样,在线服务器一旦瘫痪,或虽在正常运行,但后台数据已被篡改或者窃取, 都将造成企业或个人巨大的损失。据权威部门统计,目前身份失窃(identity theft)已成为全球最严重的问题之一。

非常严重的有形和无形损失

目前,包括政府以及很多大型企业尤其是在国内外上市的企业, 一旦发生这类安全事件,必将造成人心惶惶,名誉扫地,以致于造成经济和声誉上的巨大损失,即便不上市,其影响和损失也是不可估量的。

防SQL注入的例子

Asp程序

关于Asp程序防Sql注入,南昌网络公司百恒网络建议:强制类型转换,下为过滤整个整形数据变量

nId = cint(request("id"))

sql = "select * from user where id=" + cstr(nId)

Asp.NET程序

利用参数方式查询和SqlParameter参数,来杜绝SQL 注入型式。

strUid = Request.QueryString["uid"].Trim();

strSql = "SELECT * FROM [users] WHERE [uid]=@uid";

sqlParameter = new SqlParameter("@uid", SqlDbType.VarChar);

sqlParameter.Value = strUid;

sqlCommand.Parameters.Add(sqlParameter);

sqlDataReader = sqlCommand.ExecuteReader();

strUid = Request.QueryString["uid"].Trim();

strSql = "SELECT * FROM [users] WHERE [uid]=@uid";

sqlCommand = new SqlCommand(strSql, sqlConnection);

sqlParameter = new SqlParameter("@uid", SqlDbType.VarChar);

sqlParameter.Value = strUid;

sqlCommand.Parameters.Add(sqlParameter);

sqlDataReader = sqlCommand.ExecuteReader();

strUid = Integer.Parse(Request.QueryString["uid"].Trim());

strSql = "SELECT * FROM [users] WHERE [uid]=@uid";

sqlCommand = new SqlCommand(strSql, sqlConnection);

sqlParameter = new SqlParameter("@uid", SqlDbType.Int);

sqlParameter.Value = strUid;

sqlCommand.Parameters.Add(sqlParameter);

sqlDataReader = sqlCommand.ExecuteReader();

Dim SSN as String = Request.QueryString("SSN")

Dim cmd As new SqlCommand("SELECT au_lname, au_fname FROM authors

WHERE au_id = @au_id")

Dim param = new SqlParameter("au_id", SqlDbType.VarChar)

param.Value = SSN

cmd.Parameters.Add(param)


400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络小程序

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
售后服务 售后服务
 
备案专线 备案专线
 
×