最近接收一個(gè)爛攤子,數(shù)據(jù)庫(kù)都被sql注入過(guò)一兩次了,到處都可以看到標(biāo)題上那種東西,
看得小妹我想死,我是燥性子看著有火,在網(wǎng)站上看了n多防注入的方法,記錄一下
一種是從數(shù)據(jù)庫(kù)入手的,我這個(gè)爛攤子是用的sql server2000的,
---------------------------------------------------------------------------------------------------------
推薦用SQL SERVER 2005 ,其安全性及功能都更為強(qiáng)大
一是不要用SA權(quán)限
二是刪除表的sys.all_colums和sys.all_objects的select權(quán)限
注意:這里SQL SERVER 2005 及 2000不一樣,
SQL SERVER 2005
這兩個(gè)權(quán)限在相應(yīng)數(shù)據(jù)庫(kù)展開下視圖=》視圖表中
把pubilc的select權(quán)限去掉,在屬性里取消掉SELECT權(quán)限
SQL SERVER 2000
在2000里,名字不一樣,位置也不是在視圖里,而是直接在表中,如下
然后把pubilc的select權(quán)限去掉
三、凡是訪問(wèn)數(shù)據(jù)庫(kù)的用戶,不要用SA,新建一個(gè)即可,其服務(wù)器角色不用設(shè)置,
全為空,只需要設(shè)數(shù)據(jù)庫(kù)映射即可,然后數(shù)據(jù)庫(kù)映射只給db_ower、pubilc權(quán)限
-------------------------------------------------------------------------------------------------------------
二個(gè)是從代碼上入手
盡可能全的過(guò)濾SQL敏感的語(yǔ)句,
先把數(shù)據(jù)庫(kù)里面注入的代碼用Replace()替換掉,
再在Global文件里里加入
protected void Application_BeginRequest(Object sender, EventArgs e)
{
//SQL防注入
string Sql_1 = "exec|insert+|select+|delete+|update+|count|chr|mid|master+|truncate|char|declare|drop+|drop+table|creat+|creat+table";
string Sql_2 = "exec+|insert|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已經(jīng)被記錄!不要使用敏感字符!");//
Response.Write(sl);
Response.Write(Request.QueryString.ToString());
Response.End();
break;
}
}
}
if (Request.Form.Count > 0)
{
string s1 = Request.ServerVariables["SERVER_NAME"].Trim();//服務(wù)器名稱
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已經(jīng)被記錄!不要使用敏感字符!");//
Response.End();
}
}
}
}
------------------------------------------------------------------------------------------------------------------
三個(gè)是使用防注入的軟件防火墻Safe3 IIS Firewall
http://hi.baidu.com/soueou/blog/item/796bb9068127887e03088178.html
該文章在 2011/1/30 21:58:58 編輯過(guò)