标签 通信协议 下的文章 - 易航博客
首页
统计
友链
4K壁纸
留言板
关于
推荐
百度一下: 易航博客
搜 索
1
Joe主题再续前缘版 - 本站同款
5,735 阅读
2
易航网址引导系统
3,071 阅读
3
Js自动播放HTML音乐(不受浏览器限制,无需先与浏览器交互,无需对浏览器进行修改)
1,982 阅读
4
六个好看实用的HTML登录界面源码
1,769 阅读
5
V免签全开源免签约码支付系统(支持:支付宝 微信 QQ)
716 阅读
源码大全
PHP源码
HTML模板
Java源码
小程序源码
热门程序
Typecho
ThinkPHP
Joe主题
技术教程
HTML教程
PHP教程
CSS教程
JS教程
MySQL教程
SEO教程
正则表达式教程
网络技术
话题讨论
PHP话题
书虫小说
剑来
雪中悍刀行
值得一看
媒体新闻
人生语录
热门事件
活动线报
经验分享
关于我们
站点公告
其他文章
登录
/
注册
搜 索
标签搜索
网站源码
PHP
PHP教程
PHP源码
PHP函数方法
JavaScript
HTML模板
HTML
Joe主题
网站模板
Typecho
ThinkPHP
PHP网络请求
支付系统
通信协议
码支付
API接口
Typecho插件
PHP发送数据
网络攻击
易航
累计撰写
90
篇文章
累计收到
920
条评论
首页
栏目
源码大全
PHP源码
HTML模板
Java源码
小程序源码
热门程序
Typecho
ThinkPHP
Joe主题
技术教程
HTML教程
PHP教程
CSS教程
JS教程
MySQL教程
SEO教程
正则表达式教程
网络技术
话题讨论
PHP话题
书虫小说
剑来
雪中悍刀行
值得一看
媒体新闻
人生语录
热门事件
活动线报
经验分享
关于我们
站点公告
其他文章
页面
统计
友链
4K壁纸
留言板
关于
推荐
百度一下: 易航博客
用户登录
登录
注册
找到
4
篇与
通信协议
相关的结果
2022-08-23
浅聊一下XSS和CSRF攻击以及防御方法
XSS攻击XSS,即为(CrossSiteScripting),中文名为跨站脚本,是发生在目标用户的浏览器层面上的,当渲染 DOM 树的过程成发生了不在预期内执行的 JS 代码时,就发生了 XSS 攻击,大多数 XSS 攻击的主要方式是嵌入一段远程或者第三方域上的 JS 代码。实际上是在目标网站的作用域下执行了这段JS代码。XSS防御XSS 防御的总体思路是:对输入(和URL参数)进行过滤,对输出进行编码。也就是对提交的所有内容进行过滤,对 url 中的参数进行过滤,过滤掉会导致脚本执行的相关内容 然后对动态输出到页面的内容进行html编码,使脚本无法在浏览器中执行。虽然对输入过滤可以被绕过,但是也还是会拦截很大一部分的XSS攻击。CSRF攻击CSRF(CrossSiteRequest Forgery,跨站请求伪造),字面理解意思就是在别的站点伪造了一个请求。专业术语来说就是在受害者访问一个网站时,其 Cookie 还没有过期的情况下,攻击者伪造一个链接地址发送受害者并欺骗让其点击,从而形成 CSRF 攻击。CSRF防御防御 CSRF 攻击主要有三种策略:验证HTTP Referer 字段;在请求地址中添加 Token 并验证;在 HTTP 头中自定义属性并验证。
2022年08月23日
96 阅读
0 评论
4 点赞
2022-08-19
PHP过滤XSS攻击插件源码实例
Xss攻击是最经常遇到的攻击了,其中原理大家应该都懂了,我就不再这里做更多的详解了。今天给大家分享的实例源码,直接可用的那种。虽然现在很多框架都封装了这种,但是作为PHP开发者的你,XSS攻击原理与防止还是要懂得的。文档说明:1.将waf.php传到要包含的文件的目录2.在页面中加入防护,有两种做法,根据情况二选一即可:a 在所需要防护的页面加入代码:require_once('waf.php');就可以做到页面防注入、跨站。如果想整站防注,就在网站的一个公用文件中,如数据库链接文件config.inc.php中添加 require_once('waf.php'); 来调用本代码b 在每个文件最前加上代码在php.ini中找到:Automatically add files before or after any PHP document. auto_prepend_file = waf.php路径;PHP文件 waf.php<?php /** * 云体检通用漏洞防护补丁v1.1 * 更新时间:2013-05-25 * 功能说明:防护XSS,SQL,代码执行,文件包含等多种高危漏洞 * 博客:http://blog.bri6.cn */ $url_arr = [ 'xss' => "\\=\\+\\/v(?:8|9|\\+|\\/)|\\%0acontent\\-(?:id|location|type|transfer\\-encoding)", ]; $args_arr = [ 'xss' => "[\\'\\\"\\;\\*\\<\\>].*\\bon[a-zA-Z][\\s\\r\\n\\v\\f]*\\=|\\b(?:expression)\\(|\\<script[\\s\\\\\\/]|\\<\\!\\[cdata\\[|\\b(?:eval|alert|prompt|msgbox)\\s*\\(|url\\((?:\\#|data|javascript)", 'sql' => "[^\\(\\s|\\b)+(?:select\\b|update\\b|insert(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+into\\b).+?(?:from\\b|set\\b)|[^\\(\\s|\\b)+(?:create|delete|drop|truncate|rename|desc)(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+(?:table\\b|from\\b|database\\b)|into(?:(\\/\\*.*?\\*\\/)|\\s|\\+)+(?:dump|out)file\\b|\\bsleep\\([\\s]*[\\d]+[\\s]*\\)|benchmark\\(([^\\,]*)\\,([^\\,]*)\\)|(?:declare|set|select)\\b.*@|union\\b.*(?:select|all)\\b|(?:select|update|insert|create|delete|drop|grant|truncate|rename|exec|desc|from|table|database|set|where)\\b.*(charset|ascii|bin|char|uncompress|concat|concat_ws|conv|export_set|hex|instr|left|load_file|locate|mid|sub|substring|oct|reverse|right|unhex)\\(|(?:master\\.\\.sysdatabases|msysaccessobjects|msysqueries|sysmodules|mysql\\.db|sys\\.database_name|information_schema\\.|sysobjects|sp_makewebtask|xp_cmdshell|sp_oamethod|sp_addextendedproc|sp_oacreate|xp_regread|sys\\.dbms_export_extension)", 'other' => "\\.\\.[\\\\\\/].*\\%00([^0-9a-fA-F]|$)|%00[\\'\\\"\\.]" ]; $referer = empty($_SERVER['HTTP_REFERER']) ? array() : array($_SERVER['HTTP_REFERER']); $query_string = empty($_SERVER["QUERY_STRING"]) ? array() : array($_SERVER["QUERY_STRING"]); check_data($query_string, $url_arr); check_data($_GET, $args_arr); check_data($_POST, $args_arr); check_data($_COOKIE, $args_arr); check_data($referer, $args_arr); function W_log($log) { $logpath = $_SERVER["DOCUMENT_ROOT"] . "/log.txt"; $log_f = fopen($logpath, "a+"); fputs($log_f, $log . "\r\n"); fclose($log_f); } function check_data($arr, $v) { foreach ($arr as $key => $value) { if (!is_array($key)) { check($key, $v); } else { check_data($key, $v); } if (!is_array($value)) { check($value, $v); } else { check_data($value, $v); } } } function check($str, $v) { foreach ($v as $key => $value) { if (preg_match("/" . $value . "/is", $str) == 1 || preg_match("/" . $value . "/is", urlencode($str)) == 1) { //W_log("<br>IP: ".$_SERVER["REMOTE_ADDR"]."<br>时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交数据: ".$str); print "您的提交带有不合法参数,谢谢合作"; exit(); } } }
2022年08月19日
70 阅读
0 评论
1 点赞
2022-08-17
有了HTTP,为什么还要RPC?
有了HTTP,为什么还要RPC?RPC:Remote Procedure Call,远程过程调用一直以来都没有深究过RPC和HTTP的区别,不都是写一个服务然后在客户端调用么?HTTP和RPC最本质的区别,就是 RPC 主要是基于 TCP/IP 协议的,而 HTTP 服务主要是基于 HTTP 协议的。我们都知道 HTTP 协议是在传输层协议 TCP 之上的,所以效率来看的话,RPC 当然是要更胜一筹啦!HTTP和RPC的相同点是,底层通讯都是基于socket,都可以实现远程调用,都可以实现服务调用服务HTTP 的本质首先你要明确 HTTP 是一个协议,是一个超文本传输协议。HTTP 它是协议,不是运输通道。它基于 TCP/IP 来传输文本、图片、视频、音频等。重点来了。HTTP 不提供数据包的传输功能,也就是数据包从浏览器到服务端再来回的传输和它没关系。这是 TCP/IP 干的。那 HTTP 有啥用?我们来分析一波。我们上网要么就是获取一些信息来看,要么就是修改一些信息。比如你用浏览器刷微博就是获取信息,发微博就是修改信息。所以说浏览器需要告知服务器它需要什么,这次的请求是要获取哪些信息?发怎么样的微博。这就涉及到浏览器和服务器之间的通信交互。而交互就需要一种格式。像你我之间的谈话就用中文,你要突然换成俄语我听不懂那不就 GG 了。所以说 HTTP 它规定了一种格式,一种通信格式,大家都用这个格式来交谈。这样不论你是什么服务器、什么浏览器都能顺利的交流,减少交互的成本。就像全世界如果都讲中文,那我们不就不需要学英文了,那不就较少交互的成本了。不像现在我们还得学英文,不然就看不懂文档等等。万一之后俄语又起来了,咱还得对接俄文,这交互成本是不是就上来了。而网络世界还好,咱们现在的 Web 交互基本上就是 HTTP 了。其实 HTTP 协议的格式很像我们信封,有个固定的格式。左上角写邮编,右上角贴邮票,然后地址姓名啥的依次来。因为计算机是很死板的,不像我们人一样有一种立体扫描感,所以要规定先写头、再写尾。你要是先写尾,再写头计算机就认不出来了。所以 HTTP 就规定了请求先搞请求行、再搞请求报头、再搞请求体。响应就状态行、响应报头、响应体。所以 HTTP 的本质是什么?就是客户端和服务端约定好的一种通信格式。HTTP 和 RPC 的关系HTTP 和 RPC 其实是两个维度的东西, HTTP 指的是通信协议。而 RPC 则是远程调用,其对应的是本地调用。RPC 的通信可以用 HTTP 协议,也可以自定义协议,是不做约束的。像之前的单体时代,我们的 service 调用就是自己实现的方法,是本地进程内的调用。public User getUserById(Long id) { return userDao.getUserById(id); // 这叫本地调用 }现在都是微服务了,根据业务模块做了不同的拆分,像用户的服务不用我这个小组负责,我这小组只要写订单服务就行了。但是我们服务需要用到用户的信息,于是我们需要调用用户小组的服务,于是代码变成了以下这种public User getUserById(Long id) { return userConsumer.getUserById(id); // 这是远程调用,逻辑是用户小组的服务实现的。 }把之前的用户实现拆分出来弄了一个用户服务,订单相关的也拆成了订单服务,都单独部署。这样订单相关的服务要获取用户的信息就需要远程调用了。可以看到 RPC 就是通过网络进行远程调用,订单服务其实就是客户端,而用户服务是服务端。这又涉及到交互了,所以也需要约定一个格式,至于要不要用 HTTP 这个格式,就是大家自己看着办。至此相信你对 HTTP 是啥也清楚了。RPC 和 HTTP 的之间的关系也清楚了。那为什么要有 RPC?可能你常听到什么什么之间是 RPC 调用的,那你有没有想过为什么要 RPC, 我们直接 WebClient HTTP 调用不行么?其实 RPC 调用是因为服务的拆分,或者本身公司内部的多个服务之间的通信。服务的拆分独立部署,那服务间的调用就必然需要网络通信,用 WebClient 调用当然可行,但是比较麻烦。我们想即使服务被拆分了但是使用起来还是和之前本地调用一样方便。所以就出现了 RPC 框架,来屏蔽这些底层调用细节,使得我们编码上还是和之前本地调用相差不多。并且 HTTP 协议比较的冗余,RPC 都是内部调用所以不需要太考虑通用性,只要公司内部保持格式统一即可。所以可以做各种定制化的协议来使得通信更高效。比如规定 yes 代表 yes的练级攻略,你看是不是更高效了,少传输的 5 个字。就像特殊行动的暗号,高效简洁!所以公司内部服务的调用一般都用 RPC,而 HTTP 的优势在于通用,大家都认可这个协议。所以三方平台提供的接口都是通过 HTTP 协议调用的。所以现在知道为什么我们调用第三方都是 HTTP ,公司内部用 RPC 了吧?上面这段话看起来仿佛 HTTP 和 RPC 是对等关系,不过相信大家看了之前的解析心里应该都有数了。下面来具体说一说 RPC 服务和 HTTP 服务的区别。OSI 网络七层模型在说 RPC 和 HTTP 的区别之前,我觉得有必要了解一下 OSI 的七层网络结构模型它可以分为以下几层:(从上到下)第一层:应用层。定义了用于在网络中进行通信和传输数据的接口。第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等。第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断。第四层:传输层。管理着网络中的端到端的数据传输。第五层:网络层。定义网络设备间如何传输数据。第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输。第七层:物理层。这一层主要就是传输这些二进制数据。实际应用过程中,五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。我们应该将重点放在应用层和传输层这两个层面。因为 HTTP 是应用层协议,而 TCP 是传输层协议。好,知道了网络的分层模型以后我们可以更好地理解为什么 RPC 服务相比 HTTP 服务要 Nice 一些!RPC 服务从三个角度来介绍 RPC 服务,分别是:RPC 架构同步异步调用流行的 RPC 框架RPC 架构先说说 RPC 服务的基本架构吧。我们可以很清楚地看到,一个完整的 RPC 架构里面包含了四个核心的组件。分别是:ClientServerClient StubServer Stub(这个Stub大家可以理解为存根)分别说说这几个组件:客户端(Client),服务的调用方。服务端(Server),真正的服务提供者。客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法。RPC 主要是用在大型企业里面,因为大型企业里面系统繁多,业务线复杂,而且效率优势非常重要的一块,这个时候 RPC 的优势就比较明显了。比如我们有一个处理订单的系统服务,先声明它的所有的接口,然后将整个项目打包,服务端这边引入,然后实现相应的功能,客户端这边也只需要引入就可以调用了。为什么这么做?主要是为了减少客户端这边的包大小,因为每一次打包发布的时候,包太多总是会影响效率。另外也是将客户端和服务端解耦,提高代码的可移植性。同步调用与异步调用什么是同步调用?什么是异步调用?同步调用就是客户端等待调用执行完成并返回结果。异步调用就是客户端不等待调用执行完成返回结果,不过依然可以通过回调函数等接收到返回结果的通知。如果客户端并不关心结果,则可以变成一个单向的调用。流行的 RPC 框架目前流行的开源 RPC 框架还是比较多的。下面重点介绍三种:①gRPC 是 Google 最近公布的开源软件,基于最新的 HTTP2.0 协议,并支持常见的众多编程语言。我们知道 HTTP2.0 是基于二进制的 HTTP 协议升级版本,目前各大浏览器都在快马加鞭的加以支持。这个 RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持。②Thrift 是 Facebook 的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器来对它所定义的 IDL 定义文件自动生成服务代码框架。用户只要在其之前进行二次开发就行,对于底层的 RPC 通讯等都是透明的。不过这个对于用户来说的话需要学习特定领域语言这个特性,还是有一定成本的。③Dubbo 是阿里集团开源的一个极为出名的 RPC 框架,在很多互联网公司和企业应用中广泛使用。协议和序列化框架都可以插拔是及其鲜明的特色。HTTP 服务通常,我们的开发模式一直定性为 HTTP 接口开发,也就是我们常说的 RESTful 风格的服务接口。的确,对于在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的 HTTP 协议进行传输。平时的工作主要就是进行接口的开发,还要写一大份接口文档,严格地标明输入输出是什么?说清楚每一个接口的请求方法,以及请求参数需要注意的事项等。比如下面这个例子:POST http://blog.bri6.cn/接口可能返回一个 JSON 字符串或者是 XML 文档。然后客户端再去处理这个返回的信息,从而可以比较快速地进行开发。但是对于大型企业来说,内部子系统较多、接口非常多的情况下,RPC 框架的好处就显示出来了,首先就是长链接,不必每次通信都要像 HTTP 一样去 3 次握手什么的,减少了网络开销。其次就是 RPC 框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。小结RPC 服务和 HTTP 服务还是存在很多的不同点的,一般来说,RPC 服务主要是针对大型企业的,而 HTTP 服务主要是针对小企业的,因为 RPC 效率更高,而 HTTP 服务开发迭代会更快。很多RPC框架包含了重试机制,路由策略,负载均衡策略,高可用策略,流量控制策略等等。如果应用进程之间只使用HTTP协议通信,显然是无法完成上述功能的。总之,选用什么样的框架不是按照市场上流行什么而决定的,而是要对整个项目进行完整地评估,从而在仔细比较两种开发框架对于整个项目的影响,最后再决定什么才是最适合这个项目的。一定不要为了使用 RPC 而每个项目都用 RPC,而是要因地制宜,具体情况具体分析。
2022年08月17日
38 阅读
0 评论
1 点赞
2022-08-01
一文搞懂HTTP和HTTPS的通信过程及区别
一、两者的区别端口: http 端口号是80, https 端口号是443传输协议: http 是超文本传输协议,属于明文传输;https 是安全的超-文本传输协议,是经过 SSL 加密后的传输协议安全性: https 使用了 TLS/SSL 加密,比 http 更加的安全证书: https 需要申请 ca 证书二、HTTP的通信过程理解: 作为标准的 C/S 模型, http 协议总是由客户端发起,服务端进行响应。DNS 解析,域名系统 DNS 将域名解析成IP地址建立 TCP 连接,进行 TCP 的三次握手客户端发送请求服务端响应客户端,向客户端发送数据通信完成, TCP 连接关闭三、HTTPS的通信过程理解: https 通信是建立在 ssl 连接层之上的请求和响应,客户端将加密组件发送到服务端,服务端进行匹配后将数字证书等信息发送到客户端,客户端进行证书验证,验证通过后使用非对称加密对数据的密钥进行协商,协商后得到对称的加密密钥,然后使用对称算法进行 TCP 链接,然后与客户端进行三次握手后,进行数据传输,传输完成后,四次挥手,断开链接,通信结束。客户端和服务端通过 TCP 建立连接,并发送 https 请求。服务端响应请求,并将数字证书发送给客户端,数字证书包括 公共秘钥、域名、申请证书的公司 。客户端收到服务端的数字证书之后,会验证数字证书的合法性。如果公钥合格,那么客户端会生成 client key ,一个用于进行对称加密的密钥,并用服务端的公钥对客户端密钥进行非对称加密。客户端会再次发起请求,将加密之后的客户端密钥发送给服务端。服务端接收密文后,会用私钥对其进行非对称解密,得到客户端秘钥。并使用客户端秘钥进行对称加密,生成密文并发送。客户端收到密文,并使用客户端秘钥进行解密,获取数据。四、HTTPS通信过程介绍图
2022年08月01日
31 阅读
1 评论
1 点赞