当前位置:编程学习 > C#/ASP.NET >>

我写的这段代码安全吗?


public partial class Login : System.Web.UI.Page
{
    public string user = string.Empty;
    public string pwd = string.Empty;
    public string ok = "nihao,hello";
    public string err = "over,gun";
    protected void Page_Load(object sender, EventArgs e)
    {
        int i = 0;
        if (Request.Form["userName"] != null)
        {
            user =htmlparse(Request.Form["userName"].ToString());           
            i = i + 1;
        }
        if (Request.Form["passWord"] != null)
        {
            pwd =htmlparse(Request.Form["passWord"].ToString());
            i = i + 1;
        }
        if (i >= 2)
        {
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlstr"].ConnectionString);
            con.Open();
            string sqlstr = "select count(*) from login where us='" + user + "' and pa='" + pwd + "'";
            SqlCommand com = new SqlCommand(sqlstr, con);
            if (int.Parse(com.ExecuteScalar().ToString()) > 0)
            {
                Response.Write("<script>alert('" + ok + "');</script>");
            }
            else
            {
                Response.Write("<script>alert('" + err+ "');</script>");
            }

        }

    }
    private string htmlparse(string str)
    {
        if (str.Trim() == "" || str == null)
        {
            return str;
        }
        else
        {
            str = str.Replace("&", "&");
            str = str.Replace("<", "<");
            str = str.Replace(">", ">");
            str = str.Replace("'", "''");
            str = str.Replace("*", " ");
            str = str.Replace("\n", " <br/>");
            str = str.Replace("\r\n", " <br/>");
            str = str.Replace("select", " ");
            str = str.Replace("insert", " ");
            str = str.Replace("update", " ");
            str = str.Replace("delete", " ");
            str = str.Replace("create", " ");
            str = str.Replace("drop", " ");
            str = str.Replace("delcare", " ");
            str = str.Replace(" ", " ");
           str = str.Trim();
            if (str.Trim().ToString() == "")
                str = "无 ";
            return str;           
        }
    }
}


--------------------编程问答-------------------- sql 不要用拼接的 就很安全

如 
rs.Parameters.Add("@districtid", SqlDbType.Int).Value = classid


不用 htmlparse  --------------------编程问答-------------------- 不安全 要用参数化sql  --------------------编程问答--------------------
2楼虽然说的不多但是是经典名句 --------------------编程问答-------------------- 严防sql注入攻击.还是用sql拼接好点.. --------------------编程问答-------------------- 基本还行。该过滤的都过滤了,用sql拼接基本就这样,不过建议不要用sql拼接 --------------------编程问答-------------------- str = str.Replace("&", "&");
            str = str.Replace("<", "<");
            str = str.Replace(">", ">");
            str = str.Replace("'", "''");
            str = str.Replace("*", " ");
            str = str.Replace("\n", " <br/>");
            str = str.Replace("\r\n", " <br/>");
            str = str.Replace("select", " ");
            str = str.Replace("insert", " ");
            str = str.Replace("update", " ");
            str = str.Replace("delete", " ");
            str = str.Replace("create", " ");
            str = str.Replace("drop", " ");
            str = str.Replace("delcare", " ");
            str = str.Replace(" ", " ");

既然都这样了,就把想到能出现的都给替换了吧,,



既然都 --------------------编程问答-------------------- select insert update delete 如果这些东西不安全,为啥它们能被发到论坛上。 --------------------编程问答--------------------
引用 4 楼  的回复:
严防sql注入攻击.还是用sql拼接好点..

--------------------编程问答--------------------
引用 4 楼  的回复:
严防sql注入攻击.还是用sql拼接好点..


= = 反了吧,防止SQL注入,应该参数化SQL --------------------编程问答-------------------- 我发现自从有了参数化SQL,SQL注入就已经走向末路了!!! --------------------编程问答-------------------- sql语句参数化比较安全,用拼接很容易被注入 --------------------编程问答-------------------- 一点也不安全 --------------------编程问答-------------------- 如果需要过滤的话 我只过滤一个 把 单引号 变成 全角的单引号 --------------------编程问答-------------------- 你这样过滤完以后应该没有问题,避免了SQL注入式攻击.

但建议还是用参数化查询方法最安全. --------------------编程问答-------------------- 这样子应该安全了,但是为什么不直接用参数化sql呢????更方便安全···· --------------------编程问答-------------------- 参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。
--------------------编程问答--------------------
引用 15 楼  的回复:
这样子应该安全了,但是为什么不直接用参数化sql呢????更方便安全····


我为什么不用呢?我是为了做SQL注入实验啊! --------------------编程问答--------------------
引用 13 楼  的回复:
如果需要过滤的话 我只过滤一个 把 单引号 变成 全角的单引号


还是需要过滤很多东西的,不然会造成XSS问题!当然在这里只要过滤一个单引号就OK了!
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,