首页 新闻 会员 周边

如何防止sql注入

0
[已解决问题] 解决于 2010-08-04 16:22

如题 

Alex_Jin的主页 Alex_Jin | 初学一级 | 园豆:4
提问于:2010-08-03 16:44
< >
分享
最佳答案
0

楼上说的很好,总之做前端安全,永远不要相信浏览者输入的信息,有必要在前端和后台同时进行验证。

关于SQL注入,方法就是过滤请求特殊字符和参数传递执行SQL语句。

发个比较新的文章:http://www.cnblogs.com/jirigala/archive/2010/07/28/1787291.html

Astar | 高人七级 |园豆:40805 | 2010-08-03 16:58
其他回答(5)
0

归纳一下,主要有以下几点: 
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。 
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。 
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。 
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。 

参考: 
http://msdn.microsoft.com/en-us/magazine/cc163917.aspx 
http://www.unixwiz.net/techtips/sql-injection.html 
http://www.nextgenss.com/papers/more_advanced_sql_injection.pdf 
http://www.securiteam.com/securityreviews/5DP0N1P76E.html 
http://xkcd.com/327/ 
http://ferruh.mavituna.com/makale/sql-injection-cheatsheet/

jowo | 园豆:2834 (老鸟四级) | 2010-08-03 16:47
0

严重鄙视过虑所谓的特殊字符的方法.

chy710 | 园豆:167 (初学一级) | 2010-08-03 17:23
0

 public static void sqlJ()    {      

  string flashack_In, flashack_db, flashack_dbstr, types;        int flashack_Xh;     

   string[] flashack_Inf;        flashack_In = "'※;※and※exec※insert※select※delete※update※count※*※%※chr※mid※master※truncate※char※declare";        flashack_Inf = flashack_In.Split('※');   

     if (Request.Form != null)    

       {          

           foreach (string flashack_Post in Request.Form)      

          {              

  for (flashack_Xh = 0; flashack_Xh <= flashack_Inf.GetUpperBound(0); flashack_Xh++)                {                    if (Request.Form[flashack_Post].ToLower().Contains(flashack_Inf[flashack_Xh]))                    {                        Response.Write("<script language='javascript'>alert('系统提示你:请不要在参数中包含非法字符尝试注入');</script>");                        Response.Write("<script language='javascript'>window.history.go(-1);</script>");                        Response.End();                    }                }            }        }        if (Request.QueryString != null)        {            foreach (string flashack_Get in Request.QueryString)            {                for (flashack_Xh = 0; flashack_Xh <= flashack_Inf.GetUpperBound(0); flashack_Xh++)                {                    if (Request.QueryString[flashack_Get].ToLower().Contains(flashack_Inf[flashack_Xh]))                    {                        Response.Write("<script language='javascript'>alert('系统提示你:请不要在参数中包含非法字符尝试注入');</script>");                        Response.Write("<script language='javascript'>window.history.go(-1);</script>");                        Response.End();                    }                }            }        }    }

林雨.... | 园豆:116 (初学一级) | 2010-08-03 20:01
0

使用参数化就是基本,不要去迷信过滤关键字啥的。

steven hu | 园豆:542 (小虾三级) | 2010-08-04 09:00
0

使用参数化SQL

無獨有偶 | 园豆:43 (初学一级) | 2010-08-04 10:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册