我写的这段代码安全吗?

woxuevc2013 2012-04-28 01:04:18

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;
}
}
}


...全文
219 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
woxuevc2013 2012-04-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
如果需要过滤的话 我只过滤一个 把 单引号 变成 全角的单引号
[/Quote]

还是需要过滤很多东西的,不然会造成XSS问题!当然在这里只要过滤一个单引号就OK了!
woxuevc2013 2012-04-29
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
这样子应该安全了,但是为什么不直接用参数化sql呢????更方便安全····
[/Quote]

我为什么不用呢?我是为了做SQL注入实验啊!
小猫阿尤 2012-04-28
  • 打赏
  • 举报
回复
参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。
天殇月痕 2012-04-28
  • 打赏
  • 举报
回复
这样子应该安全了,但是为什么不直接用参数化sql呢????更方便安全····
IT-Style 2012-04-28
  • 打赏
  • 举报
回复
你这样过滤完以后应该没有问题,避免了SQL注入式攻击.

但建议还是用参数化查询方法最安全.
lqkankan 2012-04-28
  • 打赏
  • 举报
回复
如果需要过滤的话 我只过滤一个 把 单引号 变成 全角的单引号
  • 打赏
  • 举报
回复
一点也不安全
  • 打赏
  • 举报
回复
sql语句参数化比较安全,用拼接很容易被注入
woxuevc2013 2012-04-28
  • 打赏
  • 举报
回复
我发现自从有了参数化SQL,SQL注入就已经走向末路了!!!
asuka986 2012-04-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

严防sql注入攻击.还是用sql拼接好点..
[/Quote]

= = 反了吧,防止SQL注入,应该参数化SQL
大笨蛋 2012-04-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
严防sql注入攻击.还是用sql拼接好点..
[/Quote]
种草德鲁伊 2012-04-28
  • 打赏
  • 举报
回复
select insert update delete 如果这些东西不安全,为啥它们能被发到论坛上。
油泼白菜 2012-04-28
  • 打赏
  • 举报
回复
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(" ", " ");

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



既然都
zuoming120 2012-04-28
  • 打赏
  • 举报
回复
基本还行。该过滤的都过滤了,用sql拼接基本就这样,不过建议不要用sql拼接
魚躍龍門 2012-04-28
  • 打赏
  • 举报
回复
严防sql注入攻击.还是用sql拼接好点..
快乐的小二兔 2012-04-28
  • 打赏
  • 举报
回复

2楼虽然说的不多但是是经典名句
orochiheart 2012-04-28
  • 打赏
  • 举报
回复
不安全 要用参数化sql
rayyu1989 2012-04-28
  • 打赏
  • 举报
回复
sql 不要用拼接的 就很安全

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


不用 htmlparse

62,025

社区成员

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

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

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

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