热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

js禁止获取cookie(浏览器禁用js后果)

本文目录一览:1、如何用js实现跨域获取cookie

本文目录一览:


  • 1、如何用js实现跨域获取COOKIE


  • 2、如何防止js获取COOKIEs值


  • 3、如何检测服务器端的COOKIE是否被禁用


  • 4、nodejs怎么设置COOKIE


  • 5、js COOKIE跨站问题

如何用js实现跨域获取COOKIE

正常情况下,浏览器禁止跨域获取COOKIE

一般通过sso服务可以实现取得跨域COOKIE,思路如下:

域A页面访问位于域A的服务器,对权限进行验证

域A服务器于域B服务器通信,记录一个唯一的加密串用作身份验证域(并将COOKIE信息发送给域B服务器)

域A服务器返回302跳转,跳转到域B下,并将加密串作为url的一部分

页面由域A跳转到域B,域B服务器通过加密串获取到事先从域A服务器上得到的COOKIE信息,并在响应头中添加set-COOKIE字段设置COOKIE

如何防止js获取COOKIEs值

浏览器是你自己的,你可以禁用很多功能 比例COOKIEs 脚本 ActionX ····

关掉COOKIEs 操作如下

浏览器安全设置 工具—— internet选项 隐私 ——安全级别 调高

如何检测服务器端的COOKIE是否被禁用

在服务器端判断,需要访问服务器2次

首先在a页面设置一个COOKIE

接着在b页面请求这个COOKIE,如果没请求到,说明客户端禁用COOKIE了

禁用js也一样,在a页面用js设置一个值,提交到b页面,b页面获取到了这个值,说明js启用

否则js禁用了

nodejs怎么设置COOKIE

var http = require('http');

http.createServer(function (req, res) {

// 获得客户端的COOKIE

var COOKIEs = {};

req.headers.COOKIE req.headers.COOKIE.split(';').forEach(function( COOKIE ) {

var parts = COOKIE.split('=');

COOKIEs[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim();

});

console.log(COOKIEs)

// 向客户端设置一个COOKIE

res.writeHead(200, {

'Set-COOKIE': 'myCOOKIE=test',

'Content-Type': 'text/plain'

});

res.end('Hello World\n');

}).listen(8000);

console.log('Server running at ');

如果去掉其中几句,就是官方给出的例子,除了表明返回一个页面多简单外,一点用也没有。

var http = require('http');

http.createServer(function (req, res) {

res.writeHead(200, {'Content-Type': 'text/plain'});

res.end('Hello World\n');

}).listen(8000);

console.log('Server running at ');

我们通过http.createServer的回调来处理所有请求与响应,因此什么有用的东西都在它们上面。COOKIE位于req对象的headers对象上,为一个字符串,通常为了方便我们将它们转换成一个对象。

写入一个COOKIE其实就是在首部设置一个键值对,上面是简单方式,它实际上可以这样:

res.writeHead(200, {

'Set-COOKIE': ["aaa=bbb","ccc=ddd","eee=fff"],

'Content-Type': 'text/plain'

});

但真正使用时,我们的COOKIE并非这样简单的的格式:

Set-COOKIE: =[; =]

[; expires=][; domain=]

[; path=][; secure][; HttpOnly]

console.log('Server running at ');

HttpOnly 属性: 这是微软对COOKIE做的扩展。如果在COOKIE中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到COOKIE信息,这样能有效的防止XSS攻击。

var http = require('http');

http.createServer(function (req, res) {

// 获得客户端的COOKIE

var COOKIEs = {};

req.headers.COOKIE req.headers.COOKIE.split(';').forEach(function( COOKIE ) {

var parts = COOKIE.split('=');

COOKIEs[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim();

});

console.log(COOKIEs)

// 向客户端设置一个COOKIE

res.writeHead(200, {

'Set-COOKIE': 'SSID=Ap4GTEq; Expires=Wed, 13-Jan-2021 22:23:01 GMT;HttpOnly ',

'Content-Type': 'text/html'

});

res.end('Hello World\nscriptconsole.log(document.COOKIE)/script');

}).listen(8000);

console.log('Server running at ');

然后多刷几次页面,我们发现我们还能在控制台看到SSID=Ap4GTEq这个属性,但在前端我们看不到它(当然在firebug中能看到)。

Secure属性: 当设置为true时,表示创建的 COOKIE 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到COOKIE 的具体内容。同上,在客户端我们也无法在document.COOKIE找到被设置了Secure=true的COOKIE键值对。Secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,HttpOnly属性的目的是防止程序获取COOKIE后进行攻击。我们可以把Secure=true看成比HttpOnly更严格的访问控制。

path属性: 指定可访问COOKIE的目录。例如:"userId=320; path=/shop";就表示当前COOKIE仅能在shop目录下使用。

domain属性: 指定可访问COOKIE的主机名.主机名是指同一个域下的不同主机,例如:和gmail.google.com就是两个不同的主机名。默认情况下,一个主机中创建的COOKIE在另一个主机下是不能被访问的, 但可以通过domain参数来实现对其的控制,其语法格式为:"name=value; domain=COOKIEDomain";以google为例,要实现跨主机访问,可以写为: "name=value;domain=.google.com";这样,所有google.com下的主机都可以访问该COOKIE。

Expires属性:指定过期时间,格式为"name=value;; expires=GMT_String"; 其中GMT_String是以GMT格式表示的时间字符串,超过这个时间,COOKIE将消失,不可访问。例如:如果要将COOKIE设置为10天后过期,可以这样实现:

js COOKIE跨站问题

跨站设置COOKIE和获取COOKIE这个在安全上是禁止的,不允许的。正常情况不会让你人工获取到的。


推荐阅读
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了如何使用OpenXML按页码访问文档内容,以及在处理分页符和XML元素时的一些挑战。同时,还讨论了基于页面的引用框架的局限性和超越基于页面的引用框架的方法。最后,给出了一个使用C#的示例代码来按页码访问OpenXML内容的方法。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
樱花漫天飞舞-卿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有