首页 / 知识
HttpOnly cookie如何处理AJAX请求?
2023-04-13 05:34:00

How do HttpOnly cookies work with AJAX requests?如果在具有基于cookie的访问限制的站点上使用AJAX,则JavaScript需要访问cookie。 HttpOnly cookies是否可以在AJAX网站上运行? 编辑:如果指定了HttpOnly,Microsoft通过禁止JavaScript访问cookie来创建一种防止XSS攻击的方法。 FireFox后来采用了这个。所以我的问题是:如果你在一个网站上使用AJAX,比如StackOverflow,那么Http-Only cookies是一个选择吗? 编辑2:问题2.如果HttpOnly的目的是阻止JavaScript访问cookie,你仍然可以通过XmlHttpRequest对象通过JavaScript检索cookie,那么HttpOnly有什么意义呢? 编辑3:以下是维基百科的引用:
我知道使用HttpOnly时会阻止
在您的示例中,我无法写入您的
编辑4:对不起,我的意思是你可以将XMLHttpRequest发送到StackOverflow域,然后将getAllResponseHeaders()的结果保存到字符串中,正则输出cookie,然后将其发布到外部域。似乎维基百科和哈克斯在这一方面同意我,但我希望能够重新接受教育...... 最终编辑:啊,显然这两个网站都是错误的,这实际上是FireFox中的一个错误。 IE6和7实际上是目前唯一完全支持HttpOnly的浏览器。 重申我所学到的一切:
编辑:此信息可能不再是最新的。 是的,HTTP-Only cookie可以用于此功能。它们仍将被提供给服务器的XmlHttpRequest请求。 在Stack Overflow的情况下,cookie将作为XmlHttpRequest请求的一部分自动提供。我不知道Stack Overflow身份验证提供程序的实现细节,但cookie数据可能会自动用于验证您的身份,而不是"投票"控制器方法。 更一般地说,AJAX不需要cookie。 XmlHttpRequest支持(甚至是旧版浏览器上的iframe远程处理)是技术上所需要的。 但是,如果要为启用AJAX的功能提供安全性,则应用与传统站点相同的规则。您需要一些方法来识别每个请求背后的用户,并且cookie几乎总是达到目的的手段。
XmlHttpRequest不会发出跨域请求(正是因为您正在触及的各种原因)。 您通常可以使用iframe远程处理或JSONP注入脚本以将cookie发送到您的域,但是然后HTTP-Only再次保护cookie,因为它无法访问。 除非您在服务器端破坏了StackOverflow.com,否则您将无法窃取我的cookie。
考虑这种情况:
使用仅HTTP的cookie,第二步是不可能的,从而打败了我的XSS尝试。
那是对的。你仍然可以通过这种方式劫持会议。尽管可以成功执行甚至XSS攻击你的人,但它确实显着减少了人群。 但是,如果您回到我的示例场景,您可以看到HTTP-Only成功切断了依赖于修改客户端cookie的XSS攻击(并非罕见)。 它归结为这样一个事实:a)没有任何一项改进可以解决所有漏洞,而且b)任何系统都不会完全安全。 HTTP-Only是支持XSS的有用工具。 同样,即使X??mlHttpRequest上的跨域限制在防止所有XSS攻击方面没有100%成功,您仍然不会想到删除限制。 不一定,这取决于你想做什么。你能详细说一下吗? AJAX不需要访问cookie来工作,它可以自己提出请求来提取信息,AJAX调用的页面请求可以访问cookie数据并将其传递回调用脚本而无需Javascript直接访问饼干 是的,它们是基于Ajax的站点的可行选项。身份验证cookie不是用于脚本操作,而是由浏览器简单地包含在对服务器发出的所有HTTP请求中。 脚本不需要担心会话cookie的内容 - 只要您通过身份验证,那么用户或脚本发起的对服务器的任何请求都将包含相应的cookie。脚本本身无法知道cookie的内容这一事实无关紧要。 对于用于身份验证以外目的的任何cookie,如果您希望脚本能够修改或读取这些cookie,则可以在没有HTTP only标志的情况下设置这些cookie。您可以选择哪些cookie只应该是HTTP,例如,任何不敏感的内容,如UI首选项(排序顺序,折叠左侧窗格或不折叠)都可以在带有脚本的cookie中共享。 我非常喜欢HTTP唯一的cookie - 它是那些专有的浏览器扩展之一,这是一个非常巧妙的想法。 还有一点这个。 Ajax并不严格要求cookie,但它们可以像其他海报提到的那样有用。标记cookie HTTPOnly仅从脚本中隐藏它只能部分工作,因为并非所有浏览器都支持它,还因为有常见的解决方法。 奇怪的是XMLHTTPresponse标头给出了cookie,从技术上讲,服务器不必返回带响应的cookie。一旦在客户端上设置它,它将保持设置直到它到期。虽然有一些方案可以在每次请求时更改cookie以防止重复使用。因此,您可以通过将服务器更改为不在XMLHTTP响应上提供cookie来避免该解决方法。 总的来说,我认为HTTPOnly应该谨慎使用。存在跨站点脚本攻击,攻击者使用简单的帖子表单安排用户提交源自其他站点的类似Ajax的请求,而不使用XMLHTTP,并且浏览器的仍然活动的cookie将对请求进行身份验证。 如果要确保对AJAX请求进行身份验证,请求本身和HTTP标头需要包含cookie。例如,通过使用脚本或独特的隐藏输入。 HTTPOnly会妨碍这一点。 通常,想要HTTPOnly的有趣理由是阻止网页中包含的第三方内容窃取cookie。但是有许多有趣的理由要非常谨慎地包含第三方内容,并积极过滤它。 作为澄清 - 从服务器的角度来看,AJAX请求所请求的页面与用户单击链接所做的标准HTTP get请求基本没有区别。所有正常的请求属性:user-agent,ip,session,cookies等都传递给服务器。
|
最新内容
相关内容
python能做网站吗?
python能做网站吗?,网站,工程,认证,培训,系统,服务,框架,页面,初始化,性功能,python可以做网站,Python有很多优秀的网站框架,可以非常快速的建Python如何使用https请求
Python如何使用https请求,代码,包装,培训,模块,底层,定义,以上,协议,操作,功能,python使用https请求代码如下:importurllibimporthttplibheade做网站用php还是python方便
做网站用php还是python方便,网站,培训,语法,轮子,相比之下,模版,根本,实际,成本,以上,单纯说做网站,显然是php更适合,php是专为web而生,而PythonPython怎么运行shell脚本
Python怎么运行shell脚本,培训,命令,文件,方法,脚本,文件夹,对象,建议,结果,内容,Python作为一门脚本语言,有时候需要与shell命令交互式使用,在python代码运行需要编译吗
python代码运行需要编译吗,代码,培训,做好,体系,平台,语言,机器码,目标,厨师,下次,有人在讨论Python代码是编译执行还是解释执行?这个问题还如何获取当前运行python文件路径
如何获取当前运行python文件路径,名字,培训,路径,脚本,绝对路径,文件,指令,模块,定义,所在,获取当前执行主脚本方法:sys.argv[0]和_file_(1)sypython怎么在cmd运行文件夹
python怎么在cmd运行文件夹,培训,路径,文件夹,文件,以上,程序,方法,更多,内容,python是一门高级测面向对象的程序设计语言。运行Python,可在python cmd中怎么运行python文件
python cmd中怎么运行python文件,培训,文件,路径,以上,程序,方法,更多,内容,运行Python,可在交互模式下运行,或者命令行中。命令行中运行的是pythonid函数如何运行
pythonid函数如何运行,培训,地址,代码,对象,函数,内存,类型,可能会,整数,字符串,id(object)功能:返回的是对象的“身份证号”,唯一且不变,但在不python怎样启动python程序运行
python怎样启动python程序运行,代码,环境,项目,工具,培训,业务,有限,程序,源文件,功能,执行Python程序的三种方式解释器——python/python3交python用哪个软件编写运行python
python用哪个软件编写运行python,软件,环境,代码,培训,服务,分析,工具,功能,程序,系列,编写和运行Python代码的软件叫IDE,也就是集成开发环境python程序怎么运行
python程序怎么运行,系统,代码,名称,培训,平台,语句,模式,结果,提示符,命令,安装完Python在Windows或Linux中的终端中直接输入python即进入Py