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

大家都是如何防止SQL注入式攻击的?
做网站的同志都知道,网站的安全是非常重要的。大家都是如何来防止网站被黑的?

为了防止登录口令被SQL注入攻击,我是将输入的textbox中的文本
如果有“'”的全部替换成“¥”来处理的,不知道大家是怎么做的?

大家交流下。

------解决方案--------------------
坐等高手.
------解决方案--------------------
1.不要或尽量少拼接sql
2.注意对用户输入的数据进行检查
3.sql参数使用参数化形式(parameter)
------解决方案--------------------
危险字符过滤的类(最新完善版) * 山哥的后台类 *

http://blog.csdn.net/johnsuna/archive/2004/12/05/205295.aspx


我看了一下,但是不知道好用吗,

我想做的是在前台作判断,至今还没有找到好的方法。
------解决方案--------------------
探讨
3.sql参数使用参数化形式(parameter),这个没用过,能讲的详细点吗?


网站安全是个大问题,如果分少可以加,我可以将全部的分数都可以加上去,

希望能和大家将这个问题讨论彻底!!

------解决方案--------------------
探讨
引用:
1.不要或尽量少拼接sql
2.注意对用户输入的数据进行检查
3.sql参数使用参数化形式(parameter)



3.sql参数使用参数化形式(parameter),这个没用过,能讲的详细点吗?


网站安全是个大问题,如果分少可以加,我可以将全部的分数都可以加上去,

希望能和大家将这个问题讨论彻底!!

------解决方案--------------------
探讨
sql="Select * from tab where name =@name
这样写后,能不能获得传过来的参数?
如果通过session传过来的参数也能用这种方法写吗?

------解决方案--------------------
http://blog.csdn.net/dengwei007/articles/30712.aspx 看看这个sql注入天书
------解决方案--------------------
做到两点,可保你万无一失
1、对string参数进行Replace("'","''") or Replace("'","")
示例sql语句:string sql = "select * from [users] where [name]='"+ name.Replace("'","") +"'";
注意sql语句中[name]=''两个单引号不可缺
2、对int参数进行int.Parse()
示例sql语句:string sql = "select * from [users] where [id]="+ int.Parse(id).ToString();
出错说名参数不对,跳转到默认错误页面
当然也可以通过含蓄的方式验证,比如 int.TryParse 或者 try{}catch{}
------解决方案--------------------
另外,如果考虑插入<script>标签的话,可以在显示的时候进行 Server.HtmlEncode(row["title"].ToString())
------解决方案--------------------
探讨
sql="Select * from tab where name =@name
这样写后,能不能获得传过来的参数?
如果通过session传过来的参数也能用这种方法写吗?

------解决方案--------------------
学习
------解决方案--------------------
C# code


 public class ProcessRequest
    {
        public static void StartProcessRequest()
        {
            string sqlErrorPage = "ErrorPage.htm";
            try
            {
                string getkeys = "";
                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 (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys]))
                        {
                            System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage + "");
                            System.Web.HttpContext.Current.Response.End();
                        }
                    }
                }
            }
            catch
            {
                System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage + "");
                System.Web.HttpContext.Current.Response.End();
            }
        }

        public static bool ProcessSqlStr(string Str)
        {
            bool ReturnValue = true;
            try
            {
                if (Str != "")
                {
                    string SqlStr = ";|and|exec|insert|select|delete|update|count|*|chr|mid|master|truncate|char|declare";
                    string[] anySqlStr = SqlStr.Split('|');
                    foreach (string s in anySqlStr)
                    {
                        if (Str.IndexOf(s) > -1)
                        {
                            ReturnValue = false;
                        }
                    }
                }
            }
            catch
            {
                ReturnValue = false;
            }
            return ReturnValue;
        }
    }