Я видел много веб-сайтов (включая 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 с обновленным идентификатором атрибута.
Аутентификация? Если пользователь не отправил комментарий № 250, у него не должно быть доступа на стороне сервера, чтобы его изменить. – ceejayoz
, вы не можете запретить кому-либо использовать клиентские инструменты для работы с данными, хранящимися в браузере THEI на ИХ компьютере. Это Wild Wild Web - никогда не доверять чему-либо, поступающему от клиента. Если вы не хотите, чтобы комментарий # 250 был увеличен, тогда не разрешайте upvotes на нем, если пользователь не находится на странице, где комментарий № 250 должен быть перенаправлен. –
Ваш выбор заключается в использовании GUID или другого неинкрементного типа данных для ключа комментариев или реализации проверки безопасности представленных значений, что может быть невозможно для анонимных пользователей. – Grax