【问题标题】:Hiding actual link in hyperlink在超链接中隐藏实际链接
【发布时间】:2011-10-04 01:13:07
【问题描述】:

我有

echo <a href=\"javascript:;\"  onClick=\"window.open('". $link ."','no','scrollbars=yes,width=550,height=400')\" >View report</a>

$link 包含敏感信息,所以我想知道是否有一种简单的方法可以防止当您在浏览器上“查看源代码”时显式显示此链接。 href 的任何替代方法都可以。我只需要给用户一个选项,在他提交一些数据后单击并查看他的处理结果。我想避免在提交处理后立即出现自动弹出窗口。

更新:所以 $link 是一个包含用户 ID 和密码的 GET URL。它现在是内部的,所以很好,但我正在考虑将来把它放在我们的在线服务器上。我是 PHP 的新手,所以这可能不会在不久的将来,因为我不太了解需要为 Internet 上的实时站点实现的安全功能。现在,似乎利用数据库将是最好的方法。如有错误请指正,谢谢大家的支持!

【问题讨论】:

  • 您意识到,即使您设法做到这一点,结果页面的 URL 仍然可见?即使只是到 JavaScript 控制台和一个快速的document.location;?

标签: php hyperlink href


【解决方案1】:

如果用户必须导航到链接,则无法真正隐藏信息。您应该重新考虑您的流程是如何工作的,因此敏感信息不会显示在链接中。

也许您可以将信息存储在数据库表中,链接将只使用包含该信息的行的 ID。

【讨论】:

  • 感谢您的意见。我阅读了有关在数据库上存储信息并引用数据库 ID 的信息。似乎对于这种链接结构,数据库路由器是唯一的方法。
【解决方案2】:

简单地说:不。如果您将我发送到一个 URL,我将能够使用某种工具看到它。 Wireshark、Fiddler 等。考虑使用不同的链接结构。

【讨论】:

  • "因此 $link 是一个包含用户 ID 和密码的 GET URL。"这很糟糕,很明显,正如你所知道的。使用会话来存储这些信息,或者使用框架(CI / CakePHP)轻松地将变量从控制器传递到控制器。
  • 是的,我知道。我真的需要研究这个框架业务。我不确定什么是“框架”,但听起来我应该实现它,即使我是一个大菜鸟。我在考虑 Zend 框架。
  • 可能会为此创建另一个线程,但我会推荐 CodeIgniter。学习和学习非常简单,有很多文档(对新开发人员很重要),并且有很好的支持。它不是最强大的框架,但对于您的项目来说,它会是完美的。
【解决方案3】:

如果用户已经拥有一个会话,这是一个选项:

如果您呈现页面并且需要保护这个给定的示例秘密 URL

http://www.MyHost.com/?what?secret&id=23232

将 URL 保存在用户会话中并将哈希值与秘密 URL 关联

不是将 URL 发送到结果 HTML 页面,而是插入另一个 URL,例如

http://www.MyHost.com/?continueWith=<hashValue>

如果此 URL 被调用,请检查用户的会话并检索并删除秘密 URL。然后继续评估,就好像用户调用了秘密 URL。

这样,原始秘密 URL 的任何参数都不会到达用户的浏览器。

要优化架构,请将生命周期附加到会话中保存的 URL。如果请求在生命周期结束后出现,则返回错误。

如果您以这种方式保护所有 URL,用户将无法调用任意 URL,因为所有可接受的 URL 都是其会话内的 URL。因此,用户甚至无法更改秘密 URL 的参数。

【讨论】:

    【解决方案4】:

    $link首先是如何生成的?如果它是敏感的,这意味着用户已经通过某种方式进行了身份验证。因此,$link 中的信息可以存储在safe 的会话中

    【讨论】:

    • 我正在为帖子添加评论。请看一下。谢谢!
    【解决方案5】:

    将所有信息保存在您的 PHP 会话(或者最好是您的 PHP 框架使用的会话系统)中,然后只需在链接中发送某种与数据库无关的标识符,以便代码知道您接下来要做什么。

    例如,您可以有一个指向“http://www.yourdomain.com/sec/special_action/4”的链接,其中“sec”表示安全,“special_action”是要执行的操作的名称,“4 " 是动作 ID 参考。

    因此,假设您必须将其与他们的社会安全号码相关联。然后,您将在后端使用加盐哈希来加密 SSN 并将其保存到会话数据中。然后将其附加到会话数组的末尾并获取数组计数。如果它返回 5,那么您知道加密的 SSN 保存在索引 4 中(因为 PHP 使用基于 0 的索引)。因此,您将该索引作为链接的一部分发送,以使事情更加混乱。哎呀,如果你愿意,你甚至可以对索引进行加盐和哈希处理。

    用户点击链接,代码找到索引,抓取加密内容,解密,然后使用。简单又安全。

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多