我正在尝试使用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>
答案 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。参见屏幕截图。
答案 2 :(得分:2)
您无法隐藏下载文件URL
。浏览器使用它来下载文件。
您给(https://krizis.itch.io/limito)提供的示例“隐藏”了下载URL
,但在浏览器开发人员工具上仍然可见。
仅了解您在此示例上的流程:
URL
返回到某些CDN window.open("www.theurl.com/foo/bar", "_blank")
这里发生的只是隐藏链接的尝试。大多数最终用户几乎永远找不到它,但是只有一点专业知识的人都可以找到它。
您没有指定尝试隐藏链接的原因,但是假设您有一个链接应该仅使用一次,或者属于您网站上经过身份验证的特定用户,则必须创建一个端点在您的后端上,该密码会收到一个秘密(也称为密码)以允许该下载。
您正在设计一个链接保护程序网站(其中一些令人讨厌的网站用来隐藏一些种子),要求您在下载种子之前关注社交网络上的某个人。
您将需要一个后端,该后端在用户执行所需的操作后,为用户提供下载链接。此下载链接必须仅有效一次或一段时间,否则用户将与他的朋友共享最终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');
}
请注意,此代码仅是概念性的,只是对您理解它的帮助。您需要将其开发为自己的用法。