如何有效隐藏链接中的Href?

时间:2019-11-20 14:17:59

标签: javascript php

我正在尝试使用PHP和Javascript隐藏下载链接中的href(以隐藏文件位置)。问题在于,包括我的代码在内的大多数解决方案并未真正隐藏该链接,因为该链接仍在源代码中清晰可见。

我检查了许多stackoverflow答案,大多数用户说实际上无法隐藏它。但是,我一直在寻找隐藏其链接的网站,例如https://krizis.itch.io/limito

有没有可行的解决方案?知道他们如何做吗?谢谢。

我的代码:

<?php
$link = "https://www.google.com/robots.txt";
?>

<a href="#" id="Link" onclick="Link()">Link</a>

<script>
   var download_link = '<?php echo $link; ?>';
   function Link() {
   document.getElementById("Link").href = download_link;
        }
</script>

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作来达到要求

<a href="#" id="Link" onclick="Link()">Link</a>

<script>
function Link() {

    jQuery.ajax({
        url: "getLink.php",
        type: "POST",
        data:  {
                // more fields can be added here
        },
        dataType: 'json',
        success: function(return){              
            // process success 
            window.location.href = return.url
        },
        error: function(err) {
            // Process failure
        }           
});

}
</script>

在您的getLink.php中,我返回了一个静态网址,您可以根据需要执行任何条件

<?php

$return = array();
$return['url'] = "https://www.google.com/robots.txt";
echo json_encode($return); 

答案 1 :(得分:2)

至少我不知道有没有一种方法可以完全隐藏最终用户的URL。如果可以的话,您也将其隐藏在浏览器中,这实际上会破坏互联网。

  

但是,我一直在寻找隐藏其链接的网站,例如   https://krizis.itch.io/limito

Ajinth的答案显示了如何实现该示例,但不会完全隐藏URL。

您发布的示例使用AJAX从服务器检索URL。您可以通过检查浏览器和服务器之间的网络流量来查看最终URL。参见屏幕截图。

Screen shot showing final URL

答案 2 :(得分:2)

您无法隐藏下载文件URL。浏览器使用它来下载文件。

您给(https://krizis.itch.io/limito)提供的示例“隐藏”了下载URL,但在浏览器开发人员工具上仍然可见。

仅了解您在此示例上的流程:

  1. 单击按钮时,它会对https://krizis.itch.io/limito/file/1784632?after_download_lightbox=true进行XHR请求
  2. 此请求将URL返回到某些CDN
  3. JavaScript使用window.open("www.theurl.com/foo/bar", "_blank")
  4. 在新窗口中打开该URL。

这里发生的只是隐藏链接的尝试。大多数最终用户几乎永远找不到它,但是只有一点专业知识的人都可以找到它。

如果您想保护某些链接,请在其上使用一些唯一的秘密

您没有指定尝试隐藏链接的原因,但是假设您有一个链接应该仅使用一次,或者属于您网站上经过身份验证的特定用户,则必须创建一个端点在您的后端上,该密码会收到一个秘密(也称为密码)以允许该下载。

示例:

您正在设计一个链接保护程序网站(其中一些令人讨厌的网站用来隐藏一些种子),要求您在下载种子之前关注社交网络上的某个人。

您将需要一个后端,该后端在用户执行所需的操作后,为用户提供下载链接。此下载链接必须仅有效一次或一段时间,否则用户将与他的朋友共享最终URL。

因此,后端将提供这样的URL:

https://my-annoying.service.com/download/torrent-x-y-z?token=TjLytA2MwVmXJvyJjjOEDWF9zgCJAKQh

在后台,后端必须知道令牌在第一次使用时或几个小时后就会过期。

并且,给定的下载链接不是文件的直接URL,而是指向处理该文件并输出文件的某些PHP(或任何语言)脚本。像这样:

if (isTokenValid($_GET['token'])) {
    $file = 'path/to/the/file';

    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=filename.torrent");
    header("Content-Type: application/x-bittorrent");
    header("Content-Transfer-Encoding: binary");

    readfile($file);
} else {
    die('Invalid token');
}

请注意,此代码仅是概念性的,只是对您理解它的帮助。您需要将其开发为自己的用法。