如何避免mysql中的增量ID安全性差距

时间:2015-07-09 19:10:59

标签: mysql security sorting

安全性和性能的最佳实践是什么,以避免让用户在数据库或其他数据集中看到渐进式IDed数据。

主要关注的是避免诸如

之类的网址
www.myweb.com/user/123

这当然适用于帖子,用户,文件或消息。

2 个答案:

答案 0 :(得分:2)

实施权限,以便只有经过授权的人才能查看/更改/删除数据。

如果您仍想隐藏来自用户或API使用者的增量ID,您可以向数据库添加一个哈希列并为其编制索引,然后公开该列而不是增量ID。

答案 1 :(得分:0)

隐藏增量ID

根据您的编程语言,您分配给用户的唯一ID可能不需要显示在URL中。例如,使用PHP,您可以使用$_SESSION[]数组为每个用户在服务器上存储值。这些变量永远不会被用户看到,但服务器将能够适当地识别每个用户(通过PHP cookie)并动态地为他们提供正确的页面。

例如,当用户登录您的网站时,在进行身份验证后,您的脚本可能会执行以下操作:

$sql = 'SELECT id FROM user_table WHERE name = :username';

// Prepare & execute SQL query, putting result in $sqlResult

$_SESSION['user_id'] = $sqlResult;

现在,只要用户想要访问他们自己的页面,您的服务器就会知道用您的主页模板填充哪些信息 - 并且URL对每个用户来说都是相同的。

如果用户想要访问其他用户的页面,您可以执行类似的操作:在选择要访问的特定用户页面时,您的脚本可以设置$_SESSION['visit_user']变量。因此,您可以使用适当的信息填充访问页面模板,并且您的用户将更加明智。

同样的策略可以应用于分配了增量ID的帖子,文件等。

但这是否必要?

正如您在previous post中提到的那样,有很多使用增量ID的网站示例 - 并且没有关于显示它们的疑虑。因为虽然这确实使恶意用户能够查看其他用户的ID等,但这并不一定会对您网站的安全构成威胁。如果您遵循基本的安全原则(需要强密码,观察MySQL用户和文件的权限,清理用户输入等),恶意用户是否可以猜测auto_incremented ID并不重要。除非您的网站可以以其他方式被利用,否则这些ID不是有价值的信息。