2011-07-12 189 views
1

隐藏在超级链接

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

$链接包含敏感信息的实际的链接,所以我不知道如果有一个简单的方法来防止这个环节出明确的,当你“查看源代码”上浏览器。任何替代href的都可以。我只需要给用户一个选项,在提交一些数据后点击并查看他的处理结果。我希望避免在提交处理后立即自动弹出。

UPDATE:所以$ link是一个包含用户ID和密码的GET URL。它现在是内部的,所以没关系,但是我打算将这个放在我们的在线服务器上。我非常熟悉PHP,所以这可能不会在不久的将来,因为我对因特网上的实时站点需要实施的安全功能知之甚少。现在看来,使用数据库似乎是最好的选择。如果我错了,请纠正我,并感谢所有的支持!

+2

你意识到这一点,即使你能做到这一点,结果页面的URL仍清晰可见?即使只有JavaScript控制台和一个快速的'document.location;'? –

回答

5

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

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

+0

感谢您的意见。我读到存储在数据库信息,并参照DB的ID以及..看来,这种链接结构的DB-路由器是唯一的出路。 – musicliftsme

4

简而言之:不。如果您发送给我一个URL,我将能够使用某种工具查看它。 Wireshark,Fiddler等。考虑使用不同的链接结构。

+0

感谢您的简短回答。直接点! – musicliftsme

+0

“,因此$ link是一个包含用户ID和密码的GET URL。” 这是不好的,很明显,你也知道这一点。使用会话来存储这些信息,或使用框架(CI/CakePHP)轻松地将变量从控制器传递到控制器。 –

+0

是的,我知道。我真的需要研究这个框架业务。我不确定什么是“框架”,但听起来像我应该实施它,即使我是一个大白菜。我在想Zend Framework。 – musicliftsme

1

$link是怎么产生的?如果它敏感,这意味着用户已经以某种方式被认证。因此,在$link的信息可以存储在它的safe

+0

我在帖子中添加评论。请看一下。谢谢! – musicliftsme

2

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

如果您呈现一个页面,需要保护这个给定的样本秘密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的参数。

0

保存所有在你的PHP会话信息(或最好的会议系统的PHP框架使用),然后就发出了某种在链接非DB-相关的标识符,这样的代码知道你下一步想做什么。

例如,您可以链接到“http://www.yourdomain.com/sec/special_action/4”,其中“sec”表示安全,“special_action”是要采取的操作的名称,“ 4“是动作ID参考。

因此,可以说,你必须有与之关联到他们的社会安全号码。然后你会在你的后端使用salted hash来加密SSN并将它保存到会话数据中。然后将它附加到会话数组的末尾并获取数组数。如果它返回5,那么你知道加密的SSN被保存在索引4中(因为PHP使用基于0的索引)。因此,您将该索引作为链接的一部分发送给更多人。如果你愿意,你甚至可以用盐和散列索引。

用户点击链接时,代码发现索引,抓住所述加密内容,解密它,然后使用它。简单而安全。