我写的这段代码安全吗?
--------------------编程问答-------------------- sql 不要用拼接的 就很安全
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;
}
}
}
如
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 如果这些东西不安全,为啥它们能被发到论坛上。 --------------------编程问答--------------------
--------------------编程问答--------------------
= = 反了吧,防止SQL注入,应该参数化SQL --------------------编程问答-------------------- 我发现自从有了参数化SQL,SQL注入就已经走向末路了!!! --------------------编程问答-------------------- sql语句参数化比较安全,用拼接很容易被注入 --------------------编程问答-------------------- 一点也不安全 --------------------编程问答-------------------- 如果需要过滤的话 我只过滤一个 把 单引号 变成 全角的单引号 --------------------编程问答-------------------- 你这样过滤完以后应该没有问题,避免了SQL注入式攻击.
但建议还是用参数化查询方法最安全. --------------------编程问答-------------------- 这样子应该安全了,但是为什么不直接用参数化sql呢????更方便安全···· --------------------编程问答-------------------- 参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。
--------------------编程问答--------------------
我为什么不用呢?我是为了做SQL注入实验啊! --------------------编程问答--------------------
还是需要过滤很多东西的,不然会造成XSS问题!当然在这里只要过滤一个单引号就OK了!
补充:.NET技术 , ASP.NET