Как можно обезопасить метод удаления данных?

236
05 января 2022, 10:40

Есть следующий код, задача которого удалить данные из бд. Сейчас все данные удаляются при переходе по ссылке localhost/?id=666. Понимаю что это говнокод, и не понимаю как можно сделать правильно. Направьте пожалуйста)

public $id;
public function __construct() {
    $this->id = $_GET['id'];
}
public function delete() {
    $dbh = Db::getConnect();
    $sth = $dbh->prepare("DELETE FROM posts WHERE id = '$this->id'");
    $sth->execute();       
}

И html ссылка:

<a href="<?php echo '?id='.$post['id'] ?>" name="id">del</a>
Answer 1

В целом другого особо не дано.

Есть два варианта:

1) Это просто по ссылке

2) Через форму, в которой можно еще передать csrf токен.

(Добавлено: через форму более правильный вариант чем через ссылку; методы DELETE или POST, не GET)

Главное, чтобы данный функционал был закрыт от пользователей, которым он не должен быть доступен. Если, например всего один админ на сайте, и других пользователей не предполагается - то достаточно обычной авторизации.

Если есть несколько ролей - то разделение по ролям.

В общем основной посыл - так удалять это нормально, главное защитить от внешнего посягательства.

Единственная серьезная логическая ошибка - вы делаете подготовленный запрос, но пихаете в него сырые данные. Это бессмыслица. Надо подготавливать запрос с плейсхолдером, а потом сетить параметры.

Примерно как то так:

$dbh->prepare("DELETE FROM posts WHERE id = ?");
$dbh->bind_param("d", $this->id);

https://www.php.net/manual/ru/mysqli-stmt.prepare.php

READ ALSO
Время полуночи текущей даты в секундах UnixTimestamp

Время полуночи текущей даты в секундах UnixTimestamp

Необходимо на получить время полуночи текущей даты (например, 1812

98
Как удалять изображения в функции delete?

Как удалять изображения в функции delete?

Мне нужно чтобы удалялись изображения из папки uploadНапример если у пользователя в бд сохранено имя изображения (Esfejih

176
Как убрать валидатор в woocommerce?

Как убрать валидатор в woocommerce?

В woocommerce на странице корзины используются эти шорткоды:

210