2013-08-27 2 views
0

Я видел много веб-сайтов (включая SO и мои сайты) для хранения идентификаторов строк данных, извлеченных из базы данных в атрибуте HTML. Я знаю, что он может быть отредактирован пользователем на стороне клиента и, возможно, отправлен на сервер, чтобы обновить данные. Возьмите этот запрос в качестве примера и помните, что для upvoting комментариев:Сохранение безопасности данных

SELECT comment_id, comment FROM comments

Нормальный человек будет делать печать, как это:

<td data-commentid="<?php echo $row['comment_id']; ?>"><?php echo $row['comment']; ?></td>

и выход:

<td data-commentid="1">+1, beat me to it.</td> 
<td data-commentid="2">Damn! What is this?</td> 
... 

Когда пользователь отобразит некоторого пользователя хакерского типа, он попытается отредактировать комментарий с чем-то вроде 250 и нажмите кнопку upvote и наш невинный сценарий будет принимать его и upvote другого комментария с идентификатором 250, хотя это было визуально для комментариев с идентификатором 1 или 2.

Вопрос:

Есть ли способ избавиться от этого? Вы можете включить свою консоль и проверить SO также, когда вы изменяете свой атрибут, ссылающийся на комментарий важной информации, кажется, обновляет db с обновленным идентификатором атрибута.

+1

Аутентификация? Если пользователь не отправил комментарий № 250, у него не должно быть доступа на стороне сервера, чтобы его изменить. – ceejayoz

+0

, вы не можете запретить кому-либо использовать клиентские инструменты для работы с данными, хранящимися в браузере THEI на ИХ компьютере. Это Wild Wild Web - никогда не доверять чему-либо, поступающему от клиента. Если вы не хотите, чтобы комментарий # 250 был увеличен, тогда не разрешайте upvotes на нем, если пользователь не находится на странице, где комментарий № 250 должен быть перенаправлен. –

+0

Ваш выбор заключается в использовании GUID или другого неинкрементного типа данных для ключа комментариев или реализации проверки безопасности представленных значений, что может быть невозможно для анонимных пользователей. – Grax

ответ

7

Это не нападение.

Нет никакой разницы между выполнением вашего «взлома» и фактическим просмотром комментария № 250 и его продолжением.

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

Короче:

Никогда не доверяйте любую информацию, предоставленную клиентом.

Всегда проверяйте, что вход имеет смысл и что пользователю разрешено принять действие.

+0

Логическим следствием никогда не доверяющего является ** подтверждение всего **. – tadman

Смежные вопросы