防止SQL注入 - 但没有参数

use*_*834 0 c# sql parameters code-injection

我在C#中有一些用于创建新密码的代码:

SqlCommand cmd = new SqlCommand("select pwdencrypt('" + txtNewPass1.Text + "')", Conn);
Run Code Online (Sandbox Code Playgroud)

现在,这将从文本框txtNewPass1中获取文本值,并使用pwdencrypt对其进行加密,然后将另一位代码放入数据库(该位使用参数).

但是,问题是上面的代码没有 - 实际上似乎无法实现.使用参数(而不是txtNewPass1.Text)似乎由于某种原因带回了错误的值(实际上,我现在想知道我是否可以通过将txtNewPass1.Text放入字符串,然后通过参数传递它来解决这个问题) .至少在这种情况下,使用参数会为我们提供与我们的值不匹配的密码.

之前有人遇到过这个吗?

Mar*_*ell 5

唱一个参数(而不是txtNewPass1.Text)似乎由于某种原因带回了错误的值

您应该使用参数,除非绝对不可能这样做; 任何"错误的价值"很可能是varchar和之间的区别nvarchar- 所以要小心你知道你想要哪个,以及你正在使用哪个(pwdencrypt('foo')不一样pwdencrypt(N'foo')).也; 考虑hashbytes而不是pwdencrypt.