当前位置: 首页 > news >正文

淘宝店铺网站策划wordpress英文版切换成中文

淘宝店铺网站策划,wordpress英文版切换成中文,外发加工网可信度,网站定制哪家快一、内容概览 由于WebSocket的出现#xff0c;使得浏览器也具备了实时双向通信的能力。本文由浅入深#xff0c;介绍了WebSocket建立连接、交换数据的细节#xff0c;以及数据帧的格式。此外#xff0c;还简要介绍了针对WebSocket的安全攻击#xff0c;以及协议是如何抵御…一、内容概览 由于WebSocket的出现使得浏览器也具备了实时双向通信的能力。本文由浅入深介绍了WebSocket建立连接、交换数据的细节以及数据帧的格式。此外还简要介绍了针对WebSocket的安全攻击以及协议是如何抵御类似攻击的。 二、什么是WebSocket HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术属于应用层协议。它基于TCP传输协议并复用HTTP的握手通道。 对大部分web开发者来说上面这段描述有点枯燥其实只要记住几点 WebSocket可以在支持HTML5的浏览器里使用支持双向通信使用简单 1、有哪些优点 说到优点这里的对比参照物是HTTP协议概括地说就是支持双向通信更灵活更高效可扩展性更好。 支持双向通信实时性更强。HTTP不支持双向通讯是无状态的更好的二进制支持。较少的控制开销。连接创建后ws客户端、服务端进行数据交换时协议控制的数据包头部较小。在不包含头部的情况下服务端到客户端的包头只有2~10字节取决于数据包长度客户端到服务端的的话需要加上额外的4字节的掩码。而HTTP协议每次通信都需要携带完整的头部。支持扩展。ws协议定义了扩展用户可以扩展协议或者实现自定义的子协议。比如支持自定义压缩算法等 对于后面两点没有研究过WebSocket协议规范的同学可能理解起来不够直观但不影响对WebSocket的学习和使用。 2、需要学习哪些东西 对网络应用层协议的学习来说最重要的往往就是连接建立的过程、数据交换的过程。当然数据的格式是逃不掉的因为它直接决定了协议本身的能力。好的数据格式能让协议更高效、扩展性更好。 下文主要围绕下面几点展开 如何建立连接如何交换数据数据帧格式如何维持连接 三、入门例子 在正式介绍协议细节前先来看一个简单的例子有个直观感受。例子包含了WebSocket服务端、WebSocket客户端网页端。完整代码可以在 这里 找到。 这里服务端用了ws这个库。相比大家熟悉的socket.iows实现更轻量更适合学习的目的。 1、服务端 代码如下监听8080端口。当有新的连接请求到达时打印日志同时向客户端发送消息。当收到到来自客户端的消息时同样打印日志。 var app require(express)(); var server require(http).Server(app); var WebSocket require(ws);var wss new WebSocket.Server({ port: 8080 });wss.on(connection, function connection(ws) {console.log(server: receive connection.);ws.on(message, function incoming(message) {console.log(server: received: %s, message);});ws.send(world); });app.get(/, function (req, res) {res.sendfile(__dirname /index.html); });app.listen(3000);2、客户端 代码如下向8080端口发起WebSocket连接。连接建立后打印日志同时向服务端发送消息。接收到来自服务端的消息后同样打印日志。 scriptvar ws new WebSocket(ws://localhost:8080);ws.onopen function () {console.log(ws onopen);ws.send(from client: hello);};ws.onmessage function (e) {console.log(ws onmessage);console.log(from server: e.data);}; /script3、运行结果 可分别查看服务端、客户端的日志这里不再展开。 服务端输出 server: receive connection. server: received hello客户端输出 client: ws connection is open client: received world四、如何建立连接 前面提到WebSocket复用了HTTP的握手通道。具体指的是客户端通过HTTP请求与WebSocket服务端协商升级协议。协议升级完成后后续的数据交换则遵照WebSocket的协议。 1、客户端申请协议升级 首先客户端发起协议升级请求。可以看到采用的是标准的HTTP报文格式且只支持GET方法。 GET / HTTP/1.1 Host: localhost:8080 Origin: http://127.0.0.1:3000 Connection: Upgrade Upgrade: websocket Sec-WebSocket-Version: 13 Sec-WebSocket-Key: w4v7O6xFTi36lq3RNcgctw重点请求首部意义如下 Connection: Upgrade表示要升级协议Upgrade: websocket表示要升级到websocket协议。Sec-WebSocket-Version: 13表示websocket的版本。如果服务端不支持该版本需要返回一个Sec-WebSocket-Versionheader里面包含服务端支持的版本号。Sec-WebSocket-Key与后面服务端响应首部的Sec-WebSocket-Accept是配套的提供基本的防护比如恶意的连接或者无意的连接。注意上面请求省略了部分非重点请求首部。由于是标准的HTTP请求类似Host、Origin、Cookie等请求首部会照常发送。在握手阶段可以通过相关请求首部进行 安全限制、权限校验等。 2、服务端响应协议升级 服务端返回内容如下状态代码101表示协议切换。到此完成协议升级后续的数据交互都按照新的协议来。 HTTP/1.1 101 Switching Protocols Connection:Upgrade Upgrade: websocket Sec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU 备注每个header都以\r\n结尾并且最后一行加上一个额外的空行\r\n。此外服务端回应的HTTP状态码只能在握手阶段使用。过了握手阶段后就只能采用特定的错误码。 3、Sec-WebSocket-Accept的计算 Sec-WebSocket-Accept根据客户端请求首部的Sec-WebSocket-Key计算出来。 计算公式为 将Sec-WebSocket-Key跟258EAFA5-E914-47DA-95CA-C5AB0DC85B11拼接。通过SHA1计算出摘要并转成base64字符串。 伪代码如下 toBase64( sha1( Sec-WebSocket-Key 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 ) )验证下前面的返回结果 const crypto require(crypto); const magic 258EAFA5-E914-47DA-95CA-C5AB0DC85B11; const secWebSocketKey w4v7O6xFTi36lq3RNcgctw;let secWebSocketAccept crypto.createHash(sha1).update(secWebSocketKey magic).digest(base64);console.log(secWebSocketAccept); // Oy4NRAQ13jhfONC7bP8dTKb4PTU五、数据帧格式 客户端、服务端数据的交换离不开数据帧格式的定义。因此在实际讲解数据交换之前我们先来看下WebSocket的数据帧格式。 WebSocket客户端、服务端通信的最小单位是帧frame由1个或多个帧组成一条完整的消息message。 发送端将消息切割成多个帧并发送给服务端接收端接收消息帧并将关联的帧重新组装成完整的消息 本节的重点就是讲解数据帧的格式。详细定义可参考 RFC6455 5.2节 。 1、数据帧格式概览 下面给出了WebSocket数据帧的统一格式。熟悉TCP/IP协议的同学对这样的图应该不陌生。 从左到右单位是比特。比如FIN、RSV1各占据1比特opcode占据4比特。内容包括了标识、操作代码、掩码、数据、数据长度等。下一小节会展开1 2 30 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1--------------------------------------------------------|F|R|R|R| opcode|M| Payload len | Extended payload length ||I|S|S|S| (4) |A| (7) | (16/64) ||N|V|V|V| |S| | (if payload len126/127) ||0|1|2|3| 4-7 |K| | |------------------------- - - - - - - - - - - - - - - - | Extended payload length continued, if payload len 127 | - - - - - - - - - - - - - - - -------------------------------| |Masking-key, if MASK set to 1 |--------------------------------------------------------------| Masking-key (continued) | Payload Data |-------------------------------- - - - - - - - - - - - - - - - : Payload Data continued ... : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Payload Data continued ... |---------------------------------------------------------------2、数据帧格式详解 针对前面的格式概览图这里逐个字段进行讲解如有不清楚之处可参考协议规范或留言交流。 FIN1个比特。 如果是1表示这是消息message的最后一个分片fragment如果是0表示不是是消息message的最后一个分片fragment。 RSV1, RSV2, RSV3各占1个比特。 一般情况下全为0。当客户端、服务端协商采用WebSocket扩展时这三个标志位可以非0且值的含义由扩展进行定义。如果出现非零的值且并没有采用WebSocket扩展连接出错。 Opcode: 4个比特。 操作代码Opcode的值决定了应该如何解析后续的数据载荷data payload。如果操作代码是不认识的那么接收端应该断开连接fail the connection。可选的操作代码如下 %x0表示一个延续帧。当Opcode为0时表示本次数据传输采用了数据分片当前收到的数据帧为其中一个数据分片。%x1表示这是一个文本帧frame%x2表示这是一个二进制帧frame%x3-7保留的操作代码用于后续定义的非控制帧。%x8表示连接断开。%x9表示这是一个ping操作。%xA表示这是一个pong操作。%xB-F保留的操作代码用于后续定义的控制帧。 Mask: 1个比特。 表示是否要对数据载荷进行掩码操作。从客户端向服务端发送数据时需要对数据进行掩码操作从服务端向客户端发送数据时不需要对数据进行掩码操作。 如果服务端接收到的数据没有进行过掩码操作服务端需要断开连接。 如果Mask是1那么在Masking-key中会定义一个掩码键masking key并用这个掩码键来对数据载荷进行反掩码。所有客户端发送到服务端的数据帧Mask都是1。 掩码的算法、用途在下一小节讲解。 Payload length数据载荷的长度单位是字节。为7位或716位或164位。 假设数Payload length x如果 x为0~126数据的长度为x字节。x为126后续2个字节代表一个16位的无符号整数该无符号整数的值为数据的长度。x为127后续8个字节代表一个64位的无符号整数最高位为0该无符号整数的值为数据的长度。 此外如果payload length占用了多个字节的话payload length的二进制表达采用网络序big endian重要的位在前高位在前。 Masking-key0或4字节32位 所有从客户端传送到服务端的数据帧数据载荷都进行了掩码操作Mask为1且携带了4字节的Masking-key。如果Mask为0则没有Masking-key。 备注载荷数据的长度不包括mask key的长度。 Payload data(xy) 字节 载荷数据包括了扩展数据、应用数据。其中扩展数据x字节应用数据y字节。 扩展数据如果没有协商使用扩展的话扩展数据为0字节。所有的扩展都必须声明扩展数据的长度或者可以如何计算出扩展数据的长度。此外扩展如何使用必须在握手阶段就协商好。如果扩展数据存在那么载荷数据长度必须将扩展数据的长度包含在内。 应用数据任意的应用数据在扩展数据之后如果存在扩展数据占据了数据帧剩余的位置。载荷数据长度 减去 扩展数据长度就得到应用数据的长度。 3、掩码算法 掩码键Masking-key是由客户端挑选出来的32位的随机数。掩码操作不会影响数据载荷的长度。掩码、反掩码操作都采用如下算法 首先假设 original-octet-i为原始数据的第i字节。transformed-octet-i为转换后的数据的第i字节。j为i mod 4的结果。masking-key-octet-j为mask key第j字节。 算法描述为 original-octet-i 与 masking-key-octet-j 异或后得到 transformed-octet-i。 j i MOD 4 transformed-octet-i original-octet-i XOR masking-key-octet-j 六、数据传递 一旦WebSocket客户端、服务端建立连接后后续的操作都是基于数据帧的传递。 WebSocket根据opcode来区分操作的类型。比如0x8表示断开连接0x0-0x2表示数据交互。 1、数据分片 WebSocket的每条消息可能被切分成多个数据帧。当WebSocket的接收方收到一个数据帧时会根据FIN的值来判断是否已经收到消息的最后一个数据帧。 FIN1表示当前数据帧为消息的最后一个数据帧此时接收方已经收到完整的消息可以对消息进行处理。FIN0则接收方还需要继续监听接收其余的数据帧。 此外opcode在数据交换的场景下表示的是数据的类型。0x01表示文本0x02表示二进制。而0x00比较特殊表示延续帧continuation frame顾名思义就是完整消息对应的数据帧还没接收完。 2、数据分片例子 直接看例子更形象些。下面例子来自MDN可以很好地演示数据的分片。客户端向服务端两次发送消息服务端收到消息后回应客户端这里主要看客户端往服务端发送的消息。 第一条消息 FIN1, 表示是当前消息的最后一个数据帧。服务端收到当前数据帧后可以处理消息。opcode0x1表示客户端发送的是文本类型。 第二条消息 FIN0opcode0x1表示消息还没发送完成还有后续的数据帧发送的是文本类型。FIN0opcode0x0表示消息还没发送完成还有后续的数据帧当前的数据帧需要接在上一条数据帧之后。FIN1opcode0x0表示消息已经发送完成没有后续的数据帧当前的数据帧需要接在上一条数据帧之后。服务端可以将关联的数据帧组装成完整的消息。 Client: FIN1, opcode0x1, msghello Server: (process complete message immediately) Hi. Client: FIN0, opcode0x1, msgand a Server: (listening, new message containing text started) Client: FIN0, opcode0x0, msghappy new Server: (listening, payload concatenated to previous message) Client: FIN1, opcode0x0, msgyear! Server: (process complete message) Happy new year to you too!七、连接保持心跳 WebSocket为了保持客户端、服务端的实时双向通信需要确保客户端、服务端之间的TCP通道保持连接没有断开。然而对于长时间没有数据往来的连接如果依旧长时间保持着可能会浪费宝贵的连接资源。 但不排除有些场景客户端、服务端虽然长时间没有数据往来但仍需要保持连接。这个时候可以采用心跳来实现。 发送方-接收方ping接收方-发送方pong ping、pong的操作对应的是WebSocket的两个控制帧opcode分别是0x9、0xA。 举例WebSocket服务端向客户端发送ping只需要如下代码采用ws模块 ws.ping(, false, true);八、Sec-WebSocket-Key/Accept的作用 前面提到了Sec-WebSocket-Key/Sec-WebSocket-Accept在主要作用在于提供基础的防护减少恶意连接、意外连接。 作用大致归纳如下 避免服务端收到非法的websocket连接比如http客户端不小心请求连接websocket服务此时服务端可以直接拒绝连接确保服务端理解websocket连接。因为ws握手阶段采用的是http协议因此可能ws连接是被一个http服务器处理并返回的此时客户端可以通过Sec-WebSocket-Key来确保服务端认识ws协议。并非百分百保险比如总是存在那么些无聊的http服务器光处理Sec-WebSocket-Key但并没有实现ws协议。。。用浏览器里发起ajax请求设置header时Sec-WebSocket-Key以及其他相关的header是被禁止的。这样可以避免客户端发送ajax请求时意外请求协议升级websocket upgrade可以防止反向代理不理解ws协议返回错误的数据。比如反向代理前后收到两次ws连接的升级请求反向代理把第一次请求的返回给cache住然后第二次请求到来时直接把cache住的请求给返回无意义的返回。Sec-WebSocket-Key主要目的并不是确保数据的安全性因为Sec-WebSocket-Key、Sec-WebSocket-Accept的转换计算公式是公开的而且非常简单最主要的作用是预防一些常见的意外情况非故意的。强调Sec-WebSocket-Key/Sec-WebSocket-Accept 的换算只能带来基本的保障但连接是否安全、数据是否安全、客户端/服务端是否合法的 ws客户端、ws服务端其实并没有实际性的保证。 九、数据掩码的作用 WebSocket协议中数据掩码的作用是增强协议的安全性。但数据掩码并不是为了保护数据本身因为算法本身是公开的运算也不复杂。除了加密通道本身似乎没有太多有效的保护通信安全的办法。 那么为什么还要引入掩码计算呢除了增加计算机器的运算量外似乎并没有太多的收益这也是不少同学疑惑的点。 答案还是两个字安全。但并不是为了防止数据泄密而是为了防止早期版本的协议中存在的代理缓存污染攻击proxy cache poisoning attacks等问题。 1、代理缓存污染攻击 下面摘自2010年关于安全的一段讲话。其中提到了代理服务器在协议实现上的缺陷可能导致的安全问题。猛击出处。 “We show, empirically, that the current version of the WebSocket consent mechanism is vulnerable to proxy cache poisoning attacks. Even though the WebSocket handshake is based on HTTP, which should be understood by most network intermediaries, the handshake uses the esoteric “Upgrade” mechanism of HTTP [5]. In our experiment, we find that many proxies do not implement the Upgrade mechanism properly, which causes the handshake to succeed even though subsequent traffic over the socket will be misinterpreted by the proxy.” [TALKING] Huang, L-S., Chen, E., Barth, A., Rescorla, E., and C. Jackson, Talking to Yourself for Fun and Profit, 2010, 在正式描述攻击步骤之前我们假设有如下参与者 攻击者、攻击者自己控制的服务器简称“邪恶服务器”、攻击者伪造的资源简称“邪恶资源”受害者、受害者想要访问的资源简称“正义资源”受害者实际想要访问的服务器简称“正义服务器”中间代理服务器 攻击步骤一 攻击者浏览器 向 邪恶服务器 发起WebSocket连接。根据前文首先是一个协议升级请求。协议升级请求 实际到达 代理服务器。代理服务器 将协议升级请求转发到 邪恶服务器。邪恶服务器 同意连接代理服务器 将响应转发给 攻击者。 由于 upgrade 的实现上有缺陷代理服务器 以为之前转发的是普通的HTTP消息。因此当协议服务器 同意连接代理服务器 以为本次会话已经结束。 攻击步骤二 攻击者 在之前建立的连接上通过WebSocket的接口向 邪恶服务器 发送数据且数据是精心构造的HTTP格式的文本。其中包含了 正义资源 的地址以及一个伪造的host指向正义服务器。见后面报文请求到达 代理服务器 。虽然复用了之前的TCP连接但 代理服务器 以为是新的HTTP请求。代理服务器 向 邪恶服务器 请求 邪恶资源。邪恶服务器 返回 邪恶资源。代理服务器 缓存住 邪恶资源url是对的但host是 正义服务器 的地址。 到这里受害者可以登场了 受害者 通过 代理服务器 访问 正义服务器 的 正义资源。代理服务器 检查该资源的url、host发现本地有一份缓存伪造的。代理服务器 将 邪恶资源 返回给 受害者。受害者 卒。 附前面提到的精心构造的“HTTP请求报文”。 Client → Server: POST /path/of/attackers/choice HTTP/1.1 Host: host-of-attackers-choice.com Sec-WebSocket-Key: connection-key Server → Client: HTTP/1.1 200 OK Sec-WebSocket-Accept: connection-key2、当前解决方案 最初的提案是对数据进行加密处理。基于安全、效率的考虑最终采用了折中的方案对数据载荷进行掩码处理。 需要注意的是这里只是限制了浏览器对数据载荷进行掩码处理但是坏人完全可以实现自己的WebSocket客户端、服务端不按规则来攻击可以照常进行。 但是对浏览器加上这个限制后可以大大增加攻击的难度以及攻击的影响范围。如果没有这个限制只需要在网上放个钓鱼网站骗人去访问一下子就可以在短时间内展开大范围的攻击。 十、写在后面 WebSocket可写的东西还挺多比如WebSocket扩展。客户端、服务端之间是如何协商、使用扩展的。WebSocket扩展可以给协议本身增加很多能力和想象空间比如数据的压缩、加密以及多路复用等。 篇幅所限这里先不展开感兴趣的同学可以留言交流。文章如有错漏敬请指出。 十一、相关链接 RFC6455websocket规范https://tools.ietf.org/html/rfc6455 规范数据帧掩码细节https://tools.ietf.org/html/rfc6455#section-5.3 规范数据帧格式https://tools.ietf.org/html/rfc6455#section-5.1 server-examplehttps://github.com/websockets/ws#server-example 编写websocket服务器https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers 对网络基础设施的攻击数据掩码操作所要预防的事情https://tools.ietf.org/html/rfc6455#section-10.3 Talking to Yourself for Fun and Profit含有攻击描述http://w2spconf.com/2011/papers/websocket.pdf What is Sec-WebSocket-Key for?https://stackoverflow.com/questions/18265128/what-is-sec-websocket-key-for 10.3. Attacks On Infrastructure (Masking)https://tools.ietf.org/html/rfc6455#section-10.3 Talking to Yourself for Fun and Profithttp://w2spconf.com/2011/papers/websocket.pdf Why are WebSockets masked?https://stackoverflow.com/questions/33250207/why-are-websockets-masked How does websocket frame masking protect against cache poisoning?https://security.stackexchange.com/questions/36930/how-does-websocket-frame-masking-protect-against-cache-poisoning What is the mask in a WebSocket frame?https://stackoverflow.com/questions/14174184/what-is-the-mask-in-a-websocket-frame github博客https://github.com/chyingp/blog 新浪微博http://weibo.com/chyingp 站酷主页http://www.zcool.com.cn/u/346408/ websocket和socket.io之间bai的区别为性du质不同、兼容不同、用zhi途不同。 一、性dao质不同 1、websocketwebsocket是一zhuan种让客shu户端和服务器之间能进行双向实时通信的技术。 2、socket.iosocket.io是将WebSocket、AJAX和其它的通信方式全部封装成了统一的通信接口。 二、兼容不同 1、websocket在使用websocket时虽然主流浏览器都已经支持但仍然可能有不兼容的情况。 2、socket.io在使用socket.io时不用担心兼容问题底层会自动选用最佳的通信方式。 三、用途不同 1、websocketwebsocket适合用于client和基于node搭建的服务端使用。 2、socket.iosocket.io适合进行服务端和客户端双向数据通信。
http://www.huolong8.cn/news/424064/

相关文章:

  • html网站建设心得体会手机百度app
  • 成都机械网站制作重庆森林经典台词梁朝伟
  • 网站做百度竞价的标志福州网站建设要找嘉艺网络
  • 网站页面组成部分建设公司加盟
  • 做谷歌推广的网站如何引流图片加字制作免费
  • 公司起名生成器国外seo
  • 网站微信收款二维码怎么做小程序开发外包服务合同
  • 怎么做m开头的网站网站建设不完整之前不建议推行
  • 上海做网站公司做网站的公司有哪些2003iis网站建设错误
  • 怎么制作网站布局cms监控软件手机版
  • 连云港北京网站建设京东商城网站建设方案书
  • 网站制作 商城网页视频下载器安卓破解
  • 网站正能量晚上不用下载进入免费开平网站建设
  • 工体做网站的公司500做网站
  • 做网站免费的域名在线crm什么软件好
  • 福鼎市城市建设监察大队网站抖音代运营公司经营范围
  • 犀牛云做网站怎么做如何创建问卷网站
  • 没网站做推广上传文件生成链接下载
  • 电子商务网站建设步骤有什么电商是什么一般是干嘛的
  • 呼和浩特网站网站建设创意网页设计模板
  • 组建个人网站聚美优品网站建设导向
  • 品牌网站建设小8a蝌蚪网站建设虚线的代码
  • 建设网站那个公司好wordpress 热门搜索
  • 哪里有免费的网站源码手机网站北京
  • 网页制作模板报价模板郑州seo排名收费
  • 网站建设与网络设计课程网站建站历史
  • 怎么做网站推广软件建立一个网站大约要多少钱
  • 长沙 网站seo服务 网络服务互联网道路运输便民政务服务系统
  • 甘肃省城乡住房建设厅网站首页wordpress怎么放音乐
  • 网站头部通用代码建设企业银行客户号在哪里看