перехватить codeigniter и получить данные для обработки безопасности (SQL-инъекция) - PullRequest
0 голосов
/ 28 марта 2019

Я только что унаследовал большой проект, и мне нужно повторно защитить его, он написан на программном коде (php), к сожалению, уже слишком поздно делать PDO и связывание для всего этого, он построен на mysqli. Поэтому я подумываю об использовании хуков для предварительной обработки (очистки данных) поста и получения запросов до того, как они попадут в контроллеры (в основном, экранирование строк и т. Д.). Есть идеи, рекомендации по этому поводу?

Thx. Майк.

1 Ответ

1 голос
/ 28 марта 2019

Предварительная обработка $ _GET и $ _POST - это идея PHP Magic Quotes .Это оказалось плохой идеей, поэтому PHP устарел и окончательно удалил ее в PHP 7.0.Это была плохая идея, потому что она пытается быть универсальным решением, и это не учитывает много законных случаев, когда вы не хотите, чтобы входные данные вашей формы были предварительно обработаны.

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

Вам не нужно переключаться на PDO.Вы также можете связать параметры с MySQL.См. Пример в документах для mysqli_prepare () или этого популярного ответа переполнения стека: Как я могу предотвратить внедрение SQL в PHP?

Для чего это стоит, вВ своей предыдущей работе я преобразовал модуль администратора для приложения PHP из старого API «mysql» для использования PDO, используя привязку параметров для всех динамических значений.Это не заняло много времени, около половины дня.Я изменил вызовы базы данных менее чем в 100 файлах.Это очень помогло создать одну вспомогательную функцию, которая принимает строку SQL и массив, и запускала бы PDO prepare (), execute () и fetchAll (), корректно обрабатывая ошибки для каждого шага.

$resultSet = QueryWithParams($sqlQuery, $paramArray);

Если вы продолжаете использовать экранирование строк, используйте mysqli_real_escape_string () .Не пытайтесь написать собственную функцию для экранирования.

...