基于asp.net动态网站前台程序安全性设计的研究
2015-07-18殷茵马嫚红秦久明石范锋
殷茵 马嫚红 秦久明 石范锋
摘要:该文主要研究了基于asp.net动态网站前台程序设计中的SQL注入漏洞和XSS攻击漏洞,提出了在开发基于asp.net动态网站前台程序设计时防止SQL注入攻击和XSS跨站攻击的方法和措施。
关键词:SQL注入漏洞;XSS注入漏洞;防御;前台程序;安全性
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)12-0060-02
随着Internet发展,Web应用程序的应用越来越广泛,由于应用程序的运行环境的开放性,随之出现的安全性隐患和风险也越来越高,一些针对动态网站的攻击技术也“与时俱进”。目前常见的针对动态网站攻击行为主要有SQL注入攻击、XSS跨站脚本攻击等。
1 SQL注入攻击和防御
SQL注入攻击是指从客户端地址栏或网页的接口输入提交一些特殊的非法代码,让其注入到服务器端正常执行的业务SQL中去,从而改变SQL语句的原有逻辑,获取重要的敏感数据,绕过登录验证,甚至执行系统命令,上传后门文件等行为。由于SQL注入从正常Web端口访问,一般防火墙不会阻挡和警告,Web系统可能被入侵而长时间不会被发现。理论上只要是带有查询字符串变量参数的动态网页且此网页访问数据库,如果Web应用程序中没有对输入参数进行必要的合法检查和过滤,就有可能成为SQL注入攻击漏洞。
1.1 SQL注入点判断
URL查询参数为整数型,地址为:http://www.abc.com/News.aspx?NewId=1,可通过以下方法查看有没有SQL注入漏洞:
1)在地址栏中输入http://www.abc.com/News.aspx?NewId=1,运行异常;
2)在地址栏中输入http://www.abc.com/News.aspx?NewId=1 and 1=1,运行正常;
3)在地址栏中输入http://www.abc.com/News.aspx?NewId=1 and 1=2,运行异常;
可以判断存在SQL注入漏洞。
URL查询参数为字符串型,地址为:http://www.abc.com/News.aspx?NewId=1,可通过以下方法查看有没有SQL注入漏洞:
1)在地址栏中输入http://www.abc.com/News.aspx?NewId=1,运行异常;
2)在地址栏中输入http://www.abc.com/News.aspx?NewId=1 and ‘1=1,运行正常;
3)在地址栏中输入http://www.abc.com/News.aspx?NewId=1 and ‘1=2,运行异常。
可以判断存在SQL注入漏洞。
1.2 SQL注入攻击
利用SQL注入漏洞,通过在查询字符串参数加上特殊的Select查询语句可查看管理员表的信息。
1)获取管理员表名方法
http://www.abc.com/News.aspx?NewId=1 and 1=1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 from [表名],如正常执行,就可获取表名;
2)获取管理员表中字段名和字段值
http://www.abc.com/News.aspx?NewId=1 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 from [表名],如正常执行,就会在原来页面正常显示动态信息的地方显示上述对应的数字,然后将对应的数字换成猜测的字段名即可。
1.3 SQL注入防御
在开发Web应用程序时,查询字符串变量参数最好使用数值型,对输入的内容要进行必要的合法性检查验证,可根据查询语句参数的类型,如果是数值型可通过数据类型转换方法验证,如出错则跳转到出错页;如果是字符串型查询参数则应要过滤一些敏感的字符,并作为Command命令对象的参数值使用。应尽量使用Session传递参数,对查询字符串变量最好定义专用类或由空页处理后再转到相关的页面,处理方法如下述代码所示:
int i=0;
if (Request["NewsID"] != null)
{
try
{ i = int.Parse(Request["NewsID "].ToString());
Session["nid"] = i.ToString();
}
catch
{ Response.Redirect("~/Error.aspx");
}
if (i > 0)
{ Response.Redirect("~/NewsShow.aspx");
}
} else
{
Response.Redirect("~/Error.aspx");
}
2 XSS注入漏洞和防御
XSS即跨站脚本攻击,是指通过向Web页面里插入恶意脚本代码,当用户浏览该页时,嵌入其中脚本代码就自动执行,从而达到恶意用户的目的,例如,自动打开和发送有关页,盗取会话、cookie信息等。
2.1 XSS注入攻击
Web应用程序中假如有用户注册、留言等功能,如果没有对输入和输出的信息进行合法性验证和过滤就有可能成为XSS注入攻击点。
例如通过用户注册或留言向网站数据库中输入如下脚本代码:
alert('hello');
当用户打开含有此脚本的页面时,脚本就自动执行,打开另一网站的页面,并将保存在本地的此网站的Cookie发送过去。如果inputcookie.aspx的页面中含有接收cookie并存放到数据库的功能,就非法获取了用户的Cookie信息。inputcookie.aspx页面的代码如下:
if (Request.Cookies[0] != null)
{ string connstr = ConfigurationManager.ConnectionStrings["cookiename"].ConnectionString;
connstr = connstr +Server.MapPath( ConfigurationManager.ConnectionStrings["cookiedb"].ConnectionString);
string sqlstr = "insert into testtable(cookie) values(?)";
OleDbConnection conn = new OleDbConnection(connstr);
OleDbCommand comm = new OleDbCommand(sqlstr, conn);
OleDbParameter p = new OleDbParameter("@c", Request.Cookies[0].Value.ToString());
comm.Parameters.Add(p);
try
{
conn.Open();
comm.ExecuteNonQuery();}
catch
{ ; }
if (conn.State == ConnectionState.Connecting)
{ conn.Close();}}
2.2 XSS注入防御
Asp.net 1.1后页面具备了对表单自动检测是否存在XSS漏洞的能力,当提交如
string str = "123abc;";
str=str.Replace("", "b11");
str=str.Replace("
", "b12");
str=Server.HtmlEncode(str);
str=str.Replace( "b11","");
str=str.Replace("b12", "
");
Label1.Text = str;
在程序中,过滤掉敏感的html标签,例如:
、