老调牙的问题,防SQL注入,讨论有效方法

遊戲王千金 2011-01-20 04:32:05

最近翻开n久前写的代码,发现能被SQL注入点很多。虽然现在写代码注意许多,但总觉得应该有一些更好的方法,
请各高人指教。先谢谢了.
目前我使用过的部分防注入方法,分享出来,求指正。
第一种通过Global.asax防注入。

/// <summary>
/// 当有数据时交时,触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Application_BeginRequest(Object sender, EventArgs e)
{
//遍历Get参数。
foreach (string i in this.Request.QueryString)
{
this.goErr(this.Request.QueryString[i].ToString());
}
}


/// <summary>
/// 校验参数是否存在SQL字符
/// </summary>
/// <param name="tm"></param>
private void goErr(string tm)
{
if (SqlFilter(tm))
this.Response.Redirect("/MyError.aspx?Error=Sql");
}

/// <summary>
///SQL注入过滤
/// </summary>
/// <param name="InText">要过滤的字符串</param>
/// <returns>如果参数存在不安全字符,则返回true</returns>
public static bool SqlFilter(string InText)
{
string word = "xp_cmdshell|and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join";
if (InText == null)
return false;
foreach (string i in word.Split('|'))
{
if ((InText.ToLower().IndexOf(i + " ") > -1) || (InText.ToLower().IndexOf(" " + i) > -1))
{
return true;
}
}
return false;
}


以下是我之前在SQL版区问的有关SQL注入,里面写了一些我防注入的代码,大伙也可看看。
http://topic.csdn.net/u/20110118/15/9bcdca26-0d7d-4585-bdf8-01faea658792.html
...全文
351 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
还想懒够 2011-01-21
  • 打赏
  • 举报
回复
对于SQL语句,其实也就是针对几种不同的类型而生成的字符串
为了防注入,以下方法可防住90%以上的情况(据说还有一种ASCII注入方法,不清楚,如果没这个,几乎是99%了)

1. 如果参数是文本型,则将单引号替换为两个单引号
2. 如果参数是数值或日期型,则先强行转换为数值或日期型,如果出错了,那肯定这个参数就不是数值或日期的
myhope88 2011-01-21
  • 打赏
  • 举报
回复
一般用参数化,长度限制,过滤一些非安全的东西,就够用了吧
子夜__ 2011-01-21
  • 打赏
  • 举报
回复
10楼说的有用。。。。。。
vilorsnow 2011-01-20
  • 打赏
  • 举报
回复
别人推荐的。http://www.hkqw.net/htm/2010821/577.htm希望对你有帮组
wyq29 2011-01-20
  • 打赏
  • 举报
回复
现在 过滤什么cmdshell|and|exec|insert|select 这些根本没一点用了 ;

基本全是“乱码” 就像百度搜索 %E6%96%AF%E8%92%82%E8%8A%A 这些东西

数据库不要用sa 建其它帐号; 重要的是 把sysobjects 和 syscolumns 的 select权限禁用
要么用iis防sql注入的防火墙 其实很管用的
遊戲王千金 2011-01-20
  • 打赏
  • 举报
回复
有句经典“细节决定品位”.看来写程序也能达到同一高度。
CSDN各位很活跃.不错!!
ycproc 2011-01-20
  • 打赏
  • 举报
回复
ycproc 2011-01-20
  • 打赏
  • 举报
回复
对输入的字串长度,范围,格式和类型进行约束.
在开发 ASP.NET 程序时使用请求验证防止注入攻击.
使用 ASP.NET 验证控件进行输入验证.
对不安全的输出编码.
使用命令参数集模式防止注入攻击.
防止错误的详细信息被返回到客户端.
西门喷血 2011-01-20
  • 打赏
  • 举报
回复
对用户输入的字符串用参数化
whb147 2011-01-20
  • 打赏
  • 举报
回复
类型匹配
还有就是参数化
还有就是减少拼接字符串
_三皮_ 2011-01-20
  • 打赏
  • 举报
回复
使用带参数的SQL语句,使用LINQ,在服务器上防蛀防火墙
_三皮_ 2011-01-20
  • 打赏
  • 举报
回复
最拍的就是蛀虫,学习。
IHandler 2011-01-20
  • 打赏
  • 举报
回复
参数化
类型校验

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧