«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2018/12/08 11:27:56  №1307965 1
'SELECT * FROM student LIMIT $limit OFFSET $offset'
Такие же запросы можно использовать? Просто в задаче про студентов написано, что нельзя переменные вставлять прямо в запрос. Но здесь нет никаких данных введенных пользователем, для них же защита не нужна?
Ответы: >>1308059 >>1308109
Аноним 2018/12/08 15:10:21  №1308109 2
>>1307965

А откуда ты в функции знаешь, откуда пришли данные? На них это не написано. Плюс, offset явно создается на основе данных пользователя.

Ну вот ты напишешь функцию:

function getStudent($limit, $offset)
{
....
'SELECT * FROM student LIMIT $limit OFFSET $offset'
...
}

Как проверить, что она безопасна? Где гарантия, что в нее всегда передают только числа? Это ты думаешь, что в нее передают только числа, но завтра кто-нибудь напишет

getStudents($_GET['limit'], ...)

И у нас инъекция.

Должно быть видно, что функция безопасна, без исследования остального кода. Она должна быть написана так, чтобы быть безопасной, что бы в нее не передавали.

Кстати, в случае чисел для защиты достаточно применить intval() или поставить тайп-хинт int, но через плейсхолдеры все же будет надежнее. Их убрать труднее, чем заменить int на string, не заметив что это для обеспечения безопасности.
Ответы: >>1308169 >>1308176
Аноним 2018/12/08 16:22:27  №1308176 3
>>1308109
А хотя не, что-то я невнимательно твой ответ прочитал. Чтобы кто-нибудь, кто 'в теории' будет использовать скрипт, не сломал ничего, нужно действительно использовать какую-нибудь защиту. Завтра сделаю.