SQL注入式攻击技术在ASP.NET动态网站开发的应用研究

时间:2022-08-05 11:48:04

SQL注入式攻击技术在ASP.NET动态网站开发的应用研究

摘 要 本文从什么是SQL注入式攻击入手,以动态网站开发中用户登陆功能为例探讨了有关SQL注入式攻击的原理,给出了相应的防范措施,并对如何保证软件开发中数据的安全问题提出了积极的意见和建议。

关键词 SQL注入攻击;查询;数据安全

中图分类号:TP393 文献标识码:A 文章编号:1671-7597(2014)17-0057-01

1 SQL注入式攻击简介

所谓SQL注入式攻击,就是攻击者把SQL命令插入到页面表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在动态网站开发中用户登陆功能是最常见的。如果编程者在代码编写过程中未考虑到SQL注入式攻击问题,很有可能给攻击者一个可乘之机。如何在用户登陆功能模块开发中防范SQL注入式攻击呢,下面举例来说。

2 登陆功能的实现

用户登陆一般是指在一个登陆页面如LOGIN.ASPX中输入一个用户名和密码,然后将输入的数据与后台数据库表中的用户名密码相比较,如果二者都正确方可完成登陆功能。有任意一个不匹配则不能登陆成功。这里就涉及一个SQL查询命令。

在很多初学者的网站开发中,常常在登陆按扭中这样完成此功能,代码如下:

{ SqlConnection strcon = new SqlConnection();

strcon.ConnectionString = “Data Source=.;Initial Catalog=StuSys;User ID=sa;Password=123456”;

strcon.Open();

SqlCommand cmd = new SqlCommand(“select * from Admin where name=’” + TextBox1.Text + “’and password=’” + TextBox2.Text + “’”, strcon);

SqlDataReader dr = cmd.ExecuteReader();

if (dr.Read())

{

Session[“name”] = TextBox1.Text;

Response.Redirect(“frontindex.aspx”);

}

else

Response.Write(“alert(‘用户名或密码错误’);”);

strcon.Close();

}

看似此程序完全正确,功能实现。但是这里有一句select * from Admin where name='" + TextBox1.Text + “’and password=’” + TextBox2.Text + “’”查询命令则就存在一个BUG,熟练掌握SQL语句的黑客就能利用SQL中的单引号和逻辑关系与运算符来实现欺诈的目的。

3 SQL注入式攻击在用户登陆模块中的攻击原理

在登陆功能中,如果操作者按常规输入用户名和密码就不会出现问题,但是如果操作者在两个文本框输入中各输入了特殊的字符串,结果就不得而知了。

比如,操作者在用户名中输入了‘a’ or 1=’1’,在密码中也输入类似的字符串,代码中的SELECT 语句就变成

select * from admin where name=’a’ or 1=’1’ and password=’b’ or 1=’1’

其中name='a' or 1='1' 永远成立,此时无论将输入的用户名换为什么。同理密码框中也是如此。

这样的操作使得select总有结果返回。不知觉得的dr.Read()为真值,从而操作者轻松地登陆到了前台或是后台的主页面。

实际上,由于变化了的SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

4 SQL注入式攻击的防范

要防止应用被SQL注入式攻击闯入并不是一件特别困难的事情,只要在WEB页面中将输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。

如下所示,在上述代码中去掉连字符AND,将两部分分段进行逻辑判断。

{SqlConnection strcon = new SqlConnection();

strcon.ConnectionString = “Data Source=.;Initial

Catalog=StuSys;User ID=sa;Password=123456”;

strcon.Open();

SqlCommand cmd = new SqlCommand(“select * from

Admin where name=’” + TextBox1.Text + “’”, strcon);

SqlDataReader dr = cmd.ExecuteReader();

if (dr.Read())

{

if (dr[“password”].ToString != TextBox2.Text)

Response.Write(“alert(‘密码错误’);”);

else

{

Session[“name”] = TextBox1.Text;

Response.Redirect(“frontindex.aspx”);

}

}

else

Response.Write(“alert(‘用户名错误’);”);

strcon.Close();

}

这样,分层判断,即便读出了用户名,在密码的判断中,如果密码输入不正确就进入不了后台主页了,防止了非法入侵。

当然这仅是一种防止SQL注入式攻击的方法,在.NET开发中,作者在实现用户登陆功能时还可以利用加密,存储过程、参数调用、检查提取数据的查询所返回的记录数量及控件较验等功能来防止SQL注入式攻击。

5 小结

SQL注入式攻击一般是黑客非法侵入系统的常见方式,开发者只有了解有关SQL注入式攻击的技术相关要求,及防范措施,才能在开发中灵活防范,以保证客户数据的安全。

参考文献

[1]侯燕.基于访问SQL Server数据库的安全性研究[J].电脑与信息技术,2004.

[2]吴成茂.分布式图书馆管理信息系统[D].电子科技大学,2006.

作者简介

夏德宏,硕士研究生,江西水利职业学院(原江西省水利水电学校),讲师。

上一篇:校园网络信息平台设计研究 下一篇:ARINC659总线的同步机制研究