0

因此,我正在做一个项目,其中有两个页面 page_1 和 page_2,其中 page_2 仅在引荐来源为 page_1 时才会加载。

我最终使用来自:http://fullthrottledevelopment.com/php-nonce-library 的 URL Nonce构建它:http ://chrisbrittain.com/strong_links/page_1.php

这是我的帖子解释它:http ://chrisbrittain.com/strongly-linking-pages-together-via-url-nonces/

这里的总体目标是两个页面都在网络上面向公众。第 2 页有我希望其他人看到的“秘密”数据,但我不想让那个人登录任何东西。

因此,相反,我只想通过电子邮件向他发送一个链接,该链接会将他带到“秘密页面”......除了我通过电子邮件发送链接的人之外,没有其他人可以访问该页面。

该解决方案基本上使用两个页面之间的随机数握手。nonce 作为 GET 变量传递,在第 2 页上,使用 GET 传递的 nonce 和第 1 页和第 2 页上相同的秘密字符串计算 MD5 哈希。

问题!!!(对不起,我啰嗦了这么多。)

  1. 有没有更好的行业标准方法来做到这一点?

  2. 我在这个实现中看到的唯一真正的弱点是暴力 URL 检查(我相信它可以被 fail2ban 或其他方法阻止。)....还有其他 obvi 设计缺陷吗?

  3. 我知道 MD5 哈希现在被认为是坏的,但在这个实现中我认为它是安全的,因为我的假设是在这里击败系统的唯一方法是暴力 URL 检查(如所说可以作为 DDoS 攻击停止) .

无论如何...感谢您的阅读,任何评论/批评都会很棒。

4

1 回答 1

0

除非您信任此人,否则无法安全地控制对第 2 页的访问。您需要的访问控制量取决于您信任的人或您信任他们不会执行的操作。

如果您不能信任您授予访问权限的人,那么如果他们共享链接,那么任何人都可以访问该页面。

如果您可以信任您授予访问权限的人,那么一个秘密网址就足够了。也就是说,如果您将 page2 命名为某个秘密文件名,那么除了确保您的网络服务器没有列出所有页面的 index.html 页面外,几乎没有其他事情可做。

如果 page2 是动态的,和/或它必须位于该文件名,您可以简单地使用秘密查询字符串,例如:page2.html?secret=assdfadg. 在这种情况下,秘密就像密码一样。

显然,上述两种情况意味着该人可以非常轻松地共享链接。如果您给他们一个密码,人们可能不太愿意分享链接。

您可以通过简单地共享链接(意外)来阻止公众访问 page2 的方法是:

  • 使用密码
  • 检查 HTTP_REFERER(确保它来自 page1)

但是,如果您确保 HTTP_REFERER 来自 page1,则共享到 page1 的链接将同样容易地允许公共访问 page2。此外,HTTP_REFERER 很容易被欺骗。


概括

除非您信任您授予访问权限的人,否则您无法确保访问安全。如果您信任他们,那么一个非常简单的解决方案就足够了。

于 2012-09-03T01:14:22.103 回答