Как санировать ввод php без mysql - PullRequest
2 голосов
/ 16 августа 2011

Я пытаюсь найти способ дезинфекции ввода в sqlite с php.Я не могу использовать MySQL.Достаточно ли просто использовать sqlite_escape_string или мне нужно сделать что-нибудь еще?Также я могу использовать только sqlite2.

Ответы [ 5 ]

2 голосов
/ 16 августа 2011

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

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

1 голос
/ 16 августа 2011

Функции Escape гарантируют, что специальные символы (в основном кавычки), используемые диалектом SQL, экранированы, чтобы ваши вставки / обновления и т. Д. Работали.Все, что делает sqlite_escape_string - это экранирует одинарные кавычки.

Тогда есть существенная проблема, что кто-то может создать SQL-инъекцию.Поскольку вы используете v2, вы не можете использовать функции prepare и _bind (), которые защитили бы вас.

SQLite позволяет объединять команды, разделенные символом ';'так что здесь есть проблема.Я бы посоветовал вам начать с тщательной обработки параметров, используя либо вспомогательные функции, которые вы пишете, либо с помощью sprintf, и убедиться, что вы правильно вводите свои int, float и strings.

У вас должна быть возможность создать собственную функцию escapeэто "ускользает" от вещей, которые вы хотите остерегаться ... в особенности от точки с запятой, используя ... ESCAPE '\' в конце ваших запросов, при условии, что вы используете обратную косую черту в качестве escape-символа.

Тогда у вас есть проблема, когда кто-то намеренно вставляет вредоносный контент (XSS).Григор предоставил одно решение - используйте htmlentities () в своих строках.

0 голосов
/ 16 августа 2011

sqlite_escape_string() должны выполнить все необходимые операции очистки для ввода строки.Что касается вывода его, если он выводится в HTML, то используйте htmlspecialcharts() перед выводом.

0 голосов
/ 16 августа 2011

SQLite предлагает sqlite_escape_string() для этого.Впрочем, он доступен только для PHP 5.

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

0 голосов
/ 16 августа 2011

Есть способы, но это зависит от цели вашего ввода. Пожалуйста, обратитесь к этому вопросу, чтобы понять его лучше: Какой лучший метод для очистки ввода пользователя с помощью PHP?

...