Я понимаю, что использование PDO делает инъекции SQL практически невозможными. Однако на данный момент у меня нет времени изменить весь код, связанный с базой данных, на нашем веб-сайте. (Тем более, что я новичок в PDO, есть определенная кривая обучения). Поэтому я хочу знать, какие функции mysql / php будут обеспечивать ту же безопасность, что и PDO.
Будут ли эти две точки достаточно?
is_numeric
). 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 предоставляет только инструменты для защиты и упрощения их использования. Вы всегда должны всегда заботиться о том, чтобы проверить и фильтровать вход самостоятельно. Но с помощью подготовленного оператора вы можете, по крайней мере, сообщить базе данных о том, что должно быть параметром, и что должно быть частью запроса.