图解 HTTP

常见 Web 的攻击技术

互联网上的攻击大都将 Web 站点作为目标。常见的攻击手段有哪些,以及攻击会造成怎样的影响。

简单的 HTTP 协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象。应用 HTTP 协议的服务器和客户端,以及运行在服务器上的 Web 应用等资源才是攻击目标。

针对 Web 应用的攻击模式有2种:

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

被动攻击:被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标 Web 应用访问发起攻击。被动攻击模式中具有代表性的攻击是跨站脚本攻击(xss)和跨站点请求伪造(csrf)。

被动攻击通常的攻击模式如下所示。

  1. 攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的 HTTP 请求。
  2. 当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱。
  3. 中招后的用户浏览器会把含有攻击代码的 HTTP 请求发送给作为攻击目标的 Web 应用,运行攻击代码。
  4. 执行完攻击代码,存在安全漏洞的 Web 应用会成为攻击者的跳板,可能导致用户所持的 Cookie 等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。

实施 Web 应用的安全对策可大致分为以下两部分。

  • 客户端的验证Web 应用端(服务器端)的验证
  • 输入值验证
  • 输出值转义

多数情况下采用 JavaScript 在客户端验证数据。可是在客户端允许篡改数据或关闭 JavaScript,不适合将 JavaScript 验证作为安全的防范对策。保留客户端验证只是为了尽早地辨识输入错误,起到提高 UI 体验的作用。Web 应用端的输入值验证按 Web 应用内的处理则有可能被误认为是具有攻击性意义的代码。输入值验证通常是指检查是否是符合系统业务逻辑的数值或检查字符编码等预防对策。

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

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

  • 利用虚假输入表单骗取用户个人信息。
  • 利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
  • 显示伪造的文章或图片。

HTTP 头信息

请求字段(Request)

字段名 说明 示例
Accept 指定客户端能够接收的内容类型 Accept: text/html
Accept-Charset 客户端可以接受的字符编码集 Accept-Charset: utf-8
Accept-Encoding 能够接受的内容编码方式 Accept-Encoding:gzip, deflate
Accept-Language 可以接受的自然语言列表 Accept-Language:zh-CN,zh;q=0.9,en;q=0.8
Accept-Datetime 指定接受的版本时间 Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT
Authorization 用于身份认证的凭证信息 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control 指定请求缓存机制 Cache-Control: no-cache
Connection 连接类型(默认持久连接) Connection: keep-alive
Cookie 向服务器发送的Cookie信息 Cookie: $Version=1; Skin=new;
Content-Length 请求信息长度 Content-Length: 348
Content-Type 当前请求MIME类型 Content-Type:application/json; charset=utf-8
Date 发送时间 Date:Thu, 23 Nov 2017 14:41:17 GMT
Expect 指明需要的特定服务器行为 Expect: 100-continue
From 发起请求的用户邮箱 From: admin@321dh.com
Host 指明请求服务器的域名和端口号 Host:www.321dh.com:80
If-Match 只有请求内容与实体相匹配才有效 If-Match: "737060cd8c284d8af7ad3082f209582d"
If-Modified-Since 设置更新时间 If-Modified-Since: Sat,29 Oct 1994 19:43:31 GMT
If-None-Match 设置客户端ETag值 If-None-Match: "737060cd8c284d8af7ad3082f209582d"
If-Range 适用于断点续传下载 If-Range: "737060cd8c284d8af7ad3082f209582d"
If-Unmodified-Since 请求体在给定时间未修改才响应 If-Unmodified-Since: Sat,29 Oct 1994 19:43:31 GMT
Max-Forwards 限制代理或网关转发消息的次数 Max-Forwards: 10
Origin 跨域资源请求的地址 Origin: http://www.321dh.com
Pragma 设置特殊实现的指令 Pragma: no-cache
Proxy-Authorization 向连接代理认证的凭证信息 Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range 指定请求返回的字节数范围 Range: bytes=500-999
Referer 表明当前请求从哪个页面过来的 Referer: http://www.321dh.com
TE 指明期望使用的传输编码 TE: trailers, deflate
User-Agent 请求用户的身份信息 Mozilla/5.0 (Mac OS X 10_13_1) Chrome/62.0.3202.94 Safari/537.36
Upgrade 请求服务端升级协议 Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Via 表明请求代理的来源地址 Via: 1.0 fred, 1.1 example.com(Apache/1.1)
Warning 消息实体中可能存在错误的警告 Warning: 199 Miscellaneous warning

常见的非标准请求字段

字段名 说明 示例
X-Requested-With 指明Ajax及可扩展标记语言请求 X-Requested-With: XMLHttpRequest
DNT 设置是否停止跟踪用户 DNT: 1
X-Forwarded-For 表明客户端最终连接服务器的地址 X-Forwarded-For: client1, proxy1, proxy2
X-Forwarded-Host 表明客户端要请求的原始主机 X-Forwarded-Host: www.321dh.com:80
X-Csrf-Token 防止跨站请求伪造 X-Csrf-Token: i8XNjC4b8KVok4uw5RftR38Wgp2BFwql

响应字段(Response)

字段名 说明 示例
Access-Control-Allow-Origin 指定参与跨域的网站 Access-Control-Allow-Origin: *
Access-Control-Allow-Methods 允许的请求方法 Access-Control-Allow-Methods: GET, PUT, POST, DELETE
Accept-Patch 支持的文件类型 Accept-Patch: text/example;charset=utf-8
Accept-Ranges 支持的部分内容范围类型 Accept-Ranges: bytes
Age 当前对象缓存时长 Age: 244
Allow 对于特定资源有效的动作 Allow: GET, HEAD
Cache-Control 指定缓存机制 Cache-Control: max-age=3600
Connection 连接类型(默认持久连接) Connection: keep-alive
Content-Disposition 告知下载文件的名称 Content-Disposition: attachment; filename="name.ext"
Content-Encoding 数据编码方式 Content-Encoding: gzip
Content-Language 响应内容使用的语言 Content-Language: da
Content-Length 信息长度 Content-Length: 348
Content-Location 响应数据的地址选项 Content-Location: /index.htm
Content-Type 当前内容的MIME类型 Content-Type:application/json
Date 响应时间 Date:Fri, 24 Nov 2017 02:59:05 GMT
Expires 过期时间 Expires:Mon, 27 Nov 2017 15:20:50 GMT
Last-Modified 最后修改时间 Last-Modified:Mon, 13 Nov 2017 20:19:12 GMT
Location 重定向地址 Location: http://www.321dh.com/index.html
Pragma 特殊实现的指令 Pragma: no-cache
Public-Key-Pins 用于缓解中间人攻击 Public-Key-Pins: max-age=250; pin-sha256="ozYqqbQ2yXLVKB9="
Refresh 设置重定向跳转 Refresh: 5; url=http://www.321dh.com
Server 服务器信息 Server: nginx/1.13.3
Set-Cookie 发送给客户端的数据 Set-Cookie: UserID=JohnDoe; Max-Age=3600;
Status 状态 Status: 304
Transfer-Encoding 数据传输的编码方式 Transfer-Encoding: chunked
Upgrade 要求客户端升级协议 Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Vary 匹配请求协议方式 Vary: Accept-Encoding
Via 告知客户端当前响应发送的途径 Via: 1.0 fred, 1.1 321dh.com
WWW-Authenticate 指定请求使用的认证方式 WWW-Authenticate: Basic

常见的非标准响应字段

字段名 说明 示例
X-XSS-Protection XSS跨站脚本攻击过滤器 X-XSS-Protection: 1; mode=block
X-Content-Type-Options 防止客户端嗅探文件MIME类型 X-Content-Type-Options: nosniff
X-Powered-By 显示响应脚本语言 X-Powered-By: PHP/5.4.0
X-UA-Compatible 推荐指定的渲染引擎来显示内容 X-UA-Compatible: IE=edge
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,941评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,397评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,345评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,851评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,868评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,688评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,414评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,319评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,775评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,945评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,096评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,789评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,437评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,993评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,107评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,308评论 3 372
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,037评论 2 355

推荐阅读更多精彩内容

  • 本文是《图解HTTP》读书笔记的第二篇,主要包括此书的第六章内容,因为第六章的内容较多,而且比较重要,所以单独写为...
    lijiankun24阅读 1,366评论 0 6
  • HTTP是不保存状态的协议,协议本身不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事物,确保协议的可...
    奉灬孝阅读 490评论 0 0
  • 1. HTTP报文首部 HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和...
    笙绳省盛阅读 1,811评论 0 5
  • 4天读完 一、了解web及网络基础 1.1 三项www构建技术: HTML:超文本标记语言 HTTP:文本传输协议...
    15d843cd48a8阅读 788评论 1 4
  • 你的同事和朋友或许会劝你找个漂亮的姑娘,实际上那是因为他们的年纪还不够大,还没有完全体验到美貌的成本。假如你25岁...
    了不起的王艺璇阅读 325评论 0 0