@Dreaded

Что почитать по составлению безопасных sql запросов?

Нашел довольно таки интересную статью на хабре по защите от SQL инъекций . Всё бы ничего, но статья написана пять с половиной лет назад. Мне как человеку который совсем недавно начал изучать PHP и SQL сложно оценить актуальность написанного, но есть подозрение, что за это время много чего поменялось.
Собственно говоря вопрос: может быть есть нечто похожее, но написанное с поправкой на новые версии и вообще актуальные тенденции? Оговорюсь, что хотелось бы найти материал похожий по стилистике и смысловому наполнению на приведенную мной статью. Ну то есть без всяких многочасовых видеокурсов и огромных книг.
  • Вопрос задан
  • 291 просмотр
Пригласить эксперта
Ответы на вопрос 2
@Vasiliy_M
Там все актуально до сих пор. Написанное было актуально лет 10 назад, актуально будет еще долго. Принципы те же самые. Ничего не изменилось. Автор той статьи - очень авторитетный товарищ и на этой теме "собаку съел". Он многих "учил" в онлайне еще тогда, когда 95% населения тостера под стол пешком ходили. Вот кстати его сайт еще - phpfaq.ru с очень ценной информацией.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Базовые принципы на то и базовые, что не меняются со временем. Я бы только переформулировал немного по-другому,
  • Данные подставляем в запрос только через плейсхолдеры
  • Все остальное - только после проверки через белые списки

И еще бы добавил что эти правила должны соблюдаться безусловно, в 100% процентов случаев, без рассуждений типа "вот эти данные у нас безопасны, их можно не защищать".

Если же говорить о тенденциях, то с чистым SQL сейчас никто практически не работает. 95% запросов выполняются через ORM. Т.е. вместо
$stmt = $pdo->prepare("SELECT * FROM user where id = ?");
$stmt->execute([$id]);
$user = $stmt->fetch();

пишем просто
$user = User::find($id);
при этом защита уже вшита у ORM внутри и думать о ней не надо

Ну а если надо сделать более сложный запрос, то опять же, есть развитые Квери билдеры, у которых защита также уже встроена. И только в редчайших случаях нужно писать чистый SQL, и только тогда нужно вспоминать про ручную защиту от инъекций.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы