3

所以我会直接说,显然我知道这实际上并不安全,不要因此而责备我。我只是从懒惰的角度对这个问题感兴趣。

我有一个网站,其中包含一些我想对公众“隐藏”的信息。没有什么重要或脆弱的;我只是不希望人们找到它并弄乱它。我已经有一个 robots.txt 文件禁止所有爬行。页面上没有链接(或将没有从其他站点到此站点的链接)。

设置

example.com 会将您带到“不允许访问”页面,而example.com?real=fun实际上会为您提供内容。除非查询键/值对正确,否则 PHP 不会实际运行页面。那么我是否可以合理地假设没有人会偶然找到此页面,并且如果他们这样做,他们将无法进入内容?

是的,我很懒,但我还是想知道。

编辑• 我不是在寻找“如何做到这一点”。我已经做到了。如果一个人有其他基本方法可以进入使用这种技术的页面,正确的答案将是解决。

4

6 回答 6

2

与输入密码相比,这肯定是“隐藏”某些东西的更好方法。受密码保护的站点显然意味着在栅栏后面隐藏着一些东西,而秘密查询字符串基本上什么也没有。

另一方面,如果秘密字符串泄露,那么您的安全系统就会遭到破坏。如果提供了秘密查询,我建议加倍并触发常规登录页面。然后,您无需在 URL 中查看查询字符串即可工作(如果您链接到任何外部内容,则不会显示在其他站点的引用日志中)。

通过这种方式,您可以获得所需登录的安全性,甚至没有明显的“这里有安全内容”的额外安全性。

于 2011-06-22T20:53:11.767 回答
2

“合理”是由上下文定义的。新奇的页面背后没有任何真正敏感的东西?当然。请记住,如果您曾经将“隐藏”链接发送给任何人,他们可以轻松地将其发布在某个 IRC 聊天室中,或者有人可以在您离开时查看您的浏览器历史记录键盘。请记住,任何知道http://example.com/index.php?real=fun的人都可以到达那里。一旦他们知道,“没人可能知道”对你没有帮助。

现在,如果您真的对安全性感兴趣,您可以在某个数据库中设置一个临时 ID 值,其中包含随机生成的 6 或 8 个字符散列和到期日期(例如,一天)。给朋友发送电子邮件 example.com/index.php?real=8AC02F,他可以在一天左右的时间内访问该内容。编写一个带密码的脚本来生成哈希和到期日期并将它们存储在数据库中。

不要忘记删除过期哈希的 cron 脚本,你不想把事情弄得一团糟。

于 2011-06-22T21:14:25.310 回答
1

是的,假设他们无法进入内容是合理的,因为 Apache 将看到 index.php 请求并简单地处理资源。他们无法简单地猜测您在后端服务器中硬编码的内容,除非它像某些共享网络托管并且服务器上的其他用户可以看到您目录的内容。

将其添加到 www.example.com 根目录的 index.php 文件的顶部

if (empty($_GET))
    exit("nothing to see here"); 
elseif ($_GET['real'] != 'fun')
    exit("nothing to see here"); 
于 2011-06-22T20:48:22.137 回答
1

您依靠默默无闻的安全性。它在一定程度上起作用,但你不应该指望它。您的问题的答案是“是”,这是合理的,但不要在生产中依赖它。

最好的方法是使用Basic Http Auth仅允许具有登录凭据的人访问页面。

稍微懒一点的方法是显示一个没有信息的表单,他们必须输入一些随机字符串并提交。如果字符串正确,它将在服务器上设置一个会话,允许他们访问该页面。

于 2011-06-22T20:50:00.547 回答
1

如果您不认真关注安全性并且只是试图让人们离开几页,那么您有几个选择。再次澄清一下,我不会仅仅将这些想法用于银行式安全性......

  1. auth 系统的基本前提是设置一个 cookie 或 session id,您可以检查该用户是否在您要保护的每个页面上登录。没那么难!只是不要将会话的值设置为您不想被劫持的东西。
  2. Apache 可以让您保护文件或文件夹,这是一种让人们远离某些事情的快速而肮脏的方式。
  3. 有一些非常好的开源身份验证系统可以相对容易地安装。
  4. 像这样的简单 tuts可以为您提供一个完整的身份验证系统,基本上完成并准备就绪。
于 2011-06-22T20:54:14.743 回答
0

你问这个解决方案是否“合理”。由于您显然不是指“安全”,因此不清楚您的意思是什么。我猜你的意思是“可能且易于实施”,在这种情况下,答案是yes。但请随时编辑您的问题以使其更清晰。

于 2011-06-22T20:48:28.933 回答