Как защитить от инъекций SQL при использовании SqlKata? - PullRequest
0 голосов
/ 21 ноября 2019

Я столкнулся с некоторыми небезопасными функциями SqlKata:

Пример

public class TestRepository
{
    private readonly QueryFactory _queryFactory;

    public TestRepository(QueryFactory queryFactory)
    {
        _queryFactory = queryFactory;
    }

    public IList<TestResult> TestFunction(string value)
    {
        var query = _queryFactory.Query("MyTableName");
        query.Where("MyColumnName", value);
        return query.Get<TestResult>();
    }
}

и вывод:

--> output --> sqlkata query log
--> select * from MyTableName where MyColumnName = 'Select Id from Users where Nickname = ''Admin'''

Я должен использовать ядро ​​SqlKata и asp.net. Мне нужно решение.

Ответы [ 2 ]

2 голосов
/ 21 ноября 2019

Самый безопасный способ избежать SQL-инъекций - использовать параметризованные запросы.

Как говорится в документации по SQLkata в по этой ссылке в основном используются параметры для построения выполняемого SQL. В той же ссылке есть некоторые функции, которые НЕ используют параметры.

Поскольку есть более безопасные функции, чем небезопасные функции, я копирую копии имен функций, которые задокументированы в не используйте параметры в документации:

  • WhereNull
  • WhereTrue
  • WhereFalse

В качестве примечания,если вы снова работаете с базой данных, в которой есть профилировщик, вы можете отслеживать, какой фактический SQL выполняется в базе данных, и проверять, где используются параметры. Это полезно при работе с закрытыми компонентами исходного кода. Например, в SQL Server у вас есть SQL Server Profiler и монитор SQL Server (встроенный в SQL Server Management Studio)

1 голос
/ 21 ноября 2019

SqlKata по умолчанию является безопасным и защищает вас от внедрения SQL, если вы следуете рекомендации.

a. Используйте собственный метод для построения запроса, как предложено @ bradbury9

var name = "unsafe string value here";
query.Where("Name", name);

b. При использовании методов Raw убедитесь, что вы используете параметр-заполнитель

var name = "unsafe string value here";
query.WhereRaw("[Name] = ?", name);

c. и самое важное - избегать использования SqlResult.ToString() для выполнения ваших запросов.

Приведенный пример полностью безопасен, так как SqlKata использует метод привязки параметров, здесь регистратор выполняет дополнительную работу, заменяя фактическое значение. их заполнителями, чтобы показать вам окончательный результат.

...