запрос infopath и проблема внедрения SQL - PullRequest
0 голосов
/ 02 сентября 2011

Как я могу защитить свой сайт от инъекций sql при получении? Details = value

от URL

и поиск объекта в столбце xml в базе данных с указанным значением?

вот пример кода:

sqlQuery = string.Format(@"
                    SELECT 
                        [data]

                    FROM " + schema + @".[MyOBjects] 
                    WHERE 

                        " data.exist('/data["theValue"=\"{0}\"]') = 1" + 



                    ", property, value);

Спасибо за любую помощь

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

Ознакомьтесь со следующей статьей о защите кода от SQL-инъекций: Защита от SQL-инъекций в ASP.NET

В вашем случае вы можете захотеть использовать параметризованные запросы.Оформить заказ «Шаг 3. Использование параметров с динамическим SQL».

Вы можете использовать что-то похожее на это:

string connectionString = "...";
string schema = "...";
string value = "...";

using (SqlConnection connection = new SqlConnection(connectionString))
{
    string sql = string.Format("SELECT [data] FROM {0}.[MyOBjects] WHERE data.exist('/data[\"theValue\"=sql:variable(\"@value\")]') = 1", schema);

    SqlCommand sqlCommand = new SqlCommand(sql, connection);
    sqlCommand.CommandType = System.Data.CommandType.Text;
    sqlCommand.Parameters.Add(new SqlParameter("@value", System.Data.SqlDbType.NVarChar, 255) { Value = value });

    ....
}
0 голосов
/ 02 сентября 2011

Используйте хранимую процедуру в базе данных и вместо передачи значений непосредственно в запрос передайте их хранимой процедуре. Если вам действительно нужно, чтобы имя таблицы было динамичным, существуют методы для этого.

Вот один из примеров: http://www.nigelrivett.net/SQLTsql/TableNameAsVariable.html

...