http协议的相关知识点

  协议:不同的硬件,操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。

  协议中存在各式各样的内容。从电缆的规格到ip地址的选定方法,寻找异地用户的方法,双方建立通信的顺序,以及web页面显示需要处理的步骤,等等。

  像这样把与互联网相关联的协议集合起来总称为TCP/IP.也有说法认为,TCP/IP是指TCP和IP这两种协议。还有一种说法认为,TCP/IP是在IP协议的通信过程中,使用到的协议族的统称。(PPPoe,DNS,UDP,FTP,HTTP,SNMP,IP,ICMP,TCP,FDDI,IEEE 802.3等协议);

注: TCP/IP 是互联网相关的各类协议族的总称,TCP/IP协议族按层次分别分为以下4层:应用层,传输层,网络层和数据链路层。

使用http协议访问web

  你通过wifi连接电脑上网浏览网址,通过一个域名搜索一个网站,首先是浏览器缓存里面是否存在对应的ip,如果没有,则查看host里面是否存在之前解析的ip(如果你之前访问过该网站的话),如果也没有,则会查看路由器的缓存,如果还不存在,就会去看ISP DNS(客户端电脑上设置的首选DNS服务器)缓存,如果都不存在,则本地dns服务器会将请求转发到互联网上的根域服务器获取dns解析域名,客户端电脑由此获取服务端的ip地址,之后把访问请求通过层次关系后传给路由(网关),路由根据ip地址查看自身的路由表(静态路由表和动态路由表),通过点对点法则(和交换机的广播不同,广播是一对多)将请求发送给该路由已知的下一个路由(局部最优路径),之后下一个路由也根据路由表转发该请求,直到传到目的ip地址。服务端接到请求后,根据你发送的请求将固定的页面按同样的方法发送给你。

返回结果的http状态码

  点击http错误码大全详情了解

其他知识点

负责传输的IP协议

  按层次分,IP(Internet protocol)网际协议位于网络层。Internet Protocol这个名称可能听起来有点夸张,但试试正是如此,几乎所有使用网络的系统都会用到IP协议。可能会有人把“IP”和“IP地址”搞混,“IP”其实是一种协议的名称。
  IP地址指明了节点被分配到的地址,MAC地址是只网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本不会变。

  IP间的通信依赖MAC地址。在网络上,通信的双方在同意局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能链接到对方。而在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时,会采用ARP协议(Address Resolution Protocol).ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。

与http协议协作的web服务器

通信数据转发程序

  http通信时,除客户端和服务器外,还有一些用于通信数据 转发的应用程序,例如代理,网关和隧道,他们可以配合服务器工作。
  这些应用程序和服务器可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服务器发送的相应再转发给客户端。

代理

  代理是一种有转发功能的应用程序,他扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同事也接收服务器返回的相应并转发给客户端。

注:后端使用代理服务器可以很大限度的减少安全隐患防止黑客攻击,减轻服务器负担(如缓存服务器),不仅仅是后端使用,用户可以用代理来“FQ”,控制用户访问网站的权限,同时也可以部分防止黑客入侵。

网关

  网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非http协议服务,在客户端和网关的通信线路上加密能提高通信的安全性(比如,网关可以连接数据库,使用sql语句查询数据,另外在web购物网站上信用卡结算时,网关可以和信用卡结算系统联动。)
  路由器就是一个网关。

隧道

  隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信链接的应用程序。
  隧道可按照要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全通信。


URI,URL和URN的区别

  网上解释的太多太杂了,说了这么一大串怕是连自己都弄糊涂了,所以博主这里总结一遍

关于URL:

  URL是URI的一种,不仅标识了Web 资源,还指定了操作或者获取方式,同时指出了主要访问机制和网络位置

关于URN:

  URN是URI的一种,用特定命名空间的名字标识资源。使用URN可以在不知道其网络位置及访问方式的情况下讨论资源

  // 例子: http://bitpoetry.io/posts/hello.html#intro

http:// 定义如何访问资源的方式

  bitpoetry.io/posts/hello.html 资源存放的位置

intro 资源

  URL是URI的一个子集,告诉我们访问网络位置的方式
  http://bitpoetry.io/posts/hello.html

  URN是URI的子集,包括名字(给定的命名空间内),但是不包括访问方式
  bitpoetry.io/posts/hello.html#intro

  URI(统一资源标识符)其实就是URL+URN,URL又叫做统一资源定位符,是URI的一种。详情点击URL、URI和URN三者之间的区别

https协议

  HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输层协议)的组合使用,加密HTTP的通信内容。
用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(HTTP secure,超文本传输安全协议)或HTTP over SSL。

web的攻击技术

在客户端即可篡改请求

  在web应用中,从浏览器那接收到的http请求的全部内容,都可以在客户端自由地变更篡改。所以web应用可能会接收到与预期数据不相同的内容。

  在http请求报文内加载攻击代码,就能发起对web应用的攻击。通过url查询字段或表单,http首部,cookie等途径把攻击代码传入,若这时web应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限。

针对web应用的攻击模式

  • 主动攻击

      主动攻击是指攻击者通过直接访问web应用,将攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。
    主动攻击模式里具有代表性的攻击是SQL注入攻击和OS命令注入攻击。

SQL注入攻击(SQL Injection)

  SQL注入是指针对web应用使用的数据库,通过运行非法的SQL而产生的攻击。该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄露。
web应用通常都会用到数据库,当需要对数据库表内的数据进行检索或添加,删除等操作时,会使用SQL语句链接数据库进行特定的操作。如果在调用SQL语句的方式上存在疏漏,就有可能执行被恶意注入非法SQL语句。
SQL注入攻击有可能会造成以下等影响。

非法查看或篡改数据库内的数据

规避认证

执行和数据库服务器业务关联的程序等

OS命令注入攻击(OS Command Injection)

  OS命令注入攻击是指通过web应用执行非法的操作系统命令达到攻击的目的。只要在能调用shell函数的地方就有存在被攻击的风险。

  可以从web应用中通过shell来调用操作系统命令。倘若调用shell时存在疏漏,就可以执行插入的非法OS命令。


  • 被动攻击

      被动攻击是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标web应用访问发起攻击。 如:

    第一步:攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的HTTP请求。
    第二步:当用户不知不觉中招之后,用户的浏览器或者邮件客户端就会触发这个陷阱。
    第三步:中招后的用户浏览器会把含有攻击代码的http请求发送给作为攻击目标的web应用,运行攻击代码。
    第四步:执行完攻击代码,存在安全漏洞的web应用会成为攻击者的跳板,可能导致用户所持的cookie等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造。

跨站脚本攻击(Cross-Site Scripting,XSS)

  跨站脚本攻击是指通过存在安全漏洞的web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。动态创建的HTML部分有可能隐藏着安全漏洞。就这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。

  跨站脚本攻击有可能造成以下影响。

1.利用虚假输入表单骗取用户个人信息。

2.利用脚本窃取用户的cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。

3.显示伪造的文章或图片。

跨站点请求伪造(Cross-Site Request Forgeries,CSRF)

  跨站点请求伪造攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。

  跨站点请求伪造有可能会造成以下等影响。

1.利用已通过认证的用户权限更新设定信息等

2.利用已通过认证的用户权限购买商品

3.利用已通过认证的用户权限在留言板上发表言论

HTTP首部注入攻击(HTTP Header Injection)

   HTTP首部注入攻击是指攻击者通过在相应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。
  向首部主体内添加内容的攻击称为HTTP响应截断攻击(HTTP Response Splitting Attack)

  HTTP首部注入攻击有可能造成以下影响。

1.设置任何Cookie信息

2.重定向至任意URL

3.显示任意的主体(HTTP响应截断攻击)

HTTP响应截断攻击(HTTP Response Splitting Attack)

  HTTP相应截断攻击是用在HTTP首部注入的一种攻击。攻击顺序相同,但是要将两个 %0D%0A%0D%0A 并排插入字符串后发送。利用这两个连续的唤醒就可做出HTTP首部与主体分割所需的空行了,这样就能显示伪造的主体,达到攻击目的。这样的攻击叫做HTTP响应截断攻击。
  利用这个攻击,已触发陷阱的用户浏览器会显示伪造的web页面,再让用户输入自己的个人信息等,可达到和跨站脚本攻击相同的效果。
  另外,滥用HTTP/1.1中汇集多响应返回功能,会导致缓存服务器对任意内容进行缓存操作。这种攻击称为缓存污染。使用该缓存服务器的用户,在浏览遭受攻击的网站时,会不断地浏览被替换掉的web网页。


其他攻击方式

邮件首部注入攻击(Mail Header Injection)

  邮件首部注入是指web应用中的邮件发送功能,攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击。利用存在安全漏洞的web网站,可对任意邮件地址发送广告邮件或病毒邮件。

目录遍历攻击(Directory Traversal)

  目录遍历攻击也叫路径遍历攻击(Path Traversal)攻击。通过web应用对文件处理操作时,在由外部指定文件名的处理存在疏漏的情况下,用户可使用../等相对路径定位到/etc/passed等绝对路径上,因此服务器上任意的文件或文件目录皆有可能被访问到。这样一来,就可能非法浏览,篡改或删除web服务器上的文件。

  固然存在输出值转义的问题,但更应该关闭制定对任意文件名的访问权限。

远程文件包含漏洞(Remote File Inclusion)

  远程文件包含漏洞是指当部分脚本内容需要从其他文件读入时,攻击这利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。

  这主要是PHP存在的安全漏洞,对PHP的include或require来说,这是一种可通过设定,指定外部服务器的url作为文件名的功能。但是,该功能太危险,PHP5.2.0之后默认设定此功能无效。
  固然存在输出值转义的问题,但更应控制对任意文件名的指定。

点击劫持(Clickjacking)

  点击劫持是指利用透明的按钮或链接做成陷阱,覆盖在web页面之上、然后有事用户在不知情的情况下,点击那个链接访问内容的一种攻击手段。这种行为又称为界面伪装(UI Redressing)

Dos攻击(Denial of Service attack)

  Dos攻击是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。Dos攻击的对象不仅限于web网站,还包括网络设备及服务器等。

  主要有一下两种Dos攻击方式。

  • 集中利用访问请求造成元过载,资源用尽的同事,实际上服务也就呈停止状态。
  • 通过攻击安全漏洞使服务停止。

  多台计算机发起的Dos攻击称为DDoS攻击(Distributed Denial of Service attack)。DDoS攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板。

因设置或设计上的权限引发的安全漏洞

  • 强制浏览
  • 不正确的错误消息处理
  • 开放重定向

因会话管理疏忽引发的安全漏洞

  • 会话劫持
  • 会话固定攻击

后门程序

  • 开发截断作为Debug调用的后门程序
  • 开发者为了自身利益植入的后门程序
  • 攻击者通过某种方法设置的后门程序

其他安全漏洞

密码破解

  • 通过网络的密码试错

    • 穷举法
      - 字典攻击(字典攻击是指利用实现手机号的候选密码(经过这种祝贺方式后存入字典),枚举字典中的密码,尝试通过认证的一种攻击手法。)
  • 对已加密密码的破解(指攻击这入侵系统,疑惑得加密或散列处理的密码数据的情况)

    web应用在保存密码时,一般不会直接以明文的方式保存,通过散列函数做散列处理或加salt的手段对要保存的密码本身加密。那及时攻击者使用某些手段窃取密码数据,如果想要真正使用这些密码,则必须先通过解码等手段,把加密处理的密码还原成明文形式。

    • 通过穷举法/字典攻击进行类推
    • 彩虹表
    • 拿到密钥
    • 加密算法的漏洞

后记

  本篇博客的部分重要内容来源于《图解HTTP》(【日】上野 宣著 于均良 译)。

posted @ 2020-12-19 14:39  DAmarkday  阅读(225)  评论(0编辑  收藏  举报