所以在我的网站上,我有文章。文章可以被赞成或反对。
在文章的URL中,您可以很清楚地看到其ID。例如:
www.website.com/articles/ 14 / this_is_the_article_title
当您要对文章进行上/下投票时,发布请求也将使用该文章的ID,而无需进行任何编码。
这是不良做法还是不安全?如果是这样,最好的选择是什么?
答案 0 :(得分:0)
这种感觉主要是关于讨论的。不确定此答案是否真的有帮助/并不完全明显...但是,假设需要通过身份验证才能投票,则可以执行以下操作:
<?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)) {...
您的投票网址类似:
foo.com/vote?voteDir=1&articleId=123&n=cdc6365e49387cc04c6d2fa661670fb43c5473e0ae46480bf9512a30045b4829
答案 1 :(得分:0)
我不会说这是不安全的。许多站点在URL中使用ID。可以在GET或POST请求中使用,但也可以用作路径变量。
如果您认为通过网络抓取您的网站是不安全的,那么您可以将其称为“安全隐患”,因为用户可以编程从0到最后一个用户/帖子/产品ID范围内的漫游器并抓取数据。但是,如果您使用随机ID,则可以避免这种情况。因此,例如,您对表中的每一行使用不同的六位ID。无需生成ID升序,而是可以生成随机的六位数代码,并将其分配给行(如果数据库中尚未存在该代码)。
因此,而不是像这样的行:
ID NAME
0 [username]
1 [username]
2 [username]
您可以这样构建它们:
ID NAME
421456 [username]
197635 [username]
486597 [username]