0

这是我的代码的摘要:

我的网站基本上只是循环了某个表的所有行的内容;但是,有时,我需要从某一行获取个人 ID。隐藏输入有效,但我知道这将对安全造成很大负担。从隐藏输入中获取 ID 后,我需要将其插入到另一个表中。黑客可以简单地更改隐藏输入的值并侵入系统。我找不到在服务器端验证它的方法。加密可能会有所帮助,但我认为黑客总能找到解密它的方法。有谁知道如何使这更安全?

更新: 我很抱歉对我的网站所做的有点含糊。基本上,它只是一个类似于 Facebook 的喜欢和不喜欢系统。我的表结构为:id、user_that_liked_id、post_id。当用户点赞一个帖子时,该帖子的 ID 被插入到 post_id 中,并且喜欢该帖子的用户的 ID 被插入到 user_that_liked_id 中。这里存在一个安全问题,因为用户可以简单地更改隐藏输入的 ID,这将允许他们插入各种无意义的内容。请参考下面的代码。

HTML(摘要):

<div class="thumbsup mini_thumbs" name="mini_thumbs">


<input type="hidden" value="<?php echo $row->id; ?>" id="post_id"/>


<input class="up" name="thumbsup_vote" type="submit" value="1" title="Vote up" onclick = "liked(this)"  />


<input class="down" name="thumbsup_vote" type="submit" value="0" title="Vote down" onclick = "disliked(this)" />
</div>

JavaScript/jQuery(总结)

function liked(e) {
var post_id = $(e).siblings("#post_id").val();
alert(post_id);
}
4

2 回答 2

1

如果您将其提供给客户端,则用户可以更改它。

如果您无法避免将其提供给客户端,那么在提交表单时,您需要检查用户是否已通过身份验证(即您知道用户是谁,例如因为他们输入了密码)和授权(即他们被允许做任何请求所要求的事情)。

您如何确定授权完全取决于您的业务规则(您尚未向我们解释)。这些可能类似于:

IF the id belongs to an entry created by the user
OR IF the user is an admin

显然,这需要您记录哪些用户创建了哪些条目或哪些用户是管理员。

这里存在一个安全问题,因为用户可以简单地更改隐藏输入的 ID,这将允许他们插入各种无意义的内容。

我能想象到的唯一一种胡说八道可能是多次喜欢一个帖子,或者喜欢用户看不到的帖子。这只是回到授权。如果请求重复或不允许用户查看他们尝试投票的帖子,则拒绝该请求。

于 2013-06-08T09:17:00.857 回答
0

假设您在服务器端具有良好的身份验证和验证,在 html 中显示 ID 值是可以的。

例如,我假设您的代码是更新博客上的帖子或类似内容?更新时用户必须登录吗?您是否检查当前登录的用户是否有权更新该特定帖子(IE 通过设置用户所在的用户组有权编辑帖子或编辑所有帖子,或者帖子的作者是登录用户)。

您可以将记录 ID 保存在会话中以对用户隐藏它,但黑客仍然可以尝试会话劫持。

这一切都与您的后端安全有关。

于 2013-06-08T09:18:36.077 回答