2013-07-02 4 views
0

У меня есть некоторый код в C#, который используется для создания нового пароля:Предотвращение инъекции SQL - но без параметров

SqlCommand cmd = new SqlCommand("select pwdencrypt('" + txtNewPass1.Text + "')", Conn); 

Теперь это занимает наше текстовое значение из текстового поля txtNewPass1 и использует pwdencrypt чтобы зашифровать его, прежде чем другой бит кода помещает его в базу данных (этот бит использует параметры).

Однако проблема в том, что приведенный выше код не является и, по-видимому, не в состоянии. Использование параметра (а не txtNewPass1.Text) по какой-то причине возвращает неверное значение (на самом деле мне сейчас интересно, смогу ли я решить это, поместив txtNewPass1.Text в строку, а затем передав это через параметр) , Использование параметра, по крайней мере в этом случае, дает нам пароль, который не соответствует нашему значению.

Кто-нибудь еще сталкивался с этим раньше?

+0

какая база данных и версия вы используете? что такое код, когда вы пытаетесь использовать его как параметр? –

+0

Спасибо за ответ, но не волнуйтесь, я сейчас немного глуп. – user1560834

ответ

4

D'oh! Не очень хочу, чтобы ответить на этот вопрос сам, как я слишком смущен, но эй-хо ...

SqlCommand cmd = new SqlCommand("select pwdencrypt(@MyPass)", Conn 

Я уезжала одиночные кавычки в так пытается зашифровать («@MyPass»), а не (@MyPass). Поэтому каждый раз он шифровал @MyPass как пароль, а не то, что представлял @MyPass, поскольку он рассматривал его как строку.

Игнорируйте меня, это слишком рано утром. Хм ... почти обеденное время ...

+0

Примечание: SQLBOL рекомендует использовать 'hashbytes', а не' pwdencrypt'. –

+0

+1 для честности :-) –

5

петь параметр (а не txtNewPass1.Text), видимо, возвращает неверное значение по какой-то причине

Вы должны использовать параметр, если ему есть абсолютно невозможно для этого; любое «неправильное значение», скорее всего, является разницей между varchar и nvarchar - так что будьте осторожны, вы знаете, что хотите, и которые вы используете (pwdencrypt('foo') - это не то же самое, что и pwdencrypt(N'foo')). Также; рассмотрите hashbytes, а не pwdencrypt.

+0

Примером того, когда невозможно использовать параметры, является 'CREATE LOGIN', для которого требуется имя объекта для входа, который нельзя параметризовать. – Dai

Смежные вопросы