javascript - 如何验证/保护/验证基于 JavaScript 的 POST 请求?

标签 javascript security authentication cross-domain jsonp

我正在帮助开发的产品基本上是这样工作的:

  • 网络发布商在其网站上创建了一个新页面,其中包含 <script>来 self 们的服务器。
  • 当访问者到达新页面时,<script>收集页面的文本内容并通过 POST 请求将其发送到我们的服务器(跨域,使用 <form> 内部的 <iframe> )。
  • 我们的服务器处理文本内容并返回一个响应(通过 JSONP ),其中包含一个 HTML 片段,其中列出了指向 Web 上相关内容的链接。此响应被缓存并提供给后续访问者,直到我们从同一 URL 收到另一个包含文本内容的 POST 请求,此时我们重新生成"new"响应。这些 POST 仅在我们缓存的 TTL 过期时发生,此时服务器表示并提示 <script>在页面上再次收集和发布文本内容。

问题是这个系统似乎天生就不安全。理论上,任何人都可以欺骗将页面内容发送到我们的服务器的 HTTP POST 请求(包括 referer header ,因此我们不能只检查它)。这可能包括任何文本内容,然后我们将使用这些内容为该页面生成相关内容链接。

确保此安全的主要困难在于我们的 JavaScript 是公开可见的。我们不能使用任何类型的私钥或其他神秘标识符或模式,因为这不是 secret 。

理想情况下,我们需要一种方法来验证与特定网页对应的 POST 请求是否真实。我们不能只是抓取网页并将内容与已发布的内容进行比较,因为让 JavaScript 提交内容的目的是它可能在登录系统后面。

有什么想法吗?我希望我已经很好地解释了这个问题。提前感谢您的任何建议。

最佳答案

这没有确凿的证据。然而,在大枪不存在的地方,主要的烦恼可能存在。黑客喜欢挑战,但他们更喜欢容易的目标。足够烦人以至于他们放弃。

Google 和其他公司通过广告词有效地做到了这一点。创建一个 api token 并让他们发送。对使用您的脚本的站点进行“验证”过程,要求此脚本的注册人允许在使用脚本之前对他们的站点进行分析。然后,您可以收集有关有问题的服务器的所有信息,如果服务器配置文件与记录的配置文件不匹配,则可以请求。

获取有关浏览器和客户端的所有信息,并为其创建配置文件。如果有任何可能是浏览器欺骗,请删除请求。如果配置文件重复但 cookie 消失,请忽略输入。如果您在短时间内从 token 收到多个请求(即黑客尝试固有的快速页面刷新),请忽略该请求。

然后更进一步,ping 实际域以验证它是否存在并且是授权域。即使页面在登录后,域仍会响应。这本身不会阻止黑客,但它是在服务器端完成的,因此是隐藏的。

此外,您还可以考虑分析页面的内容。如果专注于厨房用具的网站开始发回成人约会内容,请发出警告。

最后,当收到您已描述为错误请求的错误请求时,根据您认为正确的数据(该页面的 24 小时旧版本)从该页面的良好请求发送 JSONP ETC。)。不要告诉黑客你知道他们在那里。表现得好像一切都很好。他们需要很长时间才能弄清楚!

这些想法都不能满足您问题的确切需求,但希望它能激发您的一些潜伏和创造性思维。

关于javascript - 如何验证/保护/验证基于 JavaScript 的 POST 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2561999/

相关文章:

javascript - 将 Amazon Cognito 的授权码授予用于无服务器/单页 Web 应用程序

javascript - 如何在一组日期中找到给定日期?

javascript - 什么可能导致 If 循环不触发视频暂停/播放功能

php - 在运行时从数据库更改 Laravel 的配置

java - 在浏览器(chrome/firefox)中运行本地java小程序 "Your security settings have blocked a local application from running"

java - 如何保护您托管但无法修改的 Web 应用程序

wcf - 如何为WCF实现2路SSL证书

android - 包装网页的 Android 应用程序中的指纹认证

javascript - lit-html : how to render contents of .innerHtml

javascript - 使用 Javascript 动态着色美国 map