Нажав на кнопку больше, чем один раз - PHP - PullRequest
1 голос
/ 21 марта 2012

В моей системе комментариев я заметил небольшую ошибку безопасности.За несколько секунд, которые требуется для загрузки страницы, пользователь может несколько раз нажать кнопку «Опубликовать», отправив несколько комментариев в базу данных вместо одного.Мне удалось это исправить с помощью простого отключения Javascript, но потом я вспомнил, что люди могут легко редактировать это, используя Firebug или Inspect Element.

Есть ли какое-то решение PHP для этого?Я новичок, поэтому, пожалуйста, не говорите технических слов.

Спасибо.:)

Ответы [ 5 ]

1 голос
/ 21 марта 2012

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

0 голосов
/ 21 марта 2012

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

Пример:

session_start();

// This is something you already have, sort-of
$message = $_POST['message']; // Message from user
$post    = $_GET['id']        // Id of post to which he commented

if (isset($_SESSION['message']
 && isset($_SESSION['id']
 && $message === $_SESSION['message']
 && $post === $_SESSION['id'])
{
  // We found out the user has already posted this
  echo 'Error: you clicked twice!';
  exit;
}

// Process message here as you already do

// Store now this just posted message in a session
$_SESSION['message'] = $message;
$_SESSION['id']      = $post;

При использовании этого метода вы уверены, что на сервере дважды не сохраняются данные. Однако вам все равно нужно отключить эту кнопку с помощью javascript, поскольку вы не можете отключить эту кнопку с помощью php до тех пор, пока идет ваш запрос.

0 голосов
/ 21 марта 2012

Вы можете скрыть кнопку при нажатии и сделать видимой другую поддельную кнопку.

0 голосов
/ 21 марта 2012

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

0 голосов
/ 21 марта 2012

Хорошо, вы можете использовать сессию для хранения последнего комментария и времени. Я полагаю, именно так Wordpress делает это.

Так что ищите

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