2012-08-29 98 views
0

用户故事:

我是Web应用程序的管理员,我需要删除Web应用程序的另一个用户。我从用户列表中选择用户,然后可以从后续页面中删除用户。

电流(错误)解决方案:

现在我保存在一个隐藏的表单元素用户要被删除的ID /主键(太可怕了,太可怕了,太可怕了,我知道 - 有人可以使用元素检查器删除任何用户...)。什么是这样的最佳做法?我是否将要删除的用户ID /主键保存为$ _SESSION变量?一块饼干?一个哈希URL并用$ _GET获取它?

编辑

有不同的用户组,由不同的管理员来管理。 A组的管理员不知道B组(以及它的用户)等。所有用户都在一个表中,所有用户都可以在任意数量的组中。我需要保护用户的ID并将其从DOM中删除,以便有人不能修改它并删除没有管辖权的用户。

+1

“有人可以删除与元素督察的用户” ---为什么你的管理部分没有固定? – zerkms

+4

如果'删除'页面得到了充分的保护,只有你有权访问它,那么隐藏的表单字段就没问题 - 毕竟,你在窃取你自己的字段没有意义。 –

+0

我假设你是以管理员身份登录的?你不能从你自己的$ _SESSION中检查你是否是登录用户,只有“then”允许删除脚本? – darma

回答

1

对于这样的任务,没有必要使用$_SESSION:会话用于维护页面之间的状态,这里没有这种情况。

处理资源[如用户]时的最佳做法是设置RESTful environment

虽然你还没有建立这样的系统还没有,你仍然可以利用HTTP请求与$_GET$_POST PHP数组:

<form action="delete.php" method ="post"> 
    <select id="user" name="user"> 
     <option value="1">Joh Doe</option> 
     <option value="2">Jane Doe</option> 
     <option value="3">Dun No</option> 
    </select> 
    <input type="submit" value="Submit"/> 
</form> 

当您提交此表,你犯了一个POST请求delete.php,并且$_POST数组将包含一个带有选定值的user密钥 - 然后您可以使用PDO准备的语句通过此密钥删除用户。

针对拒绝删除权限,您必须设置您的脚本以阻止请求,如果登录的用户没有足够的权限 - 这是您必须正确设置的另一个层,因此我建议您使用框架[如Symfony或YII],以便您可以利用其安全组件。

隐藏的领域理念落后于CSRF protection,所以它毫无意义 - 是的它依赖于会话。

+0

感谢您回答有关'$ _SESSION'的问题并提供了如此详尽的答案。我也会研究REST。 – nulluser

0

会话没有错。会话用于存储多于一页的临时时间。

1

我只是确保在删除用户时验证用户权限。

很好写,例如函数isUser()用于检查session/cookies中的数据,如果您被嵌入,则返回true,然后您还可以访问var,以声明用户权限。另外,当你检查你的数据是否正常,并且你实际登录了正确的数据时,你可以创建$ user_rights var,其中包含访问级别(等等)。

然后简单:

if(isUser() and $user_rights == 9) { /* code here, 9 is e.g. admin right */ }