防止脚本标记中的“src”在源代码中被点击

Prevent 'src' in script tag from being clicked in source code

本文关键字:源代码 src 脚本      更新时间:2023-09-26

简单的问题,我相信已经被问了很多次了!

如何防止在我的源代码中点击指向我的 JS 文件的链接?

我正在创建一个 Angular JS SPA 网站并且已经下定决心,因此几乎不可能通过附加 url 来访问链接,因为它总是会反弹回主页,这就是我想要的。

但是,我需要隐藏我的 src 代码并且已经有很多方法可以做到这一点,但只是想防止源代码中的链接"可点击"。

我已经设法为我的CSS(谷歌方法)做到了这一点,这与我想要的相似:

<script type="text/javascript" defer="defer">
    var cb = function() {
        var l = document.createElement('link'); l.rel = 'stylesheet';
        l.href = 'stylesheets/style.css';
        var h = document.getElementsByTagName('head')[0];
        h.parentNode.insertBefore(l, h);
    };
    var raf = requestAnimationFrame || mozRequestAnimationFrame ||
    webkitRequestAnimationFrame || msRequestAnimationFrame;
    if (raf) raf(cb);
    else window.addEventListener('load', cb);
</script>

简短的回答:你不能。HTML,CSS和JavaScript被称为客户端代码是有原因的。您永远不能从 HTTP 请求中隐藏生成的代码。你当然可以混淆它,但永远不要隐藏它。

在下面的评论中进行了一些讨论之后,我觉得重要的是要跟进说,虽然您的问题询问的是阻止用户看到您的链接并在源代码中单击它们,但它真的"感觉"您的问题真的是"我可以阻止用户在我的源代码中看到我的链接吗? 我可能是错的,但从我们的讨论来看,这就是它看起来的样子。而且,如果这真的是你的问题,那么这是一个关于安全性的问题,明确的答案是,永远没有办法保护你的客户端代码不被窥探。

许多网站混淆了他们的代码(将变量和函数名称更改为看似无意义的名称,编码URL等),但最终,如果有人想检查您的代码并将其拆开,他们可以。

你不能。

如果代码在浏览器中运行,则用户具有对它的完全访问权限。在您的 CSS 示例中,我可以简单地检查 DOM 并查看它添加的 <link> 元素并轻松找到源代码。这与查看源头的努力相同。即使您隐藏了它(您可以尝试,但它不起作用),我也可以检查我的浏览器发出的实际HTTP请求,并在请求本身的正文中读取脚本。你无法隐藏它。

那你能做什么呢?

混淆它

这通常涉及通过解析器运行脚本,这使得人类难以阅读。这实际上并没有隐藏任何东西,它只是使弄清楚它到底做了什么变得更加困难。客户端仍具有对它的完全访问权限。这不是安全性,任何真正想要你的代码的人都有它。

把它放在服务器上

如果你绝对不希望客户端看到你的JavaScript,请不要将其发送给客户端。实现要在服务器上隐藏的部分,并让客户端只请求它绝对需要的信息(客户端将能够看到)。

这不适用于CSS,

因为浏览器需要CSS来实际呈现页面,在这种情况下,客户端可以看到所有CSS,无论是在页面加载时还是稍后添加到DOM中。

你可以简单地修改你的CSS注入器来添加JS:

<script>
    var cb = function() {
        var l = document.createElement('script');
        l.src= 'script.js';
        var h = document.getElementsByTagName('head')[0];
        h.parentNode.insertBefore(l, h);
    };
    var raf = requestAnimationFrame || mozRequestAnimationFrame ||
    webkitRequestAnimationFrame || msRequestAnimationFrame;
    if (raf) raf(cb);
    else window.addEventListener('load', cb);
</script>

这会将"脚本.js"添加到文档中,并且无法从"查看源代码"单击外部脚本的 URL。

不会阻止任何开发人员找到您的脚本。

这里不

受欢迎的意见家伙,但你可以使用jQuery的getScript,它会将代码eval()到你的页面中(没有link)。当然,您获取的链接将位于getScript调用中,除非您执行诸如从API端点获取URL之类的操作。