在PHP中安全地传递数据

时间:2013-05-04 02:47:45

标签: php mysql security

我有一个网站,允许用户A搜索和查看其他用户。 当用户A点击说用户B.我将用户B的id作为GET变量传递。然后我在视图中使用该id来显示适当的数据。这是好习惯吗?我应该公开用户ID吗?

此外,当用户A在用户B的个人资料上时,他可以向用户A发送消息。如何将用户B的ID安全地传递给我的控制器?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

有多种方法可以做到这一点。

我通常用于此类用例的一种方法是创建一个足够伪随机的唯一散列标识符,以便当它通过url传递时,用户将无法仅随机更改某些值它并获得另一个用户的个人资料。

E.g。假设您正在传递ID,则URL类似于:

showProfile.php?id=1256

将1256更改为1257可能会显示下一个用户。

假设您传递了一个足够随机的散列字符串:

showProfile.php?id=u4n5l4534mnk43nl34n

此类哈希不遵循序列,因此您无法更改字符/数字以获取下一个字符/数字。

这还取决于您希望在网站成员之间进行用户数据共享的安全性

答案 1 :(得分:0)

所以,我想当用户A点击用户B个人资料时,网址会变成site.com/profile.php?id=24 hmm? 24是用户B的个人资料。如果是这样的话,那就没有问题了。在某些时候,当您搜索用户的个人资料时,您将回显数据库中的内容,无论是他的ID,用户名还是姓氏。所以,id很好,但如果你需要专业,你甚至可以使用用户名,在htaccess的帮助下,它可能看起来像site.com/profile/john

因此,简而言之,您无法为每个配置文件回显一些内容,而这些配置文件尚未存在于数据库中。

但是查看您的代码,如果您在个人资料页面上使用,则提到mysql,如下所示:

$user  = $_GET['id'];
$query = mysql_query("SELECT * FROM USER WHERE id = '$user' ");

嗯......那是危险,让您的网站/数据库OPEN进行攻击。 因此,如果您使用类似于上面的内容,则应使用PDO