在超链接中隐藏实际链接


Hiding actual link in hyperlink

我有

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

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

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

如果用户必须导航到链接,则没有办法隐藏信息。您应该重新考虑流程的工作方式,以免敏感信息显示在链接中。

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

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

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

如果你渲染一个页面,并且需要保护这个给定的示例秘密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的参数。

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

保存PHP会话(或者最好是PHP框架使用的会话系统)中的所有信息,然后在链接中发送一些非db相关的标识符,以便代码知道您接下来要做什么。

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

假设你必须将它与他们的社会安全号码相关联。然后在后端使用加盐散列加密SSN并将其保存到会话数据中。然后将它附加到会话数组的末尾,并获得数组计数。如果它返回5,那么您知道加密的SSN保存在索引4中(因为PHP使用基于0的索引)。所以你把索引作为链接的一部分发送出去,这会让事情变得更加混乱。如果你想的话,你甚至可以对索引加盐和散列。

用户单击链接,代码找到索引,获取加密内容,对其解密,然后使用它。方便又安全。