【问题标题】:How to make link with hidden URL如何使用隐藏的 URL 建立链接
【发布时间】:2015-09-06 15:13:01
【问题描述】:

我想知道是否可以使用不显示其 URL 的 <a> 标签创建链接?

换句话说,我想要一段 HTML 来隐藏或混淆它链接到的 URL

我找到了this StackOverflow question,但我希望该链接适用于所有浏览器(不仅仅是 chrome)并且不是弹出窗口。我已经可以使用 jQuery、Bootstrap 和 PHP 5.5。

任何帮助将不胜感激。

更新:我觉得这需要澄清。我不希望它以任何方式可见 - 即这是一个不能共享的链接,所以我不能简单地使用重定向并在它悬停时隐藏 URL - 我不希望它在源代码中可见任何一个。给您带来的不便请见谅:(

谢谢,

信息技术

【问题讨论】:

  • 那么您是指删除地址栏还是只是在地址栏中屏蔽当前URL(通过链接访问)?
  • @CallanHeard 好吧,我不希望它以任何方式可见,包括查看源代码。如果有帮助,我还可以访问 PHP 5.5 和 PHP 5.4。
  • 你不能完全隐藏一个 URL,它必须在某个地方。
  • @ICTman1076 我的回答对你有用吗?
  • @kappaismyname 是对的,内容的 URL 必须可以访问并存在 - 但您可以操纵服务器访问以屏蔽地址栏中的 URI

标签: javascript jquery html twitter-bootstrap hyperlink


【解决方案1】:

您可以捕获闭包中的链接以将其隐藏,然后在单击 <a> 时将窗口指向那里,例如

function hideLink(anchor) {
    var href = anchor.getAttribute('href');
    anchor.removeAttribute('href');
    anchor.className += ' pseudolink';
  
    anchor.addEventListener('click', function (e) {
        e.preventDefault();
        window.location.href = href;
  });
}

window.addEventListener('load', function () {
    hideLink(
        document.getElementById('my_link')
    );
});
.pseudolink {
    color: blue;
    cursor: pointer;
    text-decoration: underline;
}
<a id="my_link" href="http://google.com">Hover over me</a>

【讨论】:

  • 已经有 2 个答案具有相同的实现,你为什么要写这个?
  • 我刚试过这个,我担心它没有我想要的行为 - 通过源代码仍然可以看到链接,但还是谢谢你。
  • @ICTman1076 你不能让链接不出现在任何地方,即使你使用 AJAX 加载加密数据,客户端也需要一个解密库,并且可以通过他们的控制台访问它(断点)/网络选项卡(访问时)。但是,您可以使链接“可使用”,这就是支付服务在商家和支付提供商之间反弹时的工作方式,链接中有一个唯一的 ID,仅在几分钟内可用,访问时服务器会撤销该 ID .根据您的用例,您可以在会话数据中存储这样的 id,例如$_SESSION 在 php 中
  • @PaulS。有趣的。因此,我可以将会话 ID 与到期时间(即生成 ID 后 1 小时)一起存储在 MySQL 数据库中,然后创建一个类似 http://sorcerertech.pcriot.com/ranks/uprank.php?r=3&id=example 的链接,检查来自 GET 变量的 ID 并查看它是否有效?另外,是否可以在不使用另一个 PHP 脚本的情况下让 MySQL 条目在一段时间后自毁?
  • 首先,我不确定将它们视为 会话 ID 是否好,将它们视为 会话中 Foo 的 ID。其次,使用 chrons 等您可以删除旧的,但是当用户进行脏退出(关闭浏览器而不注销等)时,清理条目的频率应该较低。相反,当命中时,在数据库中查找它,如果找到 { store ref, delete from db, test ref for expired (e.g. time), if expired goto not found else YAY}, else (if not found or expired) NAY.这意味着客户在使用您的网站时正在“为自己清理”
【解决方案2】:

无法完全隐藏您尝试导航到的 URL。 URL 必须以某种形式出现 - 例如 <a>'href' 属性 - 标记告诉浏览器导航到哪里。

但是,可以通过访问您的服务器设置来屏蔽 URL。使用.htaccess 文件,可以从一个输入的 URL 重定向到另一个,同时将输入的 URL 保留在浏览器的地址栏中。网上有很多资源解释了如何做到这一点。

使用 PHP 文件中的某些逻辑简单地处理每个链接可能适合隐藏源中的链接。例如,您可以将每个链接发送到handler.php,并指定要导航到的页面的值,即handler.php?page=1

handler.php 将包含以下内容:

<?php
if ($_GET['page'] == 1) header('Location: /where/you/want/to/go');
if ($_GET['page'] == 2) header('Location: /where/else/you/want/to/go');
?>

这样,用户将不知道链接的实际位置,并且(使用.htaccess 设置)不知道他们导航到的 URL。

【讨论】:

  • 有趣,但我不相信这完全回答了我的问题。还是非常感谢。 :)
  • @ICTman1076 啊抱歉,我刚刚看到您关于链接未共享/重定向的更新
  • 可以,但我仍然需要将重定向链接放入源代码,这意味着用户可以简单地复制/粘贴和共享重定向链接。附:没关系:)
【解决方案3】:

您可以使用像这样的网址缩小器:https://goo.gl/

【讨论】:

  • 我认为这行不通,因为他们只能分享缩小的链接。不过还是谢谢你的回答:)
  • 好吧,我以为你只需要在第一眼看到真实地址时“隐藏”,而不是防止共享。我认为您找不到任何安全的方法来保护使用 Javascript 的链接。您应该使用服务器端用户和会话管理。
【解决方案4】:
<a data-link="some link here"></a>

$('a').on('click', () => {
    window.location.href = $(this).attr('data-link');
});

用户在悬停时不会看到链接。

【讨论】:

  • 它是否还会在链接被点击后隐藏它,还是我必须做其他事情来实现它?
  • 您可以轻松隐藏它,只需添加$(this).hide()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
相关资源
最近更新 更多