我已经提出了一个有关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.

如何确保我的AJAX请求源自Python中的同一服务器的更多相关文章

  1. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. HTML5之消息通知的使用(Web Notification)

    通知可以说是web中比较常见且重要的功能,私信、在线提问、或者一些在线即时通讯工具我们总是希望第一时间知道对方有了新的反馈。本篇文章主要介绍了HTML5之消息通知的使用(Web Notification),感兴趣的小伙伴们可以参考一下

  5. html5简介_动力节点Java学院整理

    这篇文章主要介绍了html5简介,用于指定构建网页的元素,这些元素中的大多数都用于描述网页内容,有兴趣的可以了解一下

  6. ios – 我可以使用哪些iPhone OS API来实现类似于iBook页面翻转过渡的过渡动画?

    >UIKitAPI中的某个地方是否可以使用该动画,还是我必须自己实现?它肯定有3D感觉,他们可以使用OpenGLESAPI吗?解决方法Apple当然使用OpenGLES来实现它.Apple使用的实际API是私有的,但thisblogger具有示例代码的实现的开始.

  7. iOS 7,用于断开调用的私有API CTCallDisconnect不起作用

    谢谢!

  8. 我应该使用哪个高级API来管理iOS上的UDP套接字?

    在“NetworkProgrammingTopicsConceptualGuide”的“UsingSocketsandStreams”一章中,Apple说:Note:POSIXnetworkingdoesnotactivatethecellularradiooniOS.Forthisreason,thePOSIXnetworkingAPIisgenerallydiscouragediniOS.同样

  9. 保护MY REST API仅用于MY IOS APP

    我在Laravel中设计一个RESTAPI,用于我的ios应用程序.目前我被困在以下几点:如何保护我的RESTAPI只允许访问我的ios应用程序?听起来我需要通过向我的IOSAPP授予一个私钥来将类似于HMAC方法的内容合并到我的IOSAPP代码中.当从iosapp中运行请求时,我传递带有私钥和其他数据的哈希,然后当在服务器上收到请求时,我通过重新计算哈希来检测请求是否来自应用程序内的用户.我不知道这是否安全&我会认为不是吗?

  10. ios – 尝试向我们分配IP而不是localhost或home时,NSURLSession失败

    我有一台本地运行的服务器(我的IP是192.168.0.98),并且已经尝试使用一些网络代码来访问它.最初这是通过AFNetworking完成的,但我现在用这样的NSURLSession完成了它:然后我用这3个URL运行它:>http://localhost:8080/api–>作品.>http://127.0.0.1:8080/api–>作品.>http://192.168.0.98:8080/

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到<input>中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部