如何使用sql语句防止注入式攻击?

时间:2021-10-11 19:43:01
听说可以使用sqlcommand Parameters来防止注入式攻击
我写了如下语句:
string sql = "select * from members where userName=@name";
OleDbCommand cmd = new OleDbCommand(sql, con);
con.Open();
 //防止注入式攻击
cmd.Parameters.Add("@name", OleDbType.VarChar, 50);
cmd.Parameters["@name"].Value = this.TextBox1.Text;
如果我现在在textbox1中输入的是"'"(逗号),那sql的值是什么?
不懂啊,那位大哥帮忙写一下~
比如说我想把"'"(逗号)变成" "(空格)

12 个解决方案

#1


用存储过程就可以防止了.

#2


能详细点么?解释一下

#3


用存储过程

#4


如何使用呢〉?
比如说我想把逗号变成空格?

#5


使用参数,不要拼确定值。
有些问题使用存储过程无法解决。

#6


使用参数就是使用我刚才写的语句吧?可我在调试的过程中并没有发现有转换阿?
正确的语句该怎么写啊?

#7


如果输入",",生成的sql语句等价于:
"select * from members where userName=','"
如果要替换,可以
cmd.Parameters["@name"].Value = this.TextBox1.Text.Replace(",", " ")`;

#8


还是不行啊,我是这样写的
 OleDbConnection con = new OleDbConnection ("server=hp;uid=sa;pwd=sa;database=test;Provider=SQLOLEDB");
           string sql = "select * from members where userName=@userName";
            OleDbCommand cmd = new OleDbCommand(sql, con);
           con.Open();
           //防止注入式攻击
           cmd.Parameters.Add("@userName", OleDbType.VarChar, 50);
           cmd.Parameters["@userName"].Value = this.TextBox1.Text.Replace("'", "");
           sql的值还是select * from members where userName=@userName
哪里错了?急啊~

#9


使用参数,不使用字符串动态拼接成SQL语句,一般就没问题了

#10


没错,sqltext不会变。
cmd的parameters中会有增加的参数。

#11


没什么错啊  本来使用存储过程就是看不到sqltext的变化的

#12


明白了~
多谢大家
现在发分去

#1


用存储过程就可以防止了.

#2


能详细点么?解释一下

#3


用存储过程

#4


如何使用呢〉?
比如说我想把逗号变成空格?

#5


使用参数,不要拼确定值。
有些问题使用存储过程无法解决。

#6


使用参数就是使用我刚才写的语句吧?可我在调试的过程中并没有发现有转换阿?
正确的语句该怎么写啊?

#7


如果输入",",生成的sql语句等价于:
"select * from members where userName=','"
如果要替换,可以
cmd.Parameters["@name"].Value = this.TextBox1.Text.Replace(",", " ")`;

#8


还是不行啊,我是这样写的
 OleDbConnection con = new OleDbConnection ("server=hp;uid=sa;pwd=sa;database=test;Provider=SQLOLEDB");
           string sql = "select * from members where userName=@userName";
            OleDbCommand cmd = new OleDbCommand(sql, con);
           con.Open();
           //防止注入式攻击
           cmd.Parameters.Add("@userName", OleDbType.VarChar, 50);
           cmd.Parameters["@userName"].Value = this.TextBox1.Text.Replace("'", "");
           sql的值还是select * from members where userName=@userName
哪里错了?急啊~

#9


使用参数,不使用字符串动态拼接成SQL语句,一般就没问题了

#10


没错,sqltext不会变。
cmd的parameters中会有增加的参数。

#11


没什么错啊  本来使用存储过程就是看不到sqltext的变化的

#12


明白了~
多谢大家
现在发分去