Мне пришлось динамически создавать инструкции Sql для параметров хранимой процедуры из-за уровня доступа устаревшего доступа к базе данных.Предотвращение инъекции Sql при составлении динамического Sql
var p1 = Encoding.ASCII.GetString(p1).Replace("'", "''").Replace("\n", " ");
var p2 = Encoding.ASCII.GetString(p2).Replace("'", "''").Replace("\n", " ");
.....
var sql = string.Format("exec storedprocedure @p1='{0}', @p2='{1}', @p3='{2}', ....",
p1, p2, p3, ...);
Прямо сейчас я заменить '
на ''
и \n'
в пустом пространстве после преобразования строки в строку ASCII. Что еще мне нужно сделать? Я не могу использовать SqlParamter
и должен был выполнить последовательность из-за некоторых фактов.
Как насчет '\ '', ",' \ "', unicode, который при правильном декодировании превращается в одно из указанных выше (http://security.stackexchange.com/questions/11391/how-did- anonymous-use-utf-16-ascii-to-fool-php-escaping) и т. д.? – Patashu
Почему вы не можете использовать SqlParameter? – Moho
@Patashu Я обновил вопрос и принудительно передал строку Ascii – ca9163d9