Разве небезопасно делать идентификатор строк таблицы общедоступным? - PullRequest
2 голосов
/ 02 июля 2019

Так что на моем сайте есть статьи.Статьи могут быть одобрены или понижены.

В URL статьи вы можете достаточно четко увидеть ее идентификатор.Например:

www.website.com / Articles / 14 / this_is_the_article_title

И когда вы хотите повысить / понизить статью,post post также использует идентификатор статьи без какой-либо кодировки.

Это плохая практика или небезопасная?Если это так, что является лучшей альтернативой?

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Я бы не сказал, что это небезопасно. Многие сайты используют идентификатор в URL. Либо в запросе GET, либо в POST, но он также используется в качестве переменной пути.

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

Итак, вместо строк, идущих так:

ID    NAME
0     [username]
1     [username]
2     [username]

Вы можете построить их так:

ID      NAME
421456  [username]
197635  [username]
486597  [username]
0 голосов
/ 03 июля 2019

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

<?php
$articleId = 123; //these would be coming from $_GET.
$userId = 5001;
$somethingSalty = 'Constofsomesort' . floor(time() / 3600); //or no time aspect if you prefer

if ($articleId === $article->getId() 
         && $n === hash('sha256', $article->getId() . $user->getId() . $somethingSalty)) {...

А URL вашего голосования выглядит примерно так:

foo.com/vote?voteDir=1&articleId=123&n=cdc6365e49387cc04c6d2fa661670fb43c5473e0ae46480bf9512a30045b4829   
  • Ссылка для голосования не может быть предоставлена.
  • Уникальны для каждой статьи / пользователя и не могут быть подделаны.
  • Смягчает «повторные атаки».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...