如何确保我的AJAX请求源自Python中的同一服务器

前端之家收集整理的这篇文章主要介绍了如何确保我的AJAX请求源自Python中的同一服务器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经提出了一个有关IP身份验证的问题: TastyPie Authentication from the same server

但是,我需要更多的东西! IP地址可能很容易欺骗。

情况:我的API(TastyPie)和客户端应用(在javascript中)位于同一服务器/网站/域。我的用户登录。我想在我的javascript客户端使用我的API。

问题:如何确保(身份验证)我的AJAX请求来自同一台服务器?

我使用Tatypie。我需要验证,客户端的请求是在同一个服务器/域等。我不能使用“登录会话”,因为我的用户登录

我看过私钥和生成签名,但他们可以查看在javascript中使该方法不安全。如果我以一种方式请求签名的形式服务器(隐藏的私钥在一些python代码)任何人都可以做相同的http请求get_signature我的javascript,因此打败了点。

我也试图让Django视图把视图中的签名消除了需要进行get_signature调用。这是安全的,但意味着我现在必须刷新页面每次得到一个新的签名。从用户的角度来看,只有第一次调用API才能工作,之后他们需要刷新,再次毫无意义。

我不能相信我是唯一有这个要求的人。这是我相信的常见情况。请帮助:)在Tastypie中使用自定义身份验证的示例也将受到欢迎。

谢谢

添加

根据您的基础设施@ dragonx的答案可能最感兴趣。

我的2c

您想要确保只有客户访问您的网站才能使用API​​?机器人,机器人,爬行器是否与客户端在同一类别?还是我错了?这可以很容易地利用,以防你真的想要确保它真的。

I cannot believe I’m the only person with this requirement.

也许不是,但正如你可以看到,你很容易对你的API的几个攻击,这可能是一个人不分享你的设计,使安全更严格的auth。

编辑

因为我们在谈论AJAX请求,IP部分与此有什么关系? IP将永远是客户的IP!所以可能,你想要一个公共API …

>我会用tokens / session / cookie部分。
>我会用一个生成的令牌持续一段时间和一个流程描述如下。
>我每次去一个限制器,like Github does.例如每小时每个ip或更多为registered users请求60

为了克服刷新令牌的问题,我只需这样做:

>客户访问网站

– >服务器生成API TOKEN INIT

– >客户端获得API TOKEN INIT,它仅对启动1个请求有效。
>客户端向API发出AJAX请求

– >客户端使用API​​ TOKEN INIT

– >服务器检查API TOKEN INIT和限制

– >服务器接受请求

– >服务器返回API TOKEN

– >客户端消耗响应数据并存储API TOKEN以供进一步使用(将通过JS存储在浏览器内存中)
>客户端开始与API通信有限的时间或请求。注意,你也知道init token的日期,所以你可以使用它来检查页面上的第一次访问。

第一个令牌是在客户端访问时通过服务器生成的。
然后客户端使用该令牌为了获得一个真实的,持续一段时间或其他限制。
这使得有人实际访问网页,然后他可以访问API的限制时间,请求等。

这样你不需要刷新。

当然,上述情况可以仅用一个令牌和如上所述的时间限制来简化。

当然,上述情况很容易使用高级抓取工具等,因为您没有身份验证。

当然一个聪明的攻击者可以从服务器抓取令牌,并重复这些步骤,但是,然后你已经有那个问题从开始。

一些额外的点

>如提供的意见,关闭对API的写入。如果你对你的实现有怀疑(如果不使用auth)或者额外的安全性,你不想成为DOS攻击的受害者
>如上所述的令牌场景还可以变得更复杂,例如通过不断地交换令牌

仅供参考GAE云存储使用signed_urls为同一目的的种类。

希望它有帮助。

PS。关于IP欺骗和防御欺骗攻击维基百科说,所以包不会返回给攻击者:

Some upper layer protocols provide their own defense against IP spoofing attacks. For example,Transmission Control Protocol (TCP) uses sequence numbers negotiated with the remote machine to ensure that arriving packets are part of an established connection. Since the attacker normally can’t see any reply packets,the sequence number must be guessed in order to hijack the connection. The poor implementation in many older operating systems and network devices,however,means that TCP sequence numbers can be predicted.

原文链接:https://www.f2er.com/ajax/160441.html

猜你在找的Ajax相关文章