Latest web development tutorials

SQLite инъекции

Если ваш веб-сайт позволяет пользователям вводить и ввод в базу данных SQLite, на этот раз вы столкнулись с проблемой безопасности известна как SQL инъекции. В этой главе мы покажем вам, как предотвратить это, и обеспечить заявления SQLite сценария безопасности.

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

Никогда не доверяйте пользователем данные, так что только апробированные обработка данных, правило осуществляется путем сопоставления с образцом. В следующем примере, имя пользователя имя пользователя ограничивается буквенно-цифровых символов или символов подчеркивания, длина должна быть в пределах 8-20 символов - по необходимости изменять эти правила.

если (preg_match ( "/ ^ \ ш {8,20} $ /", $ _GET [ 'имя пользователя'], $ соответствует)) {
   $ Db = новый SQLiteDatabase ( 'имя файла');
   $ Результат = @ $ db-> запрос ( "SELECT * FROM пользователей, где имя пользователя = $ соответствует [0]");
} Else {
   эхо "имя пользователя не принято";
}

Чтобы продемонстрировать эту проблему, рассмотрим эту гипотезу отрывок: Чтобы продемонстрировать эту проблему, рассмотреть этот отрывок:

$ Name = "Кадир"; DELETE FROM пользователей; ";
@ $ Db-> запрос ( "SELECT * FROM пользователей, где имя пользователя = '{$ имя}'");

Вызов функции для извлечения имени столбца, указанного имени пользователя соответствует запись из таблицы пользователя. При нормальныхобстоятельствах, $ имя содержит только буквенно - цифровые символы и пробелы, такие как строка подвздошных.Но вот, до $ имя добавлен новый запрос, вызовы к базе данных вызовет катастрофические проблемы: впрыскивается запрос на удаление, чтобы удалить все записи пользователей.

Несмотря на то, не допускается для выполнения запроса или базы данных интерфейс для штабелирования несколько запросов в вызове одной функции, если вы пытаетесь сложить запрос, то вызов не выполняется, но SQLite и PostgreSQL по-прежнему укладываются в запросе, который обеспечивает выполнение в строке Все запросы, которые могут вызвать серьезные проблемы в области безопасности.

Предотвращение SQL инъекции

В языках сценариев, таких как PERL и PHP, вы можете умело обрабатывать все экранирующего символа. PHP обеспечивает программирование строки функции языкаsqlite_escape_string () для SQLite используется , чтобы избежать ввода специальных символов.

если (get_magic_quotes_gpc ()) 
{
  $ Name = sqlite_escape_string ($ название);
}
$ Результат = @ $ db-> запрос ( "SELECT * FROM пользователей, где имя пользователя = '{$ имя}'");

Хотя данные кодируются таким образом , чтобы вставка из безопасной, но она будет простое текстовое сравнение, в запросе, столбец содержит двоичныеданные, LIKE пункт не доступен.

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