我有一个定期轮换身份验证 token cookie 值的应用程序。
每次服务器轮换 token 时,它不会将其标记为“好”,直到它看到客户端拥有 token (因为客户端将其包含在资源的请求 header 中)。
我只有在 iOS (10.3) 上有一个非常特殊的情况,当网络条件发生变化时(例如:下地铁),它偶尔会发送一个非常旧的 cookie。当这种情况发生时,它会“忘记”最近的 cookie 值并“开始生活在过去”并发送旧值。
** 安全说明:IP 地址是在纽约市公开分配的 t-mobile, token 早已从我们的数据库中删除
为了澄清......这是流程:
_t 的 cookie,其值为 oldSet-Cookie 并将 _t cookie 设置为新值 new(仅限 http,安全 cookie)new 发出另一个请求。我们标记 cookie 值是好的并且客户端有它。 old 的 _t cookie 发出请求最佳答案
这是我对发生的事情的理论:
从cookie的生命周期来看,每当用户身份验证状态发生变化(登录用户->注销用户||注销用户->登录用户)时,旧cookie将失效并被新cookie取代。
但为什么这种情况发生在地铁而不是其他地方?
1. 如今,大多数地铁都提供免费的不安全 WiFi,以补充地下糟糕的无线网络连接。
2. 在 10.3 中有一些关于网络连接问题的报告,以及
this one特别有趣,因为问题是location dependent。
3. 我认为上述 (1) 和 (2) 的组合导致应用程序重新向服务器进行身份验证。也许你可以提取日志来检查是否确实如此?
可能的解决方法?
也许没有。
我们无法阻止iPhone 用户进行iOS 升级。大多数人已经这样做了。
此外,在重新验证后不更改 cookie 的安全影响更糟。
根据截至 2017 年 5 月 31 日的评论更新:
鉴于评论中的详细信息。我们可以有更好的解释。
在cookie生命周期中,当用户注销时,server-side-invalidation应该发生。
工作流程:
1. 当用户注销时,authenticated sessionID从浏览器中删除。
2. 但这还不够。服务器也需要使那个sessionID。否则可能会产生安全影响。
3.在您的情况下,服务器可能没有失效。因此,它仍然需要一个 SessionID,它已被从浏览器中删除。
这只是一种可能的解释。确切地说,需要更详细的日志文件分析和更多的实验。
比如,在那段时间里,在服务器日志中有没有发生过重新认证?
如果 server-side-invalidation 已正确实现,我们可以在受控环境中进行测试吗?
关于iOS 偶尔会发送旧的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44144995/
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我在rubyonrails应用程序中有以下新方法:defnewifcookies[:owner].empty?cookies[:owner]=SecureRandom.hexend@movie=Movie.new@movie.owner=cookies[:owner]end基本上,每个新用户都应该获得一个代码来识别他们(尽管只是通过cookie)。因此,当用户创建电影时,创建的cookie将存储在owner字段中。所以有两个问题:使用.empty?方法,当我从浏览器中删除cookie时,返回一个undefinedmethodempty?'对于nil:NilClass`当我确实已经在
s=Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)s.connect(Socket.pack_sockaddr_in('port','hostname'))ssl=OpenSSL::SSL::SSLSocket.new(s,sslcert)ssl.connect从这里开始,如果ssl连接和底层套接字仍然是ESTABLISHED,或者它是否在默认值7200之后进入CLOSE_WAIT,我想检查一个线程几秒钟甚至更糟的是在实际上不需要.write()或.read()的情况下关闭。是用select()、IO.select()还是其他方法完成
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
request.cookies和RubyonRails中的cookies对象有区别吗?我目前正在尝试将带有cookie的请求从我的node.js服务器发送到我的ROR4应用程序。似乎在ROR应用程序中,request.cookies包含我发送的cookie,但是cookies对象(现有逻辑所基于的对象)没有它。我已经搜索了文档,但找不到任何相关内容。我错过了什么吗?感谢您的帮助。 最佳答案 理想情况下,request.cookies和cookies应该相同。但是,在POST(创建操作)请求中,rails会验证XSRFtoken。如果
我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject