保护站点免受外部缩小的JS代码的方法

时间:2018-02-19 14:13:01

标签: javascript security

我理解最好的方式根本就没有外部JS,但唉,这是不可能的。

场合

网站的所有者希望(没有ifs / ands / orButs)由提供赌博广告的公司获得报酬。该公司声明,为了让他们提供所述广告,该网站的所有者必须向该网站添加 JS 代码。所说的JS代码是几行,但实际上它创建了一个标记<script>并加载了一个位于宣传公司服务器中的缩小的外部JS文件。他们会做不同类型的广告(弹出窗口等)和其他一些需要代码的东西。

没有讨论这个,我想知道是否有任何类型的安全层我可以添加以保护网站查看者。我知道他们仍处于危险之中,但我无能为力。

要做的事

  • 复制外部JS文件并从网站所有者的服务器上提供服务(或者这是一个可怕的想法?事情是,至少这样他们无法改变它们的内容,因为它在网站所有者的服务器中)。
  • 未在任何包含Login表单的页面中加载JS文件。
  • 仅加载显示宣传的JS文件。
  • 如果已登录
  • ,则不加载JS文件
  • 修改JS文件,使其具有自己的范围(function(){})()

我还能做什么?或者我只是在欺骗自己,以为我可以提供一些微弱的保护?

2 个答案:

答案 0 :(得分:1)

有几种方法可以让您使用外部脚本保护页面。 首先创建内容安全策略。这基本上告诉浏览器它可以加载不同类型的内容,如果第三方开始从新来源加载内容而不告诉你他们将被阻止。

其次是script-src标签。这允许您指定脚本标记的哈希值,如果更改,浏览器将不会运行它。

关于这些以及更多关于Troy Hunt博客的更多信息,特别是此页https://www.troyhunt.com/locking-down-your-website-scripts-with-csp-hashes-nonces-and-report-uri/

答案 1 :(得分:0)

要做的事情:

  • 使用支持版本的CDN(几乎每个现代CDN都支持该版本),因此您不需要自己托管这些JS文件,并且您不必担心这一事实文件可能会改变。

  • 仅在登录页面上运行您的JS

  • 对于广告,请使用iframe元素,因此广告的JS代码无法访问外部信息

  • 在脚本标记上使用子资源完整性(SRI)

jQuery示例

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
  • 正如Karl Graham所说,在HTTP标头中使用Content Security Policy (CSP),因此内容无法泄露。

  • 确保使用SSL证书(HTTPS),并在执行AJAX / Fetch请求时对内容进行加密,因此即使外部脚本侦听FetchEvents,它也无法使用阅读数据。

我几乎可以肯定,如果您遵循这些规则,您的外部脚本将无法获取您的表单内容。