1

我的许多页面是使用 $_Get 从 MySQL 中提取的结果生成的。这意味着网址是这样结束的/park.php?park_id=1。这是一个安全问题吗?从 URL 中隐藏查询字符串会更好吗?如果是这样,我该怎么做?

此外,我在某处读到 Google 不会使用 索引 URL ?,这将是一个问题,因为这些是我网站的主页。这有什么道理吗?

谢谢

4

2 回答 2

5

如果这是敏感信息,这只是一个安全问题。例如,您将用户发送到此 URL:

/park.php?park_id=1

现在用户知道当前正在查看的公园在数据库中的系统标识符为“1”。如果用户随后手动请求会发生什么?:

/park.php?park_id=2

他们是否损害了您的安全?如果不允许他们查看公园 ID 2,则此请求应适当失败。但问题是他们碰巧知道ID 是 1 还是 2?

在任何一种情况下,用户所做的只是发出请求。服务器端代码负责适当地处理该请求。如果不允许用户查看该数据,则拒绝该请求。不要试图阻止用户提出请求,因为他们总能找到方法。(他们可以手动输入。即使一开始就没有访问过您的网站。)安全性发生在响应请求而不是发出请求时。

有些数据他们是不允许知道的。但 ID 可能不是该数据。(或者至少不应该,因为数字 ID 很容易猜到。)

于 2013-06-24T14:39:57.027 回答
2

不,这绝对没有道理。

来自客户的任何数据都可能受到欺骗。无论它是在查询字符串中,还是在 POST 表单或 URL 中。就这么简单...

至于“谷歌不索引带有?”的网址,谁告诉过你不知道他们在说什么。有“搜索引擎优化”最佳实践,但它们与“谷歌不索引”无关。它比那更细粒度。是的,谷歌会很好地索引你。

@David 确实显示了在 URL 中使用标识符的一个潜在问题。事实上,这有一个非常具体的名称:A4:不安全的直接对象引用

请注意,这并不是使用 ID 不好。这是您需要授权用户访问该 URL。因此,通过您向用户显示的链接单独执行权限是BAD。但是,如果您在访问 URL 时也对它们进行了授权,那应该没问题。

所以不,简而言之,你很好。您可以使用“漂亮的网址”,但不要因为您在此处发布的任何内容而觉得您必须这样做......

于 2013-06-24T15:33:23.593 回答