Intereting Posts
как проверить, зарегистрирован ли пользователь на его сеансе в маршруте, а затем вызвать метод контроллера в laravel? Выпадающее меню выбрано на основе параметра URL – PHP или jQuery? простое выражение в php, форматирование десятичного числа Отображение изображений Google на моем веб-сайте? (пересмотренный) php password_verify не работает с базой данных Как связать ссылку с другой php-страницей с помощью события onclick из javascript? php mail bcc несколько получателей Как передать URL в URL (как параметр GET) с помощью PHP? PHP китайские символы не могут вставить в Mysql Symfony 2 – проблема межсетевого экрана и контроля доступа Формат даты и времени PDO для MSSQL / dblib Как я могу использовать «не нравится» на laravel mongodb? Я не могу использовать для предотвращения дублирования имен Как создать ссылку для загрузки сгенерированных документов в symfony2? Как выполнить запрос для вложенного массива в php и laravel с помощью mongoDB

Исправления Mysql и php для репликации безопасности PDO

Я понимаю, что использование PDO делает инъекции SQL практически невозможными. Однако на данный момент у меня нет времени изменить весь код, связанный с базой данных, на нашем веб-сайте. (Тем более, что я новичок в PDO, есть определенная кривая обучения). Поэтому я хочу знать, какие функции mysql / php будут обеспечивать ту же безопасность, что и PDO.

Будут ли эти две точки достаточно?

  1. Убедитесь, что все данные $ _GET и $ _POST имеют ожидаемый тип (например, идентификаторы продуктов должны быть только численными, поэтому я могу использовать is_numeric ).
  2. Использование mysql_real_escape_string .

Или есть что-то еще, что я должен делать? Способ, которым является сайт, заключается в том, что на основе id=x в строке запроса все может перейти в базу данных. И то, что я увидел после взлома, было то, что в базе данных все вещи, которые могут поступать в базу данных через строки запросов, были скомпрометированы со значениями, такими как cd etc/pwd .

Краткая версия: перейдите от расширения mysql к расширению mysqli и замените ваши запросы, которые принимают параметры для подготовленных инструкций ( вот руководство по быстрой установке ).

Но в конечном счете, обучение прямо сейчас PDO не займет столько времени, и это стоит усилий.

В качестве примечания:

Я понимаю, что использование PDO делает инъекции SQL практически невозможными.

Это неверно, в PDO можно написать инъективный запрос. Этот код в PDO так же плох, как в старом mysql-расширении (два вектора уязвимостей по цене одного здесь!):

 $pdo_obj->query("SELECT password FROM users WHERE id = '".$_GET['id']."'"); 

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