【问题标题】:Detect Javascript Tampering in Ajax call检测 Ajax 调用中的 Javascript 篡改
【发布时间】:2016-04-07 15:04:24
【问题描述】:

我们开发了一个 Javascript 文件供客户使用。 Javascript sn-p 对其运行的网站进行截图,然后通过 jQuery.post() 将其发送回我们的服务器

我们行业的性质意味着我们必须确保文件不会被客户篡改。

因此,挑战在于我们需要确保屏幕截图是由托管在我们服务器上的 javascript 文件生成的,而不是被复制或以任何方式被篡改的文件。

我知道我可以使用以下方法获取脚本位置:

var scripts = document.getElementsByTagName("script"),
src = scripts[scripts.length-1].src;

但是,如果客户篡改了 SRC 的那部分,这将无济于事。

我可以采用哪些方法来确保:

1) 帖子是由我们服务器上托管的 javascript 文件制作的

2) javascript 没有以任何方式被篡改。

【问题讨论】:

  • 1) 您只能验证请求标头以确保它来自哪里2) 您永远无法验证 100% 客户端Javascript ..这是整个过程的一部分。 3) 这更适用于 SecurityExchange IMO。
  • 您基本上必须接受客户端处于客户端控制之下而不是服务器。
  • 您能否对代码进行模糊处理,并在帖子中将脚本内容的副本作为文本发送,然后将其与您服务器上的版本进行比较以确定它是否被篡改? obfuscate js
  • @JeramiahHarland - 我认为这在技术上是行不通的,有人可以用预期的脚本替换发送脚本副本的代码部分。无论如何,我们已经对脚本进行了混淆。

标签: javascript jquery ajax security tampering


【解决方案1】:

简答:

  1. 你不能。

  2. 你不能。

两者都源于这样一个事实,即一旦您将某些东西交给客户端,它就无法控制。没有什么可以阻止用户在您和他们的机器之间放置代理、拦截内容的进程或篡改内容、标头、cookie、请求、响应等的扩展。

但是,您可以通过防止 XSS(防止通过用户输入注入脚本)、使用 SSL(防止篡改连接)、应用 CSP(仅允许页面上的某些内容)、添加 CSRF 来强化您的应用令牌(确保表单由服务器授权)和其他做法,使被篡改的内容更难通过。

但同样,这不会阻止坚定的黑客找到漏洞。

【讨论】:

  • 关于#1——不是我的专长,但你不能签署 POST 请求..
  • 我想知道的是,是否有可能通过在每次加载时嵌入到 JS 中的某种唯一令牌(短期有效),由我们的服务器授权,然后在服务器上再次确认发送截图的时候。你认为这可以确保请求来自我们的javascript吗?
  • @aaroncatlin:简短回答:仍然没有。您的 JavaScript 可以做的任何事情,其他一些伪装成您的 JavaScript 的代码也可以做。
猜你喜欢
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 2021-12-07
相关资源
最近更新 更多