Php 在配置文件URL中显示用户ID安全吗?
在我的网站上,有一个用户的个人资料页面。我目前所做的就是通过一个Php 在配置文件URL中显示用户ID安全吗?,php,database,security,Php,Database,Security,在我的网站上,有一个用户的个人资料页面。我目前所做的就是通过一个GET请求传递用户ID,并使用它来查询用户的详细信息 因此,用户配置文件URL如下所示 http://www.example.com/user.php?id=345 所以,我的问题是,在URL中显示此用户的ID(用户表的主键)是否安全,以便任何人都可以看到它 这很正常 但我建议您进行表单验证以防止SQL注入。永远不要相信用户给你的东西 我会用那种表达方式,但另外 if (!preg_match('/^[0-9]+$/', $_GE
GET
请求传递用户ID
,并使用它来查询用户的详细信息
因此,用户配置文件URL如下所示
http://www.example.com/user.php?id=345
所以,我的问题是,在URL中显示此用户的ID(用户表的主键)是否安全,以便任何人都可以看到它 这很正常
但我建议您进行表单验证以防止SQL注入。永远不要相信用户给你的东西
我会用那种表达方式,但另外
if (!preg_match('/^[0-9]+$/', $_GET['id'])) {
echo 'ID disallowed.';
}
或有数字限制(匹配1到999999)
如果您不清理传入的数据,它将是。一般来说,系统本身不易受攻击,只是为第三方公开ID,不多也不少。作为建议,您可以在数据库中使用hash作为
id
(对于糟糕的肮脏示例md5(email
+salt)或类似的东西)。因此,这就像在一个看起来确实这样做的网站上显示?id=123
一样具有讽刺意味。(stackoverflow.com/users/3844510)@tharinduluck没关系,客户端不能直接写入PHP会话数据。客户端最多可以更改PHPSESSID,但这是一个很长的哈希,不太可能与另一个活动会话匹配。@UmairKhan当然可以-但这是代码的安全问题。公开用户ID(正如OP所要求的)不应该增加被黑客攻击的风险。
if (!preg_match('/^[0-9]{1,6}$/', $_GET['id'])) {
echo 'ID disallowed.';
}