TerryBear
@TerryBear

В каких ситуациях можно обойтись без плейсхолдеров в запросе?

Недавно начал изучение pdo, и был крайне удивлен насколько легко можно защитить свою бд от инъекций (плейсхолдеры и белые списки). Но! Возник вот такой вопрос: абсолютно ли все значения необходимо защищать плейсхолдерами, или же их разумно будет использовать только при передаче в запрос значений непосредственно от юзера?
Вот пример, в котором пользователь даже никак не влияет на данные запроса, однако, человек зачем-то закрыл id:
// получение названия категории по её ID
    function readName() 
    {

        // Запрос
        $query = "SELECT name FROM " . $this->table_name . " WHERE id = ? limit 0,1"; 

        // подготавливаем запрос
        $stmt = $this->conn->prepare($query);

        // присваиваем плейсхолдеру значение
        $stmt->bindParam(1, $this->id);

        // отправляем запрос
        $stmt->execute();

        $row = $stmt->fetch(PDO::FETCH_ASSOC);

        $this->name = $row["name"];
    }
}
  • Вопрос задан
  • 89 просмотров
Решения вопроса 2
@humoured
Вы всё на свете найдёте в коробке с карандашами
Использовать плейсхолдеры нужно везде, даже там, где казалось бы, нет обработки пользовательских данных.

Нельзя быть уверенным, что пользователь никак не повлияет на значения. Для приведённого кода функции readName может существовать миллион ситуаций, когда значение переменной $this->id перезаписывается некорректными данными.
Ответ написан
Комментировать
Lastor
@Lastor
В чем сила, брат? В ньютонах.
Обойтись без плейсхолдеров можно в случаях, когда вы точно уверены в типе, валидности и происхождении данных.
На начальных этапах следить за этим не сложно. Но ваше приложение будет развиваться и расти. Помнить что где и откуда станет труднее. В моей практике и вовсе был случай, когда я, допустив ошибку, сам себе сделал инъекцию после которой пришлось поднимать бд из бэкапа.
Сам процесс принятия решения плейсхолденить или не плейсходерить - уже когнитивный труд. А трудолюбие обратно пропорционально интеллекту. Проще всё всегда плейсхолдерить и жить спокойно. При этом освободившийся ресурс мозга найдет себе более рационально применение.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
Здесь уместна логика, как в анекдоте про бармена, который каждый день наливал проверяющему 90 грамм вместо заказаных ста. "Мне выгоднее тебе каждый день штраф платить, чем руку сбивать". Вот и программисту должно быть больно видеть приведенную конструкцию, а время, потраченное на рассуждения о том, безопасна она или нет, лучше потратить с большей пользой.
Ответ написан
Ваш ответ на вопрос

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

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