Не используйте запросы GET для внесения изменений! Будьте RESTful; используйте POST (или PUT) вместо этого браузер должен предупредить пользователя, чтобы он не перезагружал запрос. Перенаправление (с помощью перенаправления HTTP) на страницу квитанции с использованием обычного запроса GET после POST / Запрос PUT позволит обновить страницу без предупреждения о повторной отправке.
РЕДАКТИРОВАТЬ:
Я предполагаю, что пользователь каким-то образом вошел в систему, и поэтому у вас уже есть способ отслеживать пользователя, например сеанс или аналогичный.
Вы можете сделать отметку времени (или случайный хэш и т. Д.) При отображении формы, сохраняя ее как скрытое поле (просто помимо токена анти-межсайтового запроса, я уверен, что у вас уже есть там ) и в переменной сеанса (которая надежно хранится на вашем сервере), когда вы получаете запрос POST / PUT для этой формы, вы проверяете, что метка времени такая же, как и в сеансе. Если это так, вы устанавливаете временную метку в сеансе на какую-то переменную, которую трудно угадать (например, временная метка, объединенная с некоторой секретной строкой), тогда вы можете сохранить данные формы. Если кто-то повторит запрос сейчас, вы не найдете то же значение в переменной сеанса и не отклоните запрос.
Проблема с этим заключается в том, что форма недействительна, если пользователь щелкает обратно, чтобы что-то изменить, и это может быть немного жестким, если только вы не обновляете деньги. Поэтому, если у вас есть проблемы с «глупыми» пользователями, которые обновляются и нажимают кнопку «Назад», тем самым случайно репостая что-то, простое использование POST напомнит им не делать этого, а перенаправление сделает это менее вероятным. Если у вас есть проблема с злонамеренными пользователями, вам следует также использовать временную метку, хотя это иногда сбивает пользователей с толку, хотя, если пользователи намеренно публикуют одно и то же сообщение снова и снова, вам, вероятно, нужно найти способ их заблокировать. Использование POST, наличие метки времени и даже полное сравнение всей базы данных для проверки дубликатов сообщений вообще не поможет, если злоумышленники просто напишут скрипт для загрузки формы и автоматической отправки случайного мусора. (Но защита межсайтовых запросов делает это намного сложнее)
person
Stein G. Strindhaug
schedule
20.11.2008