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

Bun*_*gle 14 javascript security authentication jsonp cross-domain

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

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

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

使这种安全的主要困难是我们的JavaScript是公开可见的.我们不能使用任何类型的私钥或其他神秘的标识符或模式,因为这不是秘密.

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

有任何想法吗?我希望我已经很好地解释了这个问题.在此先感谢您的任何建议.

Joe*_*lls 6

这没有吸烟枪.但是,如果不存在大枪,那么主要的烦恼就可以了.黑客喜欢挑战,但他们更喜欢轻松的目标.太烦人了,他们放弃了.

谷歌和其他人用广告词有效地做到这一点.创建一个api令牌并让他们发送它.对使用您的脚本的站点进行"验证"过程,该脚本要求此脚本的注册人允许在使用脚本之前对其站点进行概要分析.然后,您可以收集有关服务器的所有信息,如果服务器配置文件与记录中的服务器配置文件不匹配,则可以请求.

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

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

此外,您可以考虑分析页面的内容.如果一个专门用于厨房用具的网站开始发回成人约会的内容,请举起一面红旗.

最后,当一个错误的请求出现你被描述为一个错误的请求时,根据你知道的好的数据(24小时版本的页面等)从该页面的好请求发送JSONP. .不要告诉黑客你知道他们在那里.好像一切都很好.他们需要花一点时间来解决这个问题!

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


Mat*_*nen 0

如果您可以向站点添加服务器端代码,将数据推送到您的站点,则可以使用 MAC 至少阻止未登录的用户发送任何内容。

如果只允许任何人使用该页面,那么我想不出一种在不抓取网页的情况下确认数据的防水方法。您可以通过引用检查等方式使发送任意内容变得更加困难,但并非 100% 不可能。