您的位置:首页 > 数据库

SQL高级注入使用之储存过程

2010-08-29 10:26 344 查看
好险啊,幸亏我们做的网站源码还没有完全上传,幸亏现在我们的网站用的数据库还是虚拟的用户,要不然真的无法想象会给我们接手的这个公司带来多大损失;

我仅以受害者的身份向菜鸟同胞们分享一下安全问题,我们晚上刚把自己的网站源码上传至服务器,而后进行数据库,及IIS的配置,首先我们直接用的sa 以及开发测试中惯用的密码:sa123456

(安全隐患1),而后我们的服务器也是超级管理员的administrator(安全隐患2),配置好后就直接发布了,,,

结果可想而知,不到半小时,我们的网站就被攻击了,服务器完全被窃取了,这是多么的可怕,貌似有人一直在监视着我似的,这要一有必要,你手中的东西都是他的,我是怕了,开来安全的确是个大问题;

而后就问了“度娘”,及请教了好多身边的朋友:

解决方法:1,为数据库设置跟自己项目有关的用户,复杂点最好,设置相应的权限;

2,服务器的用户名,及密码也要复杂(自己看着改);

3,在你的项目源码中加入基本的防攻击代码:如防止sql注入

@1如果你的是.net开发的网站,则将防止sql注入语句放入Global.asax文件中

源代码:

//防止Sql注入 第一种(另外一种跳转页面在这里不介绍了)

protected void Application_BeginRequest(Object sender, EventArgs e)

{

//SQL防注入

string Sql_1 = "exec|insert+|select+|delete|update|count|chr|mid|master+|truncate|declare|drop+|drop+table|creat+|creat+table";

string Sql_2 = "exec+|insert+|delete+|update+|count(|count+|chr+|+mid(|+mid+|+master+|truncate+|char+|+char(|declare+|drop+|creat+|drop+table|creat+table";

string[] sql_c = Sql_1.Split('|');

string[] sql_c1 = Sql_2.Split('|');

if (Request.QueryString != null)

{

foreach (string sl in sql_c)

{

if (Request.QueryString.ToString().ToLower().IndexOf(sl.Trim()) >= 0)

{

Response.Write("警告!你的IP已经被记录!");//

Response.Write(sl);

Response.Write(Request.QueryString.ToString());

Response.End();

break;

}

}

}

if (Request.Form.Count > 0)

{

string s1 = Request.ServerVariables["SERVER_NAME"].Trim();//服务器名称

if (Request.ServerVariables["HTTP_REFERER"] != null)

{

string s2 = Request.ServerVariables["HTTP_REFERER"].Trim();//http接收的名称

string s3 = "";

if (s1.Length > (s2.Length - 7))

{

s3 = s2.Substring(7);

}

else

{

s3 = s2.Substring(7, s1.Length);

}

if (s3 != s1)

{

Response.Write("你的IP已被记录!警告!");//

Response.End();

}

}

@2:如果你的是用asp开发的网站(asp已过时,现在很少用):

SQL_injdata =":|;|>|<|--|sp_|xp_|\|dir|cmd|^|(|)|+|$|'|copy|format|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"

SQL_inj = split(SQL_Injdata,"|")

If Request.QueryString<>"" Then

For Each SQL_Get In Request.QueryString

For SQL_Data=0 To Ubound(SQL_inj)

if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then

Response.Write "SQL通用防注入系统"

Response.end

end if

next

Next

End If

If Request.Form<>"" Then

For Each Sql_Post In Request.Form

For SQL_Data=0 To Ubound(SQL_inj)

if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then

Response.Write "SQL通用防注入系统"

Response.end

end if

next

next

end if
目前安全问题就只考虑到这些了,希望各位大虾有更好的策略能跟大家分享一下,你安全,我安全,大家才安全。。。和谐社会,讲究和谐!!!

本文出自 “蓝色未来的浅见” 博客,请务必保留此出处http://lanseweilai.blog.51cto.com/6309590/1096236
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: