将ID(将在DB中插入)放入隐藏输入是否安全?

时间:2013-06-08 09:12:40

标签: php javascript jquery html security

以下是我的代码摘要:

我的网站基本上只循环某个表的所有行的内容;但有时,我需要从某一行获取个人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);
}

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

  

这里存在安全问题,因为用户可能只是更改隐藏输入的ID,这将允许他们插入各种无意义。

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

答案 1 :(得分:0)

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

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

您可以在会话中保存记录ID以将其隐藏起来,但黑客仍然可以尝试会话劫持。

这完全取决于你的后端安全性。