2011-06-18 127 views
0

人们通常会如何验证从数据库中获取的信息是否确实与活动用户相关?检查权限?

例如:假设我们在用户x的收件箱中列出了一组PM,我如何确保只有用户x可以从收件箱中获取某些内容,而不是其他人(这可以通过“hacking”课程地址)。

很明显,我可以将活动用户名与数据库表中的内容进行比较,但是有没有简单的方法可以在某种程度上控制全局,而无需将活动用户名与数百个不同表格进行比较以执行不同的操作?

+0

这应该是这样做到这一点或$ _SESSION键!否则就是非常昂贵的方式......为每个用户分别创建不同的数据库和表(这会不会很紧张?)。 – doNotCheckMyBlog

+1

当你在它只是购买每个用户一台服务器。 –

+1

另外,查看'Authentication'和'Authorisation'之间编程的区别。你需要先认证你的用户证明他们的ID,然后一旦完成授权他们检查他们的收件箱(但不是其他人) – CResults

回答

3

假设您正在提取登录用户的消息开头,否?例如:

"SELECT * FROM `messages` WHERE `recipient` = '$loggedInUserId'" 

如果是这样,我不明白这个问题。如果这不是你正在做的事情,那么你做错了什么。

+0

是的。但是我想知道的是,如果有一种方法可以全局控制这些**,而不是对每个函数使用新的查询。 – Nisto

+0

@Nisto如果你需要这些消息,你将不得不为他们查询。 “为每个函数使用新的查询”是什么意思?你没有给我们提供任何功能 –

+0

@Nisto然后没有。你的数据库不知道你的用户的任何信息,所以你不能告诉它“无论我要查询什么,我只是指只有当前用户”。这不是它的工作原理,而且很可能不是你想要的。您可以做的最好的做法是自己创建包装器对象/函数*自动*将用户标识插入到查询中。 – deceze

2

那么你的应用程序跟踪用户会话,并确保安全性。即当用户登录服务器设置cookie与会话ID,并通过会话变量你的服务器的请求页面将知道什么用户真正要求的东西(或者可能根本没有登录的用户,如果没有cookie),因此您的应用程序可能会使用用户会话和请求URL中的id来确定它是否应显示请求的内容,或显示错误消息或重定向,因为用户正试图访问不是他的内容。当然这是更多的涉及,但这是一个开始。我建议阅读php会话和cookie。

1

这是数据库查询条件用于......仅选择相关数据。

一般人一旦被记录在你从$_SESSION变量得到他们的用户名和密码,查询数据库,以确保它们是有效的用户,然后抓住任何你需要使用WHERE username = '$username'