Важно ли предотвратить запрос SQLite в настольном приложении, и пользователь может открыть файл базы данных? - PullRequest
0 голосов
/ 07 июня 2019

Создать метод для генерации SQL-запроса (Вставить, Обновить, Выбрать и Удалить) но читайте про SQL-инъекцию

Важно ли предотвратить инъекцию, когда мое приложение работает на локальном ПК и без общей базы данных, и пользователь может найти файл базы данных и открыть его.

Почему нужно запретить инъекцию моего запроса?

class Cls_SQLGen
{
    public static void SQLInsert(string TableName, string[,] ColNameValues)
    {
        string Query = "Insert into " + TableName + " ( ";
        #region Build query for insert            
        for (int i = 0; i < ColNameValues.GetLength(0); i++)
        {
            string ColNames;
            if (i == ColNameValues.GetLength(0) - 1)
            {
                ColNames = ColNameValues[i, 0] + " ) ";
            }
            else
            {
                ColNames = ColNameValues[i, 0] + ", ";
            }
            Query += ColNames;
        }


        Query += "Values (";

        for (int i = 0; i < ColNameValues.GetLength(0); i++)
        {
            string ParamName;
            if (i == ColNameValues.GetLength(0) - 1)
            {
                ParamName = " @" + ColNameValues[i, 0] + ")";
            }
            else
            {
                ParamName = " @" + ColNameValues[i, 0] + ",";
            }
            Query += ParamName;
        }
        #endregion
        DAL.SQLiteAccessLayes.ExcuteCommand(Query, ColNameValues);
    }
}

1 Ответ

0 голосов
/ 07 июня 2019

Важно ли предотвратить инъекцию во время работы моего приложения локальный компьютер и без общей базы данных, и пользователь может найти файл базы данных и открой его.

Для безопасности нет. Злоумышленник может повредить данные на своем собственном компьютере сколько угодно.

Для надежности да. Если пользователь вводит текст, содержащий ' в строке, ваше приложение будет разрываться, если вы не предотвратите внедрение.

Представьте, что пользователь вводит O'Hare в качестве фамилии. Незащищенный запрос может написать этот SQL: INSERT INTO [PERSON] ([Firstname], [Lastname]) VALUES ('JOHN', 'O'HARE');

Это будет неверный SQL, и ваше приложение выдаст ошибку.

Однако вставленного вами кода недостаточно, чтобы определить, уязвим ли он для внедрения. От того, где вы получите значения, которые вы объединяете, зависит, является ли это проблемой. Похоже, вы пытаетесь параметризовать свой запрос, которого было бы достаточно, но у меня возникли проблемы с определением, что именно вы пытаетесь делать с этим кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...