高手看看 这些能防止SQL注入吗?

anlianganl 2009-01-05 11:08:26
"select * from news where newstype=''"+v_newstype+"''"

这么写能防止SQL注入吗?
...全文
102 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
v_newstype = "'';delete from news;--";
"select * from news where newstype=''"+v_newstype+"''"

让前面的条件编程一个空字符串,然后删掉你的所有数据,把后面的所有代码注释掉
结果你的sql语句变成了:
select * from news where newstype='';delete from news;--'
刚刚好009 2009-01-05
  • 打赏
  • 举报
回复
这样就行,我服了。这样写,本来就是注入的漏洞嘛
HDNGO 2009-01-05
  • 打赏
  • 举报
回复
不是把sql语句里的单引号变两个。。而是把传进sql的参数的单引号变两个~
HDNGO 2009-01-05
  • 打赏
  • 举报
回复
SqlParameter 参数比较方便
周公 2009-01-05
  • 打赏
  • 举报
回复

string sql = "insert into S_Admin(UserName,Password,Remark,Mail,DepartId,Power)values(@UserName,@Password,@Remark,@Mail,@DepartId,@Power)";
SqlConnection connection = new SqlConnection();
connection.ConnectionString = "";//此处设置链接字符串
SqlCommand command = new SqlCommand(sql, connection);
command.Parameters.Add("@UserName",SqlDbType.NVarChar, 60).Value = userName;
command.Parameters.Add("@Password", SqlDbType.NVarChar, 60).Value = password;
command.Parameters.Add("@Remark", SqlDbType.NVarChar, 60).Value = remark;
command.Parameters.Add("@Mail", SqlDbType.NVarChar, 60).Value = mail;
command.Parameters.Add("@DepartId", SqlDbType.Int, 4).Value = departId;
command.Parameters.Add("@Power", SqlDbType.Int, 4).Value = power;
connection.Open();
int rowsAffected = command.ExecuteNonQuery();
connection.Close();
command.Dispose();
return rowsAffected > 0;
anlianganl 2009-01-05
  • 打赏
  • 举报
回复
大家给我举个例子,为什么我这么写不能防止SQL注入呢?
  • 打赏
  • 举报
回复
不能

"select * from news where newstype=@1"
然后执行的时候,按平时传入参数,
SqlParameter pam = new SqlParameter("@1",v_newstype);
sqlCommand.Parameters.Add(pam);
...
CruelYoung123 2009-01-05
  • 打赏
  • 举报
回复
不能。。
限制长度。。。 只允许字母或者汉字就OK了。
不让出现' ( ,%,空格等特殊字符
周公 2009-01-05
  • 打赏
  • 举报
回复
在ADO.NET中使用参数化SQL语句的大同小异
在ADO.NET中经常需要跟各种数据库打交道,在不实用存储过程的情况下,使用参数化SQL语句一定程度上可以防止SQL注入,同时对一些较难赋值的字段(如在SQL Server中Image字段,在Oracle中Clob字段等)使用参数化SQL语句很容易就能赋值,所以本人经常在ADO.NET中使用参数化SQL语句,近几年来陆续跟SQL Server/Oracle/ MySQL/Access打交道,积累了一些心得,现在整理出来供大家参考。
周公 2009-01-05
  • 打赏
  • 举报
回复
用参数化的形势能避免,你这种方式还是不行的。

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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