безопасный способ удалить записи с php - PullRequest
0 голосов
/ 10 марта 2009

У меня есть следующий фрагмент кода для удаления записей из базы данных с заданным первичным ключом. Это вызывается через запрос AJAX, через GET. Любой, кто должен был исследовать мой JavaScript, мог обработать URL и удалить произвольные записи. Что я могу сделать, чтобы предотвратить это?

Не использовать GET?

Использовать сеансы?

if($cmd=="deleterec") {
    $deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?";
    if ($delRecord = $con->prepare($deleteQuery)) {
        $delRecord->bind_param("s", $pk);
        $delRecord->execute();
        $delRecord->close();
        echo "true";
    } else {
        echo "false";
    }
}

Ответы [ 7 ]

3 голосов
/ 10 марта 2009

Неиспользование GET ничего не изменит. Вы должны использовать сеансы для управления «контролем доступа», прежде чем вы достигнете этой точки в коде.

То есть, когда сделан AJAX-запрос, вы должны в этот момент через сеанс подтвердить, что лицо, выполняющее запрос, может выполнить удаление, прежде чем оно действительно будет выполнено.

Подумайте, как бы вы проверяли разрешения «не AJAX» и делали то же самое здесь.

2 голосов
/ 10 марта 2009

Вы можете присвоить своим записям непоследовательный случайный уникальный идентификатор для использования в запросах AJAX.

По-прежнему не самое безопасное решение, хотя его легко интегрировать в текущую систему.

1 голос
/ 10 марта 2009

В вашем вопросе есть два важных аспекта.

Должен ли авторизованный пользователь иметь возможность удалить любую запись, которую считает нужной? В этом случае ваша проблема заключается в том, чтобы убедиться, что запрос поступил от авторизованного пользователя. В этом случае использование сеанса PHP - это один из способов убедиться, что запрос был выполнен пользователем, которого вы аутентифицировали. Конечно, со всеми технологиями вы должны убедиться, что используете сессию PHP правильно. Есть много статей об этом матере. PHPsec.org есть здесь .

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

Лучше всего выполнить обе проверки. Во-первых, ваше приложение должно проверить, является ли пользователь, выполняющий удаление, действительным пользователем и ему разрешено удалять (очень просто реализовать с помощью сеансов php), а во-вторых, убедиться, что пользователь может удалить конкретную запись на основе некоторой формы владения.

1 голос
/ 10 марта 2009

Что ж, если не все могут удалить запись, убедитесь, что она стоит за паролем, поэтому удаление могут выполнять только авторизованные пользователи. Создайте себе логин, который добавит кнопку «Удалить» на странице впоследствии, а на стороне PHP убедитесь, что пользователь авторизован при обработке команд.

Да, да, убедитесь, что вы всегда пропускаете значение подтверждения через POST для проверки, а не просто параметр GET, это лучшая практика даже для авторизованных пользователей.

1 голос
/ 10 марта 2009
  1. Используйте пост, а не получите
  2. Встраивайте скрытые уникальные идентификаторы в любые формы, которые будут выполнять это действие, и убедитесь, что возвращаемый вами идентификатор был выдан вами
  3. Запутать имена URL / параметров
  4. Создайте уникальные идентификаторы для строк и не открывайте их извне, чтобы злоумышленник не мог выбрать строку для удаления.
0 голосов
/ 02 января 2013

Перед удалением записей необходимо проверить, авторизован ли пользователь и разрешено ли удаление.

0 голосов
/ 10 марта 2009

Не показывать CRUD методы через Ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...