没有回忆就去创造回忆,没有道路就去开辟道路。 收藏本站
登陆 / 注册 搜索

阅读: 7.6K   回复: 5

[# 系统基础] 计算机扫盲贴|第十章_万维网

小执念 古黑浩劫论坛大牛 2017-2-1 20:42 |显示全部楼层

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

管理员
        互联网最外在的一面就是万维网(World Wide Web),也就是我们常说的“上网”的“网”(简称Web)。虽然平常我们不怎么区分互联网和万维网,但两者其实并不相同。undefined
% O0 L6 P* n$ E' T8 N
# i0 s- j6 H6 o3 @! [: C: a        万维网连接着提供信息和请求信息的计算机(提供信息的叫服务器,请求信息的叫客户端,比如我们的个人计算机),它通过互联网建立连接和传送信息,并为互联网支持的其他服务提供人机界面。
7 }8 W# ~- [9 D, M. f9 W( Z9 k/ b" f: h
计算机扫盲贴|第十章_万维网 2016-08-23-image-11.jpg
        & O( H$ a7 o) l
        像许多伟大的理念一样,万维网在本质上是简单的。除了无处不在、高效、开放的底层网络必不可少外,万维网主要有以下四个组成要素。
$ n) f3 L! p- b        . U4 m/ }7 |( F6 p9 e
        首先是【URL】(Uniform Resource Locator,统一资源定位符),形如www.guhei.net ,用于指定要访问信息的名字以及信息所在位置。! Y) b6 X: G4 T' C( q$ t6 c% N
        ( j9 B" g$ c% M0 K# h1 \3 S
        其次是【HTTP】(Hyper Text Transfer Protocol,超文本传输协议),上一章(计算机扫盲贴|第九章_互联网 )刚刚介绍过这个高层协议。HTTP的功能很简单,它让客户端能够请求某个URL,同时让服务器能够返回客户端想要的信息。
9 u" @+ e/ X) W2 y        + c9 I+ p' K( L6 u+ x: m% ~
        然后是【HTML】(Hyper Text Markup Language,超文本标记语言),描述服务器返回信息的格式(或表现形式)。HTML同样很简单,不需要什么背景知识就能掌握其基本用法。
8 F; [* N3 o7 E( ]! L4 l/ h0 a. `
        最后是【浏览器】,即运行在客户端计算机上的Firefox、Chrome等程序,它通过URL和HTTP向服务器发送请求,然后读取并显示服务器返回的HTML。, w+ X: Y6 ]- j8 Y
        9 y0 f3 C6 ~) U* @  x/ f. D( ^
        万维网的诞生可以追溯到1989年。当时,在日内瓦附近的欧洲核子研究中心(CERN)工作的英国物理学家蒂姆·伯纳斯-李(TimBemers-Lee),为便于通过互联网共享科学文献和研究结果而设计了一套系统,包括URL、HTTP和HTML,以及一个只能用文本模式查看可用资源的客户端。/ _$ H3 R% o! r8 E* d
        % E% m: `- b+ g2 t+ t+ u: r
        世界上第一个图形界面的浏览器Mosaic,是由伊利诺伊大学的一群学生开发的。Mosaic的首个版本发布于1993年2月,很快就大获成功。undefined
: Y' W/ i7 r# A6 S. m+ H* U+ J: C$ V% r3 `9 _- X' s9 n; _1 C7 n+ p: x: T
        次年,第一个商业浏览器Netscape Navigator面世。Netscape Navigator是早期的成功者,而那时微软对互联网的蓬勃发展毫无意识。但不久,这个软件巨头还是觉醒了,随后很快推出竞争产品Internet Explorer(IE)。IE后来居上,成为最常用的浏览器,市场份额遥遥领先。
$ m7 C% L# [, N
1 B* N* N, r( B) n        微软在多个领域的市场统治地位引发了反垄断关注,公司也因此遭到了美国司法部的起诉,其中包括对IE的指控。据称微软利用其在操作系统领域的统治地位,将竞争对手Netscape排挤出了浏览器市场,详细内容第5章介绍过。
" h% O% V& Z  w* h% k& ~5 v* T, b! L. G, v% n# q6 v$ J* r+ J0 U
        近年来,随着Firefox、Safari和Chrome等强有力竞争者的出现,IE在浏览器领域的主导地位已经被大大削弱。
4 [0 V. u9 [  z) \- L1 ]        
8 O. ~! D: D- v9 D: v5 {        Web技术的发展,由万维网联盟(World Wide Web Consortium,简称W3C,其网站为w3.org)这个非营利机构控制着(至少是引导着)。W3C创始人和现任主席伯纳斯-李没想过靠自己的发明赚钱,而是慷慨地提出让所有人免费使用万维网,反倒是很多投身其中的人都托他的福,成了腰缠万贯的大富翁。undefined# m( @/ g0 \) H  C+ y6 K) q
        
10.1 万 维 网 如 何 工 作
6 _) p% ^/ k' e( r
        接下来让我们从URL和HTTP开始,认真看看万维网背后的技术要件。
- x) J4 y2 u& _  V) m* B8 r  ]        
3 v- M5 I' ?* B: M        假设你打开常用的浏览器,正在看一个简单的网页,页面中有些文字可能是蓝色的并带着下划线。用鼠标点击这些文字,当前页面就会换成蓝色文字指向的新页面。类似这样相互链接的页面就叫超文本(意思是“不光是文本”)。超文本实际上是个老概念,但浏览器把它推到每个人面前。5 D9 x+ P6 `4 s
        0 p& c  V, Q/ r2 A/ `5 T
        假设某个链接的内容是“W3C主页”,把鼠标移到该链接上,浏览器窗口底部的状态栏就会显示链接指向的URL,如http://w3.org ,域名之后也许还有其他信息。
! ^5 R7 B1 S6 I! X& v8 o* Z        3 J. M$ y0 z+ b7 r9 y
        点击链接,浏览器就会打开一个到w3.org域的80端口的TCP/IP连接,然后发送HTTP请求,获取URL中域名后面部分表示的信息。例如,如果链接是
0 l" B+ I! V. A  n' q  |  i/ O1 r0 f- ]0 F) }
        http://w3.org/index.html ,那么请求的就是w3.org服务器上的index.html文件。
: f. H7 s. T" K  P          w! M7 P. v. Q1 Y/ z
        收到请求后,w3.org服务器首先判断接下来该怎么做。如果客户端请求获取的是服务器上的文件,服务器就将该文件发送回去,由客户端(也就是浏览器)显示出来。服务器返回的文本绝大多数都是HTML格式的,其中包含实际内容和如何显示这些内容的格式信息。5 C2 Q' Z  K" v
        
: w! f! \' x% E; h. Q        以上只是最简单的描述,实际情况往往更复杂一些。HTTP协议规定,浏览器可以在客户端请求中增加若干附加信息。服务器返回的结果中通常也会包括指明数据长度和类型的额外信息。5 W0 x1 X7 `; w: w  j* w3 q
        & s9 P4 O' M' a% V+ c/ V5 n
        URL自身会对信息进行编码。URL开头的“http”是协议名,最常见的是HTTP,占了很大比例。如果留意的话,偶尔也会看到其他协议开头的URL,比如“file”表示信息来自本机(而不是网上)、“ftp”表示使用FTP协议传输文件、“https”表示采用经过加密的安全HTTP协议(本章稍后介绍该协议)。
# |. z- g/ ?8 L2 L1 S2 F2 f        0 S3 ?1 \) X, d4 F. Q5 W% C5 P
        接下来,“://”后面是域名,即服务器的名字。域名后面可以跟着斜线(/)和任何一串字符。这些字符串会原样传递给服务器,由服务器决定如何处置。最简单的情况是域名后什么都没有,连斜线也没有。在这种情况下,服务器将返回默认页面,比如index.html。如果域名后有文件名,就返回其对应文件的内容。
; ]4 j& o- u" i; |/ ]) G9 D# ?
% e+ i" t  k, Y) R9 e( U        文件名之后如果有问号,一般表示问号前面的部分是程序,服务器会运行该程序并把问号后面部分作为参数传入。这就是服务器处理网页表单信息的一种方式。下面可以用Bing搜索来验证,比如在浏览器的地址栏里输人下面的URL:
. }8 B1 _/ U9 w' q3 |+ a9 n
% Q4 n1 o4 D$ N5 K# O- Y$ g- B        http://www.bing.com/search?q=funny+cat+pictures3 d8 n3 F2 T0 O# v$ r8 B
        , M0 \. M) v% v' g( h2 g/ ]
        URL中的字符必须在某个字符集中,这个字符集里不包含空格和除字母、数字之外的大多数字符。当需要用到字符集之外的字符时,就要先对这些字符进行编码。, v4 @( \: q5 d' @" F* M$ ~6 s' q# R" O
* I; d( E4 D  [+ x* z
        例如,用加号来表示空格、用前面冠以百分号(%)的十六进制代码表示其他字符。例如下面的URL片段; ^, `9 O+ S# w& P
        
, B3 u5 c& q3 }8 l' z% w. {) U        8%22%20to%202%276 t" H# a5 k. c% b3 |6 d
        
; k7 [  @) ~$ `* P7 Q        表示
4 j/ C' P2 j5 H, u) \        2 F/ J, I9 h! s4 E7 I) s3 J
        8" to 2'
7 f+ I! s- H6 P! c/ c' ]2 Z# U        
4 y6 ~6 O2 u3 A2 E. s1 q        因为十六进制22表示双引号,27表示单引号,20表示空格。% c9 |% l0 M6 B+ n
        
* O5 C# l+ H3 A% Y5 Y* E' c        2009年末,ICANN批准使用以Unicode编码的“国际域名”。迄今为止,国际域名还仅限于顶级域,而且只为少数几个国家提供。以埃及为例,该国除了使用传统的.eg之外,也可以用阿拉伯文域名6 e9 R9 s4 c9 p) r* d

( S  e& M; h% C* m* ^: s, p! ?$ [% x
计算机扫盲贴|第十章_万维网 QQ截图20170201165136.png
        
* c0 `% w8 q3 d        显然,这在拉丁字母不通行的地方很有吸引力。: S' e& p# m/ x" D$ G
        
10.2 HTML
        # _5 a; v, b' X
        服务器返回的绝大多数文本都是HTML格式的,其中包含了文本内容和格式信息。HTML其实相当简单,只要用你常用的文本编辑器就能编写HTML网页。(如果你用的是Word这样的字处理软件,切记用.txt纯文本格式保存网页而不要用默认格式。)
! C. u8 g$ u! A1 q& v) k. p# Q9 Y
, `  t0 `( j5 q        HTML文件用标签来表示格式信息,标签不仅可以内嵌文件内容,通常还可以标示页面区域的起始和结束位置。一个简单网页的HTML代码如下:1 x, D9 m" S9 b( n, R+ w3 W
        
) R8 V, N! d" T* Y
计算机扫盲贴|第十章_万维网 QQ截图20170201200838.png

- \  w0 l9 w& ?0 \! ^- p0 w2 S        这个网页在浏览器里看起来是这样的:
4 g+ E/ T) W4 c; U1 C2 f2 Q  n! m: r( @  [/ T& B; k- F& ?
计算机扫盲贴|第十章_万维网 QQ截图20170201200819.png .
$ e6 q* T0 B/ l+ m6 p2 i# F- w
        如果图像标签<img>里的文件无法访问,浏览器可能会在那个位置显示出一张“破损”的替代图片。( t9 R( w, R, i3 P* e3 \( p  F
        & j' L& n, E, [& s8 W3 R
        在HTML中,有些标签是自包含的,比如<img>;有些则有始有终,比如<body>和</body>;还有些标签,如<p>,虽然严格定义里要求有闭合标签</p>,但在实际中并不需要</p>。缩进和换行并非必需,但加上了会让HTML代码更易读。3 B/ P8 y. o4 O( V6 ?! i' O+ I* T
        
( ]  R+ e3 M3 }        本节讨论的这一点HTML恰好够用来揭开网页制作的神秘面纱。基本网页制作技术就是这么简单,只要再花几分钟时间学习,就能做出比上面例子更像样的页面。' p5 a, @; t& x, Y0 Y6 q

0 b' d$ N8 f( {6 [$ |        如果要制作你在商业站点看到的那些精美页面,就要掌握相当多的技能了。但只要学会十来个标签,应该就能胜任大部分纯文字页面,再学十来个,就能做出让一般用户侧目的东西来了。
3 S$ K# G  Y  N9 ^' N7 s1 N
2 w- ^& T' W* j( k0 Y) z0 p        手工创建页面很简单,文字处理程序也有“创建HTML”的选项。还有很多用来制作专业网页的软件,但只有在你真想学做网页设计的时候才需要。不过,最重要的还是理解网页背后的工作原理。undefined
, A) ^& ?. z9 o! ]1 K) w( c, ?5 d        7 I6 c5 z' w0 w3 v9 z2 x
10.3 表 单

0 j$ d- m7 z2 W  g) s        HTML最初只能返回纯文本供浏览器显示。但没过多久,浏览器就得到改进,可以显示图像了,包括简单的LOGO、GIF格式的笑脸和JPEG格式的照片。
3 k; o/ q) L- y- i7 @9 O! `6 z
        此外,用户还可以在浏览器显示的网页里填写表单、按下按钮、弹出新窗口或用新窗口替换当前窗口。随后,当网络带宽足以支撑快速下载、主机性能可以快速处理图像显示时,声音、动画和电影马上又涌人了网页。
: E4 d" e; V& m* i; u& @1 _        & q: P4 o  ^) |. D! N9 |1 i6 U  f
        HTTP协议里有一个从客户端(你的浏览器)向服务器传递信息的机制,叫通用网关接口(Common Gateway Interface,CGI)。只看这个名字,很难想象它能用来传递用户名和密码、查询条件、单选按钮和下拉菜单选项。
, m2 o5 a- @' S( n  h
' }( b( A) o! k        CGI机制在HTML里用<form>...</form>标签来控制。你可以在<form>标签里放人文本输人区、按钮等常见界面元素。如果再加上一个“提交”按钮,按下去就会把表单里的数据发送到服务器,服务器用这些数据作为输人,来运行指定的程序。
. H* x5 S& I6 k8 h9 w! k        , M  ]5 m1 }0 C2 `- s1 ~+ K2 t* Z
        下面是一个简单的例子:+ k4 S' \* u9 k; o3 T* t
  ~6 N2 P, I7 x& b
计算机扫盲贴|第十章_万维网 QQ截图20170201201032.png
) @& Y# |% {. S9 r
        将上述代码放进网页,就会在浏览器中看到:
( {6 [- J) z' P( M/ V  P. E
7 ^/ m5 x$ q, U% \
计算机扫盲贴|第十章_万维网 QQ截图20170201171757.png

- C; Y  l+ k( U! `4 k  y        在网页上输人名字后按下提交按钮,浏览器就把输人的名字(即username字段的内容)发送到服务器,服务器以它作为输人,运行echoname程序。echoname程序的功能只有一个,就是返回一个嵌有输人名字的页面:3 j8 {0 B- N3 b: M- J* h
        
, F/ \+ z, K5 b# Y* N0 s4 ?
计算机扫盲贴|第十章_万维网 未标题-2.png
        6 N% h9 N8 i( F0 V7 U% J
        表单有很多局限,比如:只支持按钮、下拉菜单等少数界面元素;除了编写JavaScript代码或把表单数据发送给服务器进行处理外,没办法验证表单数据的正确性;没有对密码输人字段进行任何安全性保护,密码完全以明文的形式发送和存储在日志中。尽管如此,表单仍然是万维网的重要组成部分。undefined
& m8 r! z# ~+ H+ ^& ?5 @- ?        ( T2 s; q, g7 g
10.4 cookie
3 u& @- u: p* G5 B! C( w, M8 \
        HTTP协议是“无状态”的。“无状态”的意思是,HTTP服务器不必记住不同客户端发送的请求信息,只要向客户端返回了请求的页面,它就可丢弃有关这次数据交换的全部记录。6 }* d: q3 N' r; w: c" Y
        : h  [7 z7 x8 I) v8 q
        于是,问题就来了:有时候服务器确实需要记住某些东西,如用户已经输人的名字和密码,这样后续的每一次交互就不必让用户反复输人了。怎样才能让HTTP记住这些东西呢?4 d4 Q% k2 N* o* l4 S
4 d" R3 E# ~* C# W! {
        难点在于,客户端第一次和第二次访问服务器的时间可能间隔几小时、几星期,也可能访问一次以后再也不会访问,服务器要把信息保留多长时间呢?似乎只能靠瞎猜。
, ~4 i$ D7 h* g$ O7 v        8 d9 q, p% Z, o+ O5 M* F
        1994年,Netscape公司发明了一种叫cookie的解决方案。cookie是在程序之间传递的一小段信息,这个名字虽有卖萌之嫌,但已经为广大程序员接受。undefined: y5 Z$ o" c% e/ _! U( m
8 S' x0 \! m9 n0 }! _! g
        向浏览器发送页面时,服务器可以附加若干个浏览器可存储的文本块,每个文本块就是一个cookie,最大为4000字节左右。当浏览器再次访问同一个服务器时,再把cookie发送回服务器。
/ x% h8 E* Q/ z: M4 U; o7 b$ S' u1 _6 V7 t) w
        没错,服务器就是这样利用客户端的内存来记住之前哪个浏览器曾访问过它的。服务器通常为每个客户端分配一个唯一的识别码,包含在cookie里;而和这个识别码相关联的永久信息如登录状态、购物车内容、用户喜好等,则由服务器上的数据库来维护。每当用户再次访问这个网站时,服务器就用cookie识别出用户原来之前来过,为其建立或恢复信息。
: X6 L- a" R4 E/ [+ x: d. d        / L0 X2 q* ~, I& G* p
        我通常会禁用cookie,因此当我访问亚马逊时,起始页面跟我打招呼时通常只说“你好”。但如果我为了用购物车添加商品而启用cookie,之后我再访问时它就会说“你好,布莱恩”。有人觉得这种表面上人性化的招呼很讨喜,但对我而言,这种做法时时提醒我完事后要删除cookie并重新将其禁用,以限制网站对我的跟踪。" L5 X) p" [# o# s
        9 r0 g6 O( z/ \3 _- c
        每个cookie都有名字,一台服务器可以为一次访问存储多个cookie。cookie有失效时间,过期了就会被浏览器删除。浏览器只能将cookie发送给当初返回它的域,但是否接受或返回cookie并没有强制规定。
; P: q6 b# W) B: G
! I* P; g9 ^  N) i; x. n        需要指出的是,cookie只是一串存储在浏览器中供以后返回服务器的字符,它是完全被动的,不会被返回给来源服务器之外的其他域。cookie不是程序,也不包含动态内容。
- p" d4 l1 ~) W! X4 l        
: S1 Z( h1 W* s" b/ H        在你的计算机上可以很容易看到cookie,浏览器会告诉你它管理的所有cookie,你通常也能在文件系统里找到它们。例如,当我访问《纽约时报》网站时,即使没有登录,我的浏览器也会保存15个cookie,其中有个叫WT_FPC的cookie包含了如下能看出含义的信息:* w, k9 M! [- X* w2 I! g, Q' O
        
* C& v: _+ H- m; Z  }' s        id=140.247.62.34-237799664.30112241:lv=1288631855059:ss=1288631855059
$ M+ B4 X$ F6 x  J2 Z" a! @- X        ! e4 h' R* i4 r7 W! `) G" m
        这里id的值像是ip地址和标识号,另外两个值怎么看都像是时间,也许是最近一次访问的时间和会话开始的时间吧。, t0 V* B- n2 o, k2 B
        . i% p! f2 ^: ~9 A
        理论上,cookie的功能都是挺善意的,创造这一技术的本意也确实如此。但总会有些有违初衷的坏事发生,cookie也被用到了人们不太喜欢的用途上。最常见的就是在用户浏览时跟踪其行为,生成用户访问网站的记录,然后令人生厌地向用户投放定向广告。在下一章,我们将详细讨论这种行为的工作原理以及跟踪用户上网过程的其他技术。undefined
& q% O/ _/ U5 I7 A1 ]        2 y* Z& q( i. _" @* k  w0 B; {
10.5 动 态 网 页
8 q4 D7 S1 M" [$ w
        最初设计万维网的时候并没有考虑在客户端运行程序。第一个浏览器可以帮助用户生成请求、发送表单里的信息,并能在辅助程序的帮助下显示图片、声音等需要特殊处理的内容。
8 e$ W" j/ e; S# u# N0 h* i, f8 D: T' l$ k( o' v
        不久之后,浏览器就能运行从网上下载的、有时被称为动态内容的代码了。至于如何执行,要取决于代码本身,跟浏览器也有关系,但基本思路就是把用某种语言写的代码下载到客户端计算机来运行。不难看出,这会带来某些影响,有些是有益的,也有些显然不是。
/ S. E$ V: P3 x) L        
- R- }$ q. G% j9 v* e& j% j        在第6章(计算机扫盲贴|第六章_操作系统 )我们讲过,浏览器就像一个专用操作系统,可以通过扩展功能来处理纷繁复杂的内容,以此“增强你的浏览体验”。# v! t2 V3 u- e+ h: X/ S
0 T" P* A* t' d2 M- M
        但是,为达成上述目的,需要你的浏览器运行别人写的程序,而你对这些程序的“品行”却一无所知。% Z. a5 X0 X4 R" n/ x- u
        * }( x) d/ ?4 L: T( r( G' U
        在浏览器里运行程序的好处是可以增强浏览器的功能,而且当计算在本地完成时,交互会快很多。不利的一面在于,在你的计算机上运行未知来源的代码真的存在风险。显然,“我的身家性命全靠陌生人的良心”并不是靠谱的安全策略。
9 z# U+ {4 |# |* \% I1 C* L
6 F* }' u! d* n' i" p        微软有篇文章叫“关于安全的10个不变法则”(Ten Immutable LawsOf Security),第一条说的就是:如果有坏蛋能说服你在自己的计算机上运行他的程序,那你的计算机就不是你的了。undefined
% c) z6 I+ }: i. {1 |        
# s3 o* `+ z- T! k1 l% g/ d4 N        Netscape Navigator的早期版本可以运行Java程序。那时候Java还是相对较新的语言,被设计成能轻松安装到计算能力不是很强的环境中(比如家电),所以在浏览器里包含Java解释器在技术上并没什么困难。; u% k9 c' X7 |1 |

8 p8 g! F* [7 z        这使得在浏览器里进行重大计算工作的前途一片光明:浏览器可能代替文字处理和电子表格这样的传统程序,甚至操作系统本身也可以被浏览器替代。这种前景让微软坐立不安,于是接连出手排挤Java的扩张。为此,Java的创始者太阳微系统公司(Sun Microsystems)与微软多次对簿公堂。, r4 j9 U4 A6 Q1 Z+ }/ h3 ]
        
+ A" ]0 ]/ V8 `        由于各种原因,Java最终没有成为扩展浏览器的主要途径。Java本身是一门功能丰富的语言,但与浏览器集成时受限较多,因此现在已经很少将Java用于扩展浏览器了。
0 M( e: h, q0 `8 ^/ L: }        # n) {* \1 d: g
        1995年,Netscape还推出了一种专用于其浏览器的新语言JavaScript。别看名字里有Java,其实JavaScript跟Java没有任何关系,唯一能扯上关系的是两者写出来的程序都长得像C语言。4 x9 V0 _6 j7 b6 P+ }6 `

7 p0 Z  X# O- p. {* I        【选择这个名字只是出于市场宣传的目的。(事实上,JavaScript的语言特性主要来自Self和Scheme语言,只是使用了类似C语言风格的记法。JavaScript—开始也不叫这名字,而是叫LiveScript,后来因Netscape和Sun合作,才把名字改为JavaScript以便市场推广。)】+ I# z! N/ n  l2 }( C( F

, k% ^5 ]+ C, ]0 \9 P9 e        Java和JavaScript的实现都使用了虚拟机,但两者的技术差别很明显。Java源代码在其创建之处编译,生成的目标代码发送到浏览器解释运行,因此你看不到初始的Java源代码是什么样子的;而JavaScript发送到浏览器的就是源代码,整个编译过程都在浏览器里进行,从而使接收到JavaScript程序的人能看到要执行的代码。( {% a! q' L5 ]+ V4 H

5 S: n8 v/ P6 R' ~        由于接收到JavaScript源代码的人不但可以运行它,而且也能研究和改写它,因此,没有办法保护JavaScript源代码。
. u+ n1 r4 b; G0 C+ X! \        , {" p$ S- c* d' J8 d
        如今的大多数网页都包含一些JavaScript代码,用来展示图形特效、验证表单信息、弹出有用的和讨厌的窗口等等。尽管一方面弹窗拦截器减轻了JavaScript弹出广告给人们带来的烦恼,以致连浏览器现在都集成了拦截功能,但另一方面,用JavaScript进行的复杂跟踪和监控活动也增长迅猛。* p. G! D2 E1 P; ~4 ?/ }: k

4 W- o" N; G) n9 p, H. m) j        虽然像NoScript和Ghostery这样的浏览器附加程序可以控制JavaScript代码的可运行功能,但由于JavaScript用得太广,如果不允许或限制浏览器运行JavaScript,我们上网时就会困难重重。尽管有段时间我很担心JavaScript的负面影响,尤其担心网站会用它来跟踪我上网浏览的行为(下一章将会谈到如何跟踪),但权衡下来,我觉得JavaScript还是利大于弊。
( y+ L1 {7 U2 F/ Q( B# q" X$ l( \1 b# O3 c$ ?' L
        我隔三差五地彻底停用JavaScript,然后又因为我关注的很多站点用到了这玩意而重新启用。undefined
; D/ h* V( F. T% `. p        0 v  s' D0 A' }" T: O" B) m
        借助浏览器自己的代码或Apple QuickTime、Adobe Flash这样的插件,浏览器也可以处理其他语言和内容。插件是按照需求动态加载到浏览器的程序,一般由第三方开发。
6 f$ s% ]/ x# S; k8 m" M! ~/ b* b2 l
        如果你访问的页面里有浏览器自己不能处理的内容,浏览器会提示你“获取插件”。意思就是要你下载一个新程序,在你的计算机里配合浏览器一起运行。插件能做什么呢?理论上它可以为所欲为。所以你不得不信任插件的发行者,否则就没法显示那些内容。
8 n7 y" I/ S( T5 l( b1 M4 d# Z1 _' U, L        $ o2 S+ r5 d' M' R
        插件是编译好的代码,通过调用浏览器提供的API,作为浏览器的一部分运行。常用的插件包括遍地都是的Flash动画播放器和微软的Silverlight等,后者是取代Flash处理视频和其他服务的另一种选择。
! R; T8 `1 W( S; v
* ~  R( k; b7 B+ S; ?        对于插件,如果我们长话短说,那就是:如果你信任插件的来源,那在使用它的时候,就跟使用其他有瑕疵和会监控你行为的代码没什么两样。; J; p/ w& P  Z4 @, {0 G

6 B- D5 y7 t1 M        HTML的新版本HTML5为浏览器带来了新功能,可以减少对插件的依赖,尤其是在视频和图形方面。但在很长一段时间内,插件还会继续扮演重要角色。
* w1 m" C0 l/ h0 U% y
; V7 V8 s. K) X, j( R        可控性最差或者说最不可控的浏览器扩展技术是微软的ActiveX,这种技术能让Internet Explorer加载代码并运行。ActiveX像是搅起了江湖血雨腥风的武林秘籍:代码本身不受限制,可以运行任何Windows功能,所以实际上能完全控制你的计算机。/ X! H" g- p. c4 i7 K% a# I" F
' C; n$ c- z2 E$ b/ A
        显然,这是一把双刃剑:用ActiveX组件可以实现任何功能,但出错的风险也大大增加——如果代码来自一个坏蛋,造成真正损害的可能性就更大了。由于你没办法知道ActiveX组件到底会做什么,于是只好无奈地信任它的发行者。$ z2 S; i, D: d$ i  @
          m$ m+ R+ L% u* n
        为此,微软搞出了一种叫Authenticode的数字签名机制,想用这种办法来确保代码至少是来自它所声称的发行者而不是别人假冒的。在InternetExplorer的安全模式里,也确实有只允许下载和运行已签名的ActiveX代码的选项。当然,这种方法还是不能保证代码只执行正确操作,甚至也不能保证代码来源友善,但总比摸黑运行未知来源的代码要好一些。: X: [% G3 T3 D: h9 {/ n
        , `' n- b6 y0 j* X$ d
10.6 网 页 之 外 的 动 态 内 容
6 O$ N% R% l' |3 u$ {5 w+ x1 @; I3 [& ]
        除了网页,动态内容也可出现在万维网的其他地方。随着万维网服务的增长(下一章将会提到),这些动态内容中潜在的问题也愈发严重。试想一下电子邮件吧。邮件到达的时候,会显示在邮件阅读程序里。显然,邮件阅读器一定要显示文本内容,而值得关注的是,如果邮件包含了其他内容,应该解析到什么程度为好,因为这是关系到用户隐私和安全的大事。- R7 G+ j0 q4 _
        
+ W/ }8 t) j  `: q        邮件正文里有HTML会怎样?虽然邮件里出现大号红头文字会让收信人不悦,但显示这样的邮件其实并无危害。邮件阅读器应该自动显示图像吗?这样便于收件人查看照片,但也为更多的cookie打开了方便之门。1 m) n$ r, b$ Y" E  @
/ t/ n( G) Y) I, D9 S- q
        我们可以通过立法来禁止这些行为,但又能用什么办法来阻止发件人在邮件里嵌人1x1的透明像素并在其URL里编人收件人的某些信息呢(这些看不到的图像有时称为网页信标,web beacons)?支持HTML的邮件阅读器会按URL请求这些图像,从而使存放图像的网站得知你在某个时候读了这封邮件。通过跟踪你阅读邮件的时间,有可能获得你本想保密的信息。
4 l0 M& |: X1 f$ V6 K% Q& ?; q        
7 f4 u( j/ u: A+ H        如果邮件阅读器能处理HTML,那它也要解析JavaScript吗?最近我试用了一个新推出的基于网页的邮件阅读器。令人惊讶的是,它不但解析了邮件里的JavaScript,甚至按其默认设置在不提示我的情况下,就自作主张地执行了这些代码。
, G9 J. |# N! J* I  D/ ?3 {; ^: b4 r5 |        
& z+ V% i4 q) F9 L4 g        如果邮件里包含Word、Excel、PowerPoint、PDF文档或Flash电影,又会发生什么呢?undefined
$ ]3 a  n. n; \. |' F: r        
2 I5 a" p5 i# `6 S8 Q        邮件阅读器应该自动运行这些程序吗?还是退而求其次,但为了方便你使用,仍然允许在邮件某个位置点一下就运行呢?再多想一步,应该让你直接点击邮件里的链接吗?要知道,这可是引诱你上当的好把戏。
5 U, B' C; M- K3 ?* G$ j8 }, S7 h
0 k( P# `+ Q, [2 c3 }8 S$ T        此外,PDF文档也可以包含JavaScript(第一次听说时,我也吃了一惊),如果邮件阅读器自动调用PDF阅读器,那后者又是否应该自动执行PDF文件里的JavaScript代码呢?
8 X+ i/ C5 _6 M6 f        ! f; }, W/ Z3 @  W) Y
        在邮件里附加文档、电子表格、幻灯片是非常便利的,这也是商业社会的标准做法。但考虑到这些文档可能携带病毒,我们马上会看到,不分青红皂白地打开附件的做法会助长病毒的蔓延。& x& ?* a4 v0 t& x
, q7 @6 k9 M' ^& P( l
        还有更糟糕的状况——邮件里包含可执行文件,比如Windows的.exe文件之类的。点击这样的附件就会启动这些程序,极有可能在运行后给你或你的系统带来危害。网上的坏蛋们会用各种伎俩骗你运行这些程序。2 p0 w$ F' z9 {

5 l# o5 f" y1 p! S        我曾经收到一封邮件,声称里头有俄罗斯网球运动员安娜·库尔尼科娃的照片,鼓励我打开看看。该文件的名字是koumikova.jpg.vbs,但是扩展名.vbs隐藏了起来(Windows默认隐藏扩展名,这个设计害人不浅),收件人很难发现它并非照片而是VisualBasic程序。6 ]' I. }8 S: n, e0 U! E
! ~2 z) h( L0 l: E
        幸好我用的是Unix系统下的老古董邮件程序Pine,只支持文本模式,无法直接点击运行。于是我把“照片”另存为文件待稍后检查,这个程序也就此露出了马脚。undefined! O2 w$ a; t* w+ D7 C3 B
        
1 K+ H. e; {" W9 }, N
10.7 病 毒 和 蠕 虫
% s1 |& d9 [5 m0 {4 }
        上一节提到的安娜·库尔尼科娃“照片”实际上是个病毒。下面我们就谈谈病毒和蠕虫。这两个词都指在系统间传播的、通常是恶意的代码。两者在技术上有个细微的差别:病毒的传播需要人工介入,也就是只有你的操作才能催生它的传播;而蠕虫的传播却不需要你的援手。
1 k8 t8 Q6 }7 |: Q/ l6 q4 y        * b( ]; N' j* x) U/ O6 `2 I
        虽然出现这种程序的可能性早就为人所知,但第一个在晚间新闻节目中亮相的则是罗伯特·莫里斯(RobertT.Morris)写的“互联网蠕虫”。该程序在1988年11月被放到网络上,而那个年代还不是现代意义上的互联网时代。6 x4 V/ _) y' r5 Q# x( r$ k
/ I: v, Z5 j: T) n. {
        莫里斯的蠕虫用两种方法把自己从一个系统复制到另一个系统:一是利用常用程序的缺陷,二是用字典攻击(即用常见词来猜测别人可能使用的密码)自动登录系统。- a: d4 `, O9 U3 v9 U( U2 t
5 D  D# ~( C% U; Z% e
        莫里斯此举并无恶意,他当时只是康奈尔大学的一名研究生,想设计一个程序来测量互联网的规模,但一个编程错误让蠕虫的传播速度超过了他的预期,结果很多机器遭遇多次感染,无法处理暴增的流量,只好从互联网断开。当时,莫里斯被指控违犯了制订不久的《计算机欺诈与滥用法案》,被处罚金上万美元并参加400小时的社区服务。
7 n% e, U8 Z9 ^# E
. L- F4 u: S" J1 d        【蠕虫中有一段代码用来检测计算机是否受到感染,如果没有才继续运行并传播之。但这样很容易通过伪造传染检测标志来免疫,于是莫里斯修改了代码,使得即便已感染仍有1/7的概率进行传播,由于扩散趋势是指数级的,这种传播概率还是太高。】3 k# N. v9 @- G/ F) z4 K7 B
        
/ a: `% ~3 \3 A- m( H        在互联网广泛使用之前,软盘是在PC之间交换程序和数据的标准介质。病毒因此通过受感染的软盘,肆虐传播了多年。当计算机加载受感染的软盘时,隐藏在其中的病毒自动运行,把自己复制到本地计算机,并进一步感染后续插人的新软盘。
7 c$ z# o" J% b. h) y) _' B        8 U1 v5 G5 c( F' O3 u9 C/ z  s: J
        随着微软在Office程序尤其是Word中包含Visual Basic,病毒的传播更加容易了。由于Word中内建VB解释器(至今仍在),Word(.doc、.docx文件)、Excel和Power Point文档中可以包含VB程序,因此写个程序在文档打开时获取控制易如反掌。# ]6 D4 _$ B- x4 d# X0 I  v
6 r- Q3 ?" a: n+ V- \
        而且,由于VB能访问Windows操作系统的全部功能,这类程序可以在操作系统中恣意妄为,做任何事。一般来说,病毒会首先安装在本机上,然后想方设法传播到别的系统上。
$ N0 K% B  Z; ]1 x  T  f1 D5 v% w$ ]- G) n9 Q6 F2 c
        一种常见的病毒传播模式是:病毒把自己附在一封写着无害或诱惑言辞的电子邮件里,寄给被攻击邮件地址簿里的每个人。安娜·库尔尼科娃病毒就是这么做的。如果收件人打开附件里的文档,病毒就把自己装进新系统,进而传播开来。: ~% {6 x$ Z6 o
        
  B" p5 M2 z/ u& U        这样的VB病毒在1990年代中后期出现过很多。由于Word的默认策略是不经用户允许就自作主张地运行VB程序,这类病毒传播得非常快,致使很多大公司必须关掉所有计算机、逐台查杀才能消灭病毒。8 e  l5 f, Q8 u* s1 U2 i  z& L

6 ]# i0 Q# E' i3 ~# }0 k2 U1 o        VB病毒尽管现在还有,但只需改变Word和其他同类程序的默认行为就能严重削弱它们的破坏力。另外,现在的很多邮件系统收到新邮件时,会先剔除其中的VB程序和其他可执行内容,然后才把邮件送达收件人。
% m+ Z' d+ d4 F- P4 ^7 W, L        
) h1 h6 f: R# P        VB病毒很容易编写,以致写这些东西的人被称为“脚本小屁孩”。实际上,编写一个“作案”时不会被抓到的病毒或蠕虫是很难的。1 k  b: [; e! {9 A

7 N! y$ K# E/ K, ~9 o' Q" }        2010年底,在伊朗的一些过程控制计算机中发现了一个叫“震网”(Stuxnet,也称为“超级工厂”)的复杂蠕虫。它的主要攻击目标是伊朗的铀浓缩设备。“震网”用了一个很狡猾的攻击方法,即控制离心机的转速波动,看上去只会引起正常磨损,却会导致离心机损坏甚至报废;同时,对监控系统报告说运行正常,于是没人注意到离心机出现问题。至今,仍然没有人站出来承认对此负责。4 k* @8 o+ y; g% b: m( ]5 g
        
3 J8 v; C1 [' `* n0 C) B        特洛伊木马(在网络安全的语境中,通常简称木马)是伪装成有益或无害,但实际上有害的程序。4 ~* Q' e( f7 V  i
/ A, S9 G/ ]' q% Q
        因为看起来有一定用处,所以受害者会禁不住诱惑而下载、安装木马。常见的情况是,木马程序自称要对用户的系统进行安全分析,实则是安装恶意软件。" D3 C9 ?  S% Q- }6 z

0 O, o" X# W' p        前面提到过,软盘曾是病毒的传播介质。随着存储设备的更新,现在这一角色开始由USB闪存驱动器接替。也许有人认为闪存驱动器只有存储功能,是个被动设备,很难传播病毒。
* ^+ \( C1 X5 G' H$ E" J2 k7 {, W1 P$ T  C
        然而,以Windows为代表的一些系统,都有个“自动运行”的功能:当插人CD、DVD或闪存驱动器时,系统会自动从盘上运行某个程序。恶意程序会在没有警告的情况下自动安装,造成令人措手不及的破坏。
- V  C: V- \1 T% i+ l6 x
* l7 B6 m$ q/ A2 x        即便大多数公司规定严格的安全策略,限制在公司计算机插人USB驱动器,但还是有相当多的系统通过这种方式遭受感染。个别情况下,甚至新买的驱动器里都会带有病毒。
& @+ ]; h9 H+ R( d        ' k; a+ _3 O; W& r
10.8 万 维 网 安 全
8 s- l9 n/ A& I- h$ d8 h
        万维网引发了很多安全难题。一般来说,可以把万维网遇到的安全威胁分成三类:对客户端(也就是使用浏览器的你)的攻击、对服务器(例如网上商店或者银行帐户)的攻击和对传输中信息的攻击(比如窃听无线网络)。我们将在本节依次讨论这三种情况,以弄清问题出在哪里、如何减轻危害。" B' d: _3 A! k! U  x( t# G) X
        6 R. x8 U& u" h& _+ G
10.8.1 对 客 户 端 的 攻 击

7 T& D( v$ ~( t6 K  f2 K        对你的攻击不仅包括垃圾邮件、跟踪等惹人讨厌的攻击,还包括泄露你的信用卡和银行账号等私密信息、假冒你花掉你的钱等更严重的攻击行为。  P' R+ |9 P& z. N) E
        * z. g5 L3 d3 l
        下一章我们会详细讨论cookie和其他跟踪机制如何监控你的上网行为、给你发送看似吸引人从而不是那么烦人的广告。实际上,通过禁用第三方cookie(也就是从别的网站而不是你正在访问的网站发送过来的cookie),就可以堵住大部分跟踪攻击。
" e6 ^& `4 s- m& m" b! K! q* s
8 i: p/ ^: _1 L) \9 U: h        如果再使用其他浏览器插件来禁止跟踪程序运行、关闭JavaScript、禁用Flash,采取这些防护手段就能把跟踪和广告的数量限制到可控的程度。也许有时你会嫌这些防护手段麻烦,因为这样披挂上阵会导致有的网站无法访问。遇到这种情况时,就要把防护的级别临时调低一些,但要记得访问完这些网站后再复原。
- \! q0 K' E5 _: v! Q3 {4 v, ]8 x! B        9 @8 @, l& W9 ]& j. P% d
        垃圾邮件是不请自来的邮件,其内容通常是发家致富秘籍、洗髓易筋偏方、职场蹿升宝典和很多没用的其他商品和服务。垃圾邮件业已泛滥成灾,严重影响了电子邮件的正常使用。0 S+ }% x2 @0 L$ r; B* b
! G0 U3 A+ F+ a5 f2 M4 ?2 k
        我自己通常每天收到50到100封垃圾邮件,远比真正的邮件多得多。据可信调查称,所有电子邮件中的90%是垃圾邮件。最近我看到一篇文章则说,万维网上每天发送的垃圾邮件多达2500亿封。  T9 A0 [, e- L

6 ]. c# A9 [" T7 ~  e$ F4 J# `* X        垃圾邮件之所以如此泛滥,主要原因在于发送成本极低(上面那篇文章里说,发送100万封垃圾邮件只要80美元成本)。就算几百万收件人里回复的只占个零头,也够那些发件人赚回来了。
" t4 T" a5 w% T5 m( X; i        2 e& f4 n8 S9 N7 C5 @4 ^1 s" y
        可以使用垃圾邮件过滤器对邮件进行分拣,去芜存菁。常用过滤方法有查找已知的垃圾邮件模式(比如“你想每天都收到eBay寄来的钱吗?”这样的邮件,一看就是群发给大量人群的格式邮件),发现不太可能出现的名字和离奇的拼写(比如\/1-\GR/-\),或者把经常发送垃圾邮件的地址列人黑名单,拒收它的邮件。
9 Q6 ^2 Z* U( O8 m  y9 y9 Z5 F% O$ K% \7 t3 R& ~5 \- Z" t
【\/1-\GR/-\ 是用象形字符拼写的一种药物名Viagra(Viagra在中国大陆正式译名“万艾可”,更广为人知的民间译名是“伟哥”),这么拼写是为防止关键词过滤。】" n7 Y) ^$ Q" ?0 Z5 f0 ~/ O; C3 e
: L2 Q! g2 b# C/ _
        只用一种办法来过滤是远远不够的,因此要打出组合拳。垃圾邮件过滤仿佛是军备竞赛,只要防守者道高一尺,学会防范某一类垃圾邮件,进攻者就会魔高一丈,发明出新的规避方法。
! r7 y: _6 g/ P9 x4 S$ X0 o        
4 s6 ~6 ]$ f& F2 ]! f! _        要想从源头制止垃圾邮件非常困难,因为垃圾邮件的源头通常都极其隐蔽。很多垃圾邮件是通过被人侵的个人计算机(通常运行Windows系统)发送出来的。4 z% M; X3 u" y* Q

9 {/ I, @1 A* y8 p: v3 C; u, ^( q        由于存在安全漏洞,再加上用户疏于管理,这些计算机很容易被装上恶意软件(malware)。有一种恶意软件会在收到上游控制指令时,群发垃圾邮件,而它的上游计算机也可能进一步受更上游控制。每多一步都会使发现垃圾邮件的源头更加困难。3 m6 N3 U5 H7 p, y: I1 U
) [; o. \& k: d1 s
        网络钓鱼(phishing)攻击者通过骗取收件人的信任,让他们主动奉上窃贼需要的信息。你十有八九收到过“尼日利亚骗局”式的诈骗邮件。真的会有人相信这些天方夜谭,给骗子回信吗?听起来不可思议,但确实一直有人上当。undefined( O* B! k; o6 p/ k$ z

7 a) i1 @8 h! Q2 h9 d        钓鱼攻击比这更狡猾,因为它们发来的邮件看起来就像来自正规金融机构甚至你的朋友们。试想,如果你收到一封道貌岸然的邮件(像是你熟知的公司发来的)让你核实自己的证件……如果你照着做了,坏蛋就会知道你的某些信息,以此来窃取你的钱财或者套取你的真实身份。" @1 O  Z3 y2 u" I
* i9 s, ]* n/ O- m" o
        几年前,这可是相当前卫的玩法。我曾收到这样的一封钓鱼信,行文措词很像那么回事儿,可是我的名字不叫比尔,我也没有花旗银行账号。
' _! d, h0 Y4 ?9 [& K
7 T* V9 B) C* V3 R& f4 u; }
计算机扫盲贴|第十章_万维网 未标题nxv1.png .
        
/ {5 K- t3 v6 r, v- L1 o6 r0 c& L        要编造一封看起来正规的邮件是很容易的,版式和图片都可以从真的网站上复制。使用无效的回信地址也很容易,因为邮件系统发件时并不检查发件人的真实性。那个链接下面的IP地址指向一个美国之外的网站,而我是在检查了HTML源代码后用traceroute才发现这一点的。* o9 ~8 h" O% V( p2 f( p
9 C6 `3 \9 [$ m) L; P+ Z- W
        和垃圾邮件一样,钓鱼也几乎不花任何成本,即便上钩的人少之又少,也足够骗子们赚个盆满钵溢了。
  U+ p, ^) e' @% |8 C  \        
" O. K& \5 k( L: Q' E: y, S        更新式的攻击则更难发现。2010年末,我收到了一位朋友发来的这封信,该信是群发给一个很小的私密邮件列表的:  |9 G7 M3 J& f" g# j2 h5 W. t
        4 m8 v2 ]% @4 j  r" z9 z
计算机扫盲贴|第十章_万维网 QQ截图20170201183032.png
. M' o1 ]) N! `* T7 x& z
        看上去真是像模像样啊。查理是个驴友,在外旅行是常态,我已经有好几个星期没见过他了。于是我满怀疑虑地打了那个电话,没人接,有点奇怪。然后我回了那封信,收到他的回复:" }, b# y- ~- l
        
( C( m/ `' s, I7 y2 T# _+ X
计算机扫盲贴|第十章_万维网 QQ截图20170201183133.png
        + X3 T) @" w( s$ r# y2 q
        我问他要了汇款指南,同时也问了个问题,只有查理本人才能答出来。他回给我西联的详细操作步骤,却没搭理我的那个问题。我顿时疑心大起,马上搜索了一下那个电话号码,发现是一起知名的骗局,已经连骗了好几个月。1 |2 W# V; N# B2 A

1 a3 M9 \  T( S7 F1 o, C1 ~+ C        骗子竟然连剧情和电话号码都懒得换。后来我得知,查理的Gmail帐号遭遇过人侵,攻击者把他的联系人名单作为下手目标,并了解到他的一些私人信息。undefined
: u) f3 ^% Z0 ^! q  I
5 S/ F8 i! w( @: k        因此,这种精确瞄准的攻击方式有时叫做鱼叉式网络钓鱼(spear phishing)。鱼叉式网络钓鱼是一种社会工程方法,即假装是受害人的私交密友,或者冒称同事,诱使受害人犯傻。+ z  a+ Y) ^- u2 q2 y

2 \$ k& W! F$ n# }5 w' }. r! A" L1 g        间谍软件(spyware)是指运行在你的计算机上、会把你的信息送到别处去的程序。有些间谍软件显然是恶意的,但有些只是为了商业目的而私自收集用户信息。. H& R% X: g$ _' X. M  c

/ e* x& n4 m7 K2 {        例如,我有几台笔记本预装了包探测器程序pinger,该程序开机自动运行,然后定期连接到厂家的服务器。至少在我某天发现并将之禁用之前,它一直在这么做。我相信如果质问厂家的话,他们一定会告诉我这个包探测器只是向他们报告我机子持续运行时的健康状态并检查软件更新。
+ l( E/ R: v& s) ^5 b2 d7 W' T# q/ k2 Z3 |+ I5 a
        问题是:我从没收到关于这个程序的说明,也没见过打开这个功能的选项,更不要说给我机会关掉它了。% f7 P+ |8 X  B3 P( r1 x
        
. l% v/ y& n' q& a        还有一个臭名远扬的例子。索尼公司在2005年卖出过一批音乐CD,其中使用了自动运行技术,能在Windows系统上安装间谍软件:光盘插人计算机后,就会悄无声息地自动安装监控程序。6 I; P5 ^! j5 _, ~1 C5 l2 ]7 [  U
) D8 i# d( e9 Q( J# j
        这个间谍软件用了一些手法来隐藏自己,这说明某些人也知道这样做不够厚道。这个程序的实现有缺陷,会让计算机完全开放,导致任何人都能安装软件。索尼这样做想必并非出于恶意,而只是为了防止非法复制。但这个程序发现计算机播放音乐时,不管是不是索尼发行的,都一股脑报告给索尼。这个做法曝光之后,索尼的反应是发布了一个让安全性变得更加糟糕的卸载程序。" p! W- E4 F& c3 d3 l
        $ \+ l6 {* [& U2 W9 l4 G
        此外,人侵者往往会在个人计算机上安装僵尸(zombie)程序,这类程序平时潜伏着,一旦控制者从互联网发来指令,就会发作并执行诸如发送垃圾邮件等攻击。这些程序一般也叫肉鸡(bot),控制它们的各个网络通常叫僵尸网络(botnet)。万维网上已知的僵尸网络有上千个,可能控制了几十万到上亿台的肉鸡待命出击。
3 K5 ^, J& y$ z6 D3 \! z& p        
  A# L; ?) D3 N- p5 O; ]        攻击者人侵客户端计算机之后,就可以查看其文件系统,或者悄悄安装按键记录器抓取用户输人的口令和其他数据,这样就能从源头窃取信息。按键记录器是在客户机上监控所有按键行为的程序,所以能抓到用户输人的口令。而且在这种情况下,加密也没用。这种程序也可能开启计算机的话筒和摄像头。* ^. f" h" y3 O. D- C$ {
        ' F) {8 I. Z, ^. C; C; P
        如果浏览器或别的软件有缺陷,导致不怀好意的人在你的机器上安装了他们的软件,风险就更大了。浏览器程序庞大而复杂,存在种种可能导致用户遭受攻击的缺陷。为此,要让浏览器始终更新至最新版本,还要配置浏览器让它不要向外发送不必要的信息,也不要允许随意下载。
" `2 @8 Q1 H3 y' b5 T/ d- Z- W; M) G9 i0 o" D/ c- r6 L5 M
        另外,请注意你自己下载回来的东西,不要仅仅因为网页或程序让你点鼠标,就盲目去点。稍后我们将讨论更多的防御措施。
: w  A. {; u% s# K        6 F0 Q: {# W  D5 E" L# S  h
10.8.2 对 服 务 器 的 攻 击

0 T! J) _7 Y' {( t        对服务器的攻击并不是用户自己的问题,因为普通用户对此无能为力。但覆巢之下无完卵,服务器遇到这类攻击时,普通用户也将沦为受害者。
( F. C8 P4 w0 F# U! O. z8 i9 ]        7 j/ P# E' Q" T3 o& |! O
        为阻止对服务器的攻击,服务器的编程和配置必须非常仔细,不论客户端发来的请求构造得多么精心,都要确保不泄露未授权信息,不允许未授权访问。0 j4 j$ x% T/ _% I* |( ?
+ p6 g2 X( B6 N: ~  Z, r5 Y
        但实际上,服务器上运行着的大型复杂程序,使服务器容易出现可能被攻击者利用的编程缺陷和配置错误。SQL注入(SQL injection)就是一种常见的针对服务器的攻击方式。+ o9 d$ l0 v$ R7 I  t" p

% ?5 m+ T+ D$ b# ^4 d; u9 o        在万维网上,服务器一般在后台运行数据库,访问数据库时通常使用标准接口SQL(Structured Queiy Language,结构化查询语言)。如果没有严格限定访问权限,机灵的攻击者就可以提交精心构造的SQL查询指令来检查数据库结构,从而提取未授权的信息,甚至有可能在服务器上运行他们自己写的代码,进而控制整个系统。  C$ d; L- C# c' z
) E) R  B8 p* U6 t+ z+ h
        尽管上述攻击及其防御机制是众所周知的,但服务器被攻击的事件仍然不断发生。/ e& |+ o4 @# R; z& W$ L
        4 s3 v1 `: E8 U6 \0 ?
        系统一旦沦陷,能制约人侵者恶行的限制就很少了。特别是当人侵者设法获得了root权限(也就是系统的最高级别管理权限)时,他们就更会为所欲为。% e1 G; t: s3 {9 J$ D

0 ^8 R0 E& I  |" H1 s2 E" |4 c        不论是对服务器,还是对你家里的个人计算机,都是如此。获得服务器root权限后,人侵者就能摧毁网站,或者在网站上发布令人尴尬的言论以丑化所有者的形象。  L0 J4 E) A5 @8 l- R& Y3 h- k
- i7 a1 v) }  x# U  @
        还可能下载破坏性程序,或者在网站上存储并发布色情图片和盗版软件等违法内容。服务器可能会因此丢失大批数据,个人计算机一样在劫难逃。2 K: E; u1 S; F: A% o

5 r& r0 l6 u6 L* ?* u        2011年4月,黑客从索尼PlayStation网窃取了七千万用户的姓名、家庭住址、电子邮件地址等信息。在几乎同一时期的另一桩案子中,为多家大企业提供电子邮件营销服务的Epsilon公司丢失了几百万用户的姓名和电子邮件地址。(两家有业务往来的公司都就Epsilon的事故给我发送了提醒,一家说只泄露了电子邮件地址,另一家则说还泄露了姓名。两家说法不一致让我谁的说法也没法相信了。)类似这种事故,虽然规模未必总是这么大,却经常发生。
& _$ r, N, m7 d/ _4 `        7 c$ g  a$ g+ p9 K/ A6 u0 v7 x0 d
        服务器还经常遭遇拒绝服务攻击(DoS,Denial of Service)。在这种攻击中,发起者把大量网络流量引导到一个网站,利用密集的访问使其停止响应。
; z; s4 K" `/ J9 F# K8 ]7 T5 j  \# `; @6 f/ D+ Y, U: Q# X
        拒绝服务攻击是精心策划的,通常用僵尸网络来完成:沦陷的肉鸡接到命令后,会在指定时间访问指定网站,从而导致流量骤增。从多个来源同时发起的拒绝服务攻击通常称为分布式拒绝服务攻击(DDoS,Distributed Denial of Service)。6 J& o* @" S. H" Q9 i" q
        
  G7 m- }, z! M% M4 w/ B        不幸的是,防御者需要防住所有可能的攻击,而攻击者只要找到木桶的一块短板就行。因此,这场攻防战的双方是不对等的,天平倾向于攻击一方。undefined$ W/ \" W0 V0 O  N; F8 ?
        
0 T. f2 ^7 S3 n0 t4 l- i
10.8.3 对 传 输 中 信 息 的 攻 击

: s- y5 u% Y# }0 W5 N  h        尽管对传输中信息的攻击仍然很严重也很常见,但这个问题在万维网安全中往往是放到最后考虑的。无线网络的普及,或许会提高人们对这个问题的重视程度。例如,坏蛋可能会偷听你和银行的对话,窃走你的帐号、口令等信息。
' Z8 s2 d* \5 G7 d1 w0 \$ G3 R2 U$ G% S4 P7 h
        但如果你和银行之间的通信是加过密的,偷听者就很难分析出他听到的数据是什么意思了。HTTPS协议是加强型的HTTP,对请求和应答双向数据都做了加密。这样,偷听者通常就不能读取信息,也无法伪装成通信中的任何一方。+ t* ?2 Q7 O6 \6 _% s' r- N3 u& i
% g" K$ y# z3 E/ e# c
        然而,由于HTTPS并没有被广泛使用,攻击者仍然可以用Firesheep之类的程序在咖啡馆、机场和提供无线上网服务的其他公共场所偷听连接,从而可以让他们假扮成你,而你根本无法察觉到。靠窃听商店里未加密的终端机通信就可以获得信息卡信息:窃贼坐在商店外的车里,一有交易发生,窃听设备就可以捕获信用卡数据。
' S6 F8 p0 ~5 y; m) n% d        3 U( q% a, l! N9 Z3 R/ j+ {
        还有一种攻击形式是“中间人攻击”,即攻击者截获消息,并按自身需要加以修改后发出去,该消息看起来是直接来自源头的。(第8章讲到的《基督山伯爵》中的一个故事,采用的就是这种攻击手法。)
, c5 N7 s" z  v" L7 [9 ]) D        
! y- c# [& C7 N; d' x3 y) L5 n        VPN(Virtual Private Network,虚拟专用网)在两台计算机间建立起加密的通道,以保证其间双向通信的安全。企业通常通过部署VPN来让员工在家里办公,或者到国外出差时连回公司。用户登录VPN不仅需要输人口令,还需要持有一个物理设备。, `' S( N6 \0 X" T& I0 _- k( J

; w& q; m" X, V9 X& g! i        这种“双因子”认证比只输人口令要安全,因为它不仅需要用户知道某些信息(口令),还需要拥有某些实物(设备)。在实际应用中,这个设备可以是手机里运行的程序,$ h9 s  u& \- f5 z
        - z6 l$ g  D* L7 Y0 S7 J6 y
        能按某种算法生成动态数码以便跟服务器上用同样算法生成的数码匹配,也可以是一个能显示数码的专用设备,在输口令时把设备显示的数码一起输进去。双因子认证技术不仅用于VPN,也可用于银行和其他在线账号服务。
0 }5 K( E* i9 S+ N0 G4 H* J0 r9 D. D+ @& c: j/ S
计算机扫盲贴|第十章_万维网 QQ截图20170201185002.png
9 x- Q9 J* n, N, z
        颇具讽刺意味的是,制造出业界广泛使用的双因子认证设备SecurelD的RSA公司在2011年3月遭遇人侵,安全信息失窃,从而使某些SecurelD设备不再安全。随后,军火商洛克希德·马丁公司受到攻击,看样子黑客充分利用了SecurelD失窃案中得到的信息。
9 Y* h; r1 h. v# ?        . y; W7 {" O& }# W
10.8.4 自 我 防 御
        1 p% _" D/ i4 Q/ N6 g0 p3 g
        个人计算机用户如何进行自我防御?有人向我征求这个意见时,我会用本节的内容告诉他。我把计算机用户的防御手段分成三类:第一类非常重要,第二类中等重要,第三类则要看你的偏执程度。(如你所料,第三类我就不细讲了,因为大多数人根本不会偏执到这种程度。)
0 r; f/ L: C" O8 c$ Q( N        3 a. N+ I# C5 Z" s  e& H) q
        【非常重要】
$ }& F* d$ w: K        
& v% w3 N8 |& a" D3 x$ C7 \4 M7 d        选择安全的口令,让别人不会轻易猜中,即使反复尝试也不至于马上就被破解。一串随机的大小写字母、数字、特殊字符混搭而成的口令,显然要比词典里的单词、生日、家人和宠物名来得安全。至于信奉“最危险的才是最安全的”,从而用“password”作为口令的搞笑念头,还是及早打住为妙。& W6 \) P( [  J; L3 e

% O- i+ b9 \8 e. s6 g  z+ R4 J/ Q          关于密码,可以看看这个贴(据说黑客的密码是这样的 )undefined0 B9 Y) R) I( ^( b' p; x. a
        
6 ]" m% l* M- p& g! N: Y' t        不要在重要网站和无关紧要的网站用同一口令,前者包括银行网站和电子邮件,后者譬如在线报纸。工作账号和私人账号不要用同一口令。经常修改口令,但不要改得太有规律,比如在最后一位数加1。8 ~5 u+ `/ s5 F2 e" W) R  R  K- }
/ A7 D6 j( K- ^: H- C
        不要用开放的无线网络做重要的事。保证用HTTPS连接无线网络,但别忘了HTTPS只加密内容。收到来历不明的邮件不要打开附件。收到朋友寄来的邮件,如果发现有意想不到的附件,也不要打开。不要因为软件提示你接受、点击或安装就全部照做。不要从可疑来源下载软件,除了可信来源之外,下载和安装软件都要保持警惕。
6 T! c9 \4 g4 A8 N        
0 w2 v+ E- ^: r' T6 g$ Z        使用Windows要安装防毒软件并保持更新,不要去点那些声称要对你的计算机进行安全检查的网站链接。关闭微软Office程序的宏,尽量禁用ActiveX控件。如果用的是苹果电脑,现在还不太需要防病毒软件,但同样要小心。其他软件,比如浏览器和操作系统本身,既然厂家经常发布安全补丁,就可经常更新。
, T! B+ Y- G" z( K0 w4 `( X; D* P, v, h, ^) J2 b4 v8 r
        【中等重要】! W5 r& d) U8 y; C
        
) b" C; `9 m# ]* H8 `0 W7 H" G( U        关闭浏览器弹窗和第三方cookie(讨厌的是,每个浏览器都分别保存自己的cookie,所以每个浏览器要分别设置一遍)。用Adblock或Flashblock等软件拒绝广告图片。
+ n$ L+ K8 I8 o/ v  w2 A1 M3 G6 C1 z          `1 b* b7 {; Z0 R  c/ k
        用垃圾邮件过滤器筛选电子邮件。) v, X& D* k: J: q, [
        ) w" W% t2 s" K7 g: |
        关闭AdobeReader的JavaScript。9 h, r) e! A1 y1 Z( @; @: g
        $ K8 R4 C" a8 j/ L: p% T% C
        关掉不用的服务。比如我的苹果电脑可以共享打印机、文件和设备,还能从别的计算机远程登录进来管理我的计算机。Windows也有类似的一套服务。我只保留了打印机共享,其他统统关掉了。9 B, S, X# k" t' a

' T( G2 \5 f1 `        【需要注意的是,网上流传的一些关闭Windows服务的“教程”(尤其是转来转去不知出处的中文教程)不求甚解、以讹传讹,而且通常是为了“精简”系统运行时的资源占用,不是出于安全考虑,甚至还为了躲避正版验证而关掉自动更新,因此使用Windows的服务管理器关闭服务时务必慎重。】% x2 R" j' {+ v' t& F# Q% N0 M
        / d: v4 s) t8 U3 p3 F
        打开计算机上的防火墙程序,监控进出的网络连接,禁止违反访问规则的连接。
; m1 Y0 K1 r: d2 c/ L5 B' h        
2 e6 K0 X$ R: s" X- g- @        只要有可能,就对重要账户使用双因子认证。/ p" E9 k1 ^* U, m7 G& U

) m: g6 d- r! L6 E        【偏执狂专用】
) Y3 \; \- b, N, o1 G        
/ v/ S, ~1 k8 j2 z        禁用邮件阅读程序读取HTML和JavaScript。‘
3 D- L, q/ h) S        
# _, E6 q4 H; W( M$ X  v0 U5 A        用NoScript限制JavaScript,用Ghosteiy限制跟踪。+ t3 q; i- E. O$ `' l  C  [6 v2 h, O
        ) y) L7 Y$ I9 o
        关掉所有cookie,只对自己明确想启用的网站打开。
1 `0 l$ r  s8 B! X3 |        ) ]. H8 M$ D) D7 _; B# u" C8 J
        选用那些不易成为攻击目标的系统,比如用Linux或MacOSX系统而不是Windows。使用Chrome、Firefox、Safari和Opera等浏览器,而不使用Internet Explorer。
4 z6 X  {3 s4 i, V) l: ~        
$ _. s  N6 b: v( |6 @, f        鉴于手机也越来越多地成为攻击目标,在手机上采用类似的预防措施也是很必要的。
: Z' g6 ~, [3 j+ E& _+ k& z. ~8 }0 Z& H% A6 Y# _! D
10.9 密 码 术
        . C' `6 Y5 h* v0 l% C' _
        密码术被称为“秘密书写”的技艺,用以和别人交换私密信息,已有数千年历史。尤利乌斯·凯撒大帝曾用过一种简单的密码方案(后人称之为凯撒密码):把消息原文中的字母向后移动三个位置,于是A变成D、B变成E……,“HIJULIUS”就变成了“KLMXOLXV”。! t% G  ~! z$ w2 e$ v

) X/ C- z& I+ B: D: p. c        这种算法现在仍然有生命力,有个叫rot13的程序就是把字母移动13个位置进行变换,常用在新闻组里,隐藏冒昧言论或者剧透,以防被人意外看到,并不是真的用来加密。undefined2 ?5 ~# \" v; I$ N, S* |( K7 J
        
! e$ u% ^. \$ V+ l% F& ~6 W        在人类运用密码术的历史长河中,涌现出了丰富多彩故事。有些轻信加密就能保密的主人公,还曾因此丢了性命。1587年,苏格兰女王玛丽就因为加密不当而命丧断头台。
8 k5 c- J) _, C1 j4 v! j6 c9 B5 M
5 l! l& v+ t/ B" D" W        当时,她和密谋罢黜英格兰女王伊丽莎白一世、把她本人推上英格兰王位的同谋者通信,然而密码系统被破解,阴谋内容和同谋者名字在中间人攻击下暴露出来,他们在劫难逃,被斩首示众。/ U6 ^9 X# F( s5 u2 H9 H5 x+ r
% K" C% o6 z, q9 \- Q, Y7 i1 J
        1943年,由于日本的军用加密系统不够安全,日本联合舰队总司令山本五十六大将一命呜呼。美国情报机关破解了山本的飞行计划,于是派飞行员击落了他的座机。夸张一点说,正是由于英国人靠阿兰·图灵的计算知识和技术破解了恩尼格玛密码机,解密了德军的军事情报,才使得二战结束时间大大提前。
7 M) ~$ w0 \9 ~3 `- j' F        
! G- E# \# {9 K9 ?% q7 b- I3 U        加密的基本思路是,张三和李四想互相交换消息,要求通信内容保密,但并不掩盖他们正在通信的事实。要做到这一点,他们需要共享用来扰乱以及随后恢复要传递消息的同一段密文,这样,别人就看不懂他们写了什么,只有两位当事人自己看得懂。用来加密消息的密文被称为密钥。& K% O! R( x; r# ]% V+ w/ a2 T8 q* n
9 ~6 J, i% s. O
        例如,在凯撒密码里,密钥就是字母移位的距离,3表示把A换成D。对于恩尼格玛密码机这种复杂的机械加密设备来说,密钥就是若干代码转子设置和一组插头接线方式的组合。基于计算机的现代密码系统则使用巨大的秘密数字作为密钥,把秘密数字作为变换消息中比特流的复杂算法的输人。! E9 h+ J  X+ o
; k3 M4 Y6 `) O7 B
        这样,如果不知道这个数字,就不可能还原消息。有多种方法用来对加密算法实施攻击。频率分析法统计密码中每个符号出现的频率,可以轻松干掉凯撒密码和报纸上填字游戏所用的简单替换密码。
9 ~. y% ?, v6 e3 v! _: s5 h5 L
& i. y7 E# W7 a        要抵御频率分析,加密算法必须要做到让密文中所有符号都以大致相等的机会出现,以做到没有模式可供分析。但有时候,攻击者可能知道与待破解密钥加密的密文相对应的明文;即使不知道,他们还可能会选取一段明文,诱使被攻击者用待破解密钥加密这段明文,从而两相对照,达到破解的目的。好的算法要能有效抵御所有这些攻击。# R9 ]( g$ ^6 J$ A" ?* N
        2 R# U6 }! d( y9 o/ P( v( }$ z
        现代密码学必须假定攻击者知道并完全理解密码系统的工作原理,从而将所有的安全性都寄托在密钥上。与此相反的做法是假定对手不知道系统用什么加密方案、如何破解,这被称为隐匿式安全,只要时间一长,这种做法肯定要完蛋。
, L' Z, T5 _  [" B
5 H& Q6 ?' |0 t& X: _0 L+ b- w        苏格兰女王玛丽、山本五十六和德军都没有重视这个至关重要的事实,并为此付出了致命的代价。实际上,如果有人鼓吹他们的加密系统十分安全,却不愿说出其工作原理,那就可以确信它并不安全。
  n! }' d, A1 x* ]' ~        3 H! P) t; f& g+ ?
        这年头,加密故障通常不会给身体带来危险,但会让那些盲目相信加密系统没有缺陷的人颜面扫地。最好的例子是用来加密电影DVD的内容扰乱系统(Content Scrambling System,CSS)。2 c# G- J& k+ U! B
  Q- r/ T9 w$ O* h- _5 ~
        1999年,一位年仅15岁的挪威学生约恩·莱克·约翰森(Jon Lech Johansen)发布了破解DVD的DeCSS程序,随后这个程序广为流传,他也被人们称为“DVD约恩”。后来约翰森再接再厉,又用逆向工程破解了一些别的加密系统。
9 b2 i; c8 \6 P! b6 m$ q        7 M  \1 [( a6 w; r
        目前使用的加密系统基本可分成两类。一类是历史较长的密钥加密,也称对称密钥加密,因为加密和解密要使用相同的钥匙。“对称”这个词能更好地描述其本质,但“密钥”则让人更容易区分它与另一类加密系统:公钥加密。
! M/ B* c! Z5 d& B" Z7 y- _
        
10.9.1 密 钥 加 密

" V1 I; F7 @/ A/ h7 }3 C" [2 T        在密钥加密系统中,使用同一个密钥对消息进行加密和解密,这个密钥由参与消息交换的各方共享。假定选用的算法完全为人所理解,而且也没有任何缺陷和弱点,那么破解消息的唯一方法就是蛮力攻击(brute for ceattack),即尝试所有可能的密钥,直到找出用来加密的那个。
% y- r; V& S1 i1 d3 W; |7 f7 A1 d8 I
        蛮力攻击很耗时间,如果密钥有N位,穷举时间就和,成正比。然而蛮力攻击也并非没有用,因为攻击者可以先尝试短密钥,再尝试长的;先尝试可能性大的密钥,再尝试可能性小的。, s; J0 D, V' |7 E: A

8 M  y; U( }! K' Z0 d        比如字典攻击(dictionary attack)就是尝试用“password”和“123456”这些常见单词和数字形式攻击。如果我们选择密钥时偷懒或粗心,就会让这种攻击得手。
2 w. E, C7 }: P3 K' n! y        # ]( m& r. y* H1 [$ a' R: V6 a
        从1976年到2000年代初,最常用的密钥加密算法是DES(Data Encryption Standard,数据加密标准),该算法由IBM和NSA(National Security Agency,美国国家安全局)共同开发。# D( s% U* p9 @4 O$ P/ V# Y

( h4 v9 b0 z9 c# w1 g! h        尽管有人怀疑NSA在DES里埋了一个秘密的陷门机制,这样他们就能轻松破解用DES加密的信息,但这种怀疑从未得到证实。DES总是使用56位密钥,随着计算机的运算速度越来越快,这个密钥长度显然已经太短了。早在1999年,计算机使用蛮力攻击,穷举一天就能破解DES密钥。一些使用更长密钥的新加密算法应运而生。6 A# ^, U8 b* o) w/ F
        
1 w9 \; q9 }6 \( h8 W% M1 S        这些算法中使用最多的是AES(Advanced Encryption Standard,高级加密标准)。该算法是为解答一道全球公开竞赛的题目而开发的,竞赛的赞助方为美国国家标准技术研究所(National Instituteof Standards and Technology,NIST)。
* j; U3 T+ T- i& K1 L* M8 w# J+ F
+ R  h7 E) |+ E  Y, E( ]+ E0 Y3 s        当时,来自全世界的参赛选手提交了几十个算法。经过激烈的公开评测,比利时密码学家琼·德门(Joan Daemen)和文森特·赖伊曼(Vincent Rijmen)发明的Rijndael算法摘取桂冠,并于2002年成为美国政府的官方标准。这个算法已归人公有领域,任何人都可以无偿使用。undefined/ m2 m, F4 l# k# O/ _' T& Q

% L  b( z8 {, R8 Q2 q* N' R' W        AES支持128、192和256位三种密钥长度,可能的密钥数量非常多,用蛮力攻击算很多年也不会有结果,除非能发现算法有弱点。
+ s0 }. k# j5 q) v/ }        ' C/ z; a1 k1 M2 F& D, l
        AES和其他密钥加密系统面临的一个大问题是密钥分发:参与秘密通信的每一方必须知道所用的密钥,所以必须有绝对安全的渠道把密钥送到通信参与方。) A+ c0 \& w/ s! S

7 t# U- C3 \/ i        这看似很简单,就像把大家都请到家里来聚餐一样,可如果来的人里有间谍或敌人,显然就无法保证分发密钥时的安全性了。还有一个问题是密钥增生:要保证与彼此间无关的多方相互独立地秘密会话,就要为每组会话准备不同的密钥。这就导致密钥分发更加困难。密钥加密系统的上述困难导致了公钥加密的诞生,我们将在下一节讨论。
6 p5 I# K: o3 ~" w# Y7 u          X# C) t# m. P$ F1 v9 l! p
10.9.2 公 钥 加 密
1 K2 B* T( u, K2 m; |, O- x( i
        公钥加密是怀特菲尔德·迪菲(Whitfi eld Diffie)和马丁·赫尔曼(Martin Heilman)在1970年代中期发明的,采用了与密钥加密完全不同的思想。差不多同时,英国一所情报机构的密码学家詹姆斯·埃利斯(James Ellis)和克利福德·柯克斯(Clifford Cocks)也独立发现了同样的方法,但他们的工作被视为绝密,不能发表,因此与大部分荣誉失之交臂。0 x9 A% C+ i4 f- T& l. B- Q. j
        
0 u# F+ @6 S4 F* i4 ~* E        在公钥加密系统里,每个人都有一个密钥对,包含一个公钥和一个私钥。这对密钥是在数学上有关联的整数,具有如下性质:用其中一个密钥加密过的消息只能用另一个密钥解密,反之亦然。在公钥加密系统里,只要密钥足够长,不论是蛮力攻击还是从一个密钥推算另一个密钥,都将是徒劳的。
" @9 D9 t+ Y9 T& v9 H4 Z        
) T: I6 k. V9 I( L9 k        在实际使用中,公钥真的是开诚布公:任何人都能拿到,一般是公布在网站上;私钥则一定要金屋藏娇,只有这个密钥对的主人才知道它。undefined2 i( v9 q# z( J* z/ G$ E
        
) L! w5 o. i7 F        设想以下场景:张三想给李四发一条消息,该消息要加密,保证只有李四自己才能看到。张三先到李四的网站上找到他的公钥,用这个公钥把消息加密后发给他。消息发出的时候,王五在偷听,他发现张三正在给李四发消息,但因为内容加密了,所以不知道发出的是什么内容。6 [$ d3 g# z& f8 C
        1 X+ L7 p7 s1 X4 a4 m4 L
        李四能用自己的私钥解开张三发来的消息。私钥只有李四自己知道,而且只有用这个私钥才能解开用他的公钥加密过的消息。反过来,如果李四要给张三发一条加密的回信,就要用张三的公钥来加密该消息。这次,王五仍然知道有消息发回来,但他同样只能看到加密过的密文,不知道内容写的是什么。张三收到消息后,用只有自己知道的私钥解就可以解开李四的回信。6 C, [  t& {) g. a4 X$ `. N
        , f. j" R1 F( k
        由于不需要传送共享的密钥,公钥方案有效解决了密钥分发的问题。张三和李四把各自的公钥放在网站上,任何人都可以给他们发送秘密消息,既不需要事先商定,也不需要交换任何密钥。实际上,参与通信的各方甚至根本不需要认识。( H& A0 f6 q; h. }9 k5 J  E
        ' C& B" C4 I. S% l  u
        公钥加密是在互联网上进行安全通信的关键要素。设想我上网买一本书。我得告诉亚马逊网站我的信用卡号,但我并不想发送明文,这样就需要使用加密的通信通道。直接使用AES是不可能的,因为我和亚马逊之间没有共享密钥。
' s& ^# L, _7 h
) y: B3 t% v& a# L' U* e/ ?        为了商定共享密钥,我的浏览器必须首先随机生成一个临时口令,并用亚马逊的公钥加密这个临时口令,然后把加密后的结果传给亚马逊。亚马逊用它的私钥解出临时口令后,我的浏览器和亚马逊就可以在AES算法中用这个临时口令来加密要传送的信息(比如我的信用卡号)。
! t; C1 i2 J# w6 n& C        
6 ~, j8 y5 H  k2 F  ]* `        公钥加密的主要缺点是算法的运算速度慢,比AES这种密钥加密算法要慢好几个数量级。所以,通常不会用公钥加密算法加密全部数据,而是分两步走:先用公钥加密协商出一个共享的会话密钥,再用AES加密接下来批量传输的数据。4 O; k" w5 h, y) u: p
        
' ^/ d! ~( a6 M9 x2 q        上述加密过程的两个阶段——首先是用公钥加密算法设置临时口令,然后再用AES交换大量数据一都是安全的。当我们访问网上商店、电子邮件服务和很多别的网站时,都要跟这种技术打交道。" |) Y( R, i- n. d" Q
: d/ z$ O7 t) u4 t3 c6 G. n0 g
        你能在浏览器上看出它在运行,因为浏览器会显示正在用HTTPS(即安全的HTTP)协议连接,还会显示门锁图标,表示这个连接是加密过的:( ~4 t5 w2 J4 t: _# x- @1 @5 w" t" ?
/ s7 u1 L* P- }* j1 G" [
计算机扫盲贴|第十章_万维网 QQ截图20170201194115.png
        ' ~' u& h, N2 k! g% k6 o4 }$ Y
        公钥加密还有其他有趣的用途。例如,可以用做数字签名方案。设想张三想签署一条消息,以便让收信人能确定该消息是他本人签字认可,而不是别人假冒的。张三首先用自己的私钥对消息进行加密,然后把结果公布出去,然后任何人都能用张三的公钥来解密该消息。2 D  t& e8 m) e" `
3 B. N  t8 n! D, N& B1 y- b
        因为除了张三之外再也没有别人知道他的私钥,因此接收者可以断定这条消息一定是张三加密过的。显然,这只有在张三的私钥没有泄露的情况下才成立。+ M  l( U* h* t/ G- ]$ ?) s& v  y

5 I6 y" A- J. I$ q: Q5 O        另外,张三还可以只给李四签署一条消息,让除李四之外的人都无法看到,而李四不仅能看到该消息,还能验证确实是张三发给他的。具体做法是:张三先用自己的私钥签署这条消息,然后用李四的公钥加密签署后的结果。王五虽然发现张三给李四发了一些信息,但只有李四能用自己的私钥解开密文,然后再用张三的公钥继续解密,同时证明了消息真是张三发来的。
5 Z6 m' s/ i3 ~2 u- l        5 b) Q# i  `- y0 [& A* C# i9 ]
        当然,公钥加密方案也不是完美无缺的。如果张三的私钥泄露了,之前别人发给他的消息就形同明文,而他之前的签名也就不可信了。另外,尽管大多数密钥生成方案都包括密钥生成时间和失效时间,但真正撤销一个密钥(即宣布某个密钥从此以后失效),却是很困难的。
. H+ l( P& `1 S( W) r% H, ?" n        
" C  |' O  T. M: l" K+ y        最常用的公钥加密算法是RSA,这个算法是麻省理工学院的三位计算机科学家罗纳德·李维斯特(RonaldL.Rivest)、阿迪·沙米尔(AdiShamir)和伦纳德·阿德曼(Leonard Adleman)在1978年发明的,RSA就是这三位发明人姓氏的首字母缩写。3 j( i( O6 O/ d( ]8 q7 u' d$ G
        
$ u2 `7 B+ ?6 c" ]2 B        RSA算法的可靠性来自于对巨大合数做因数分解的难度。RSA的工作原理是生成一个很大的整数(比如长度为300位),这个整数要有两个素因子(长度约为二者乘积的一半),以此作为生成公钥和私钥的基础。' B0 j% v  F* w: t% U

( |! ~2 L' O& y, T- i3 P        知道这两个素因子的人(即私钥的主人)能迅速解开密文,其他人要解密就得先分解素因子。由于计算量过大,这实际上是不可能完成的,或者最起码是我们认为无法完成的。李维斯特、沙米尔和阿德曼因为发明RSA而获得了2002年图灵奖。undefined
) o( F! ^* j8 g+ l        
9 g; s* p% k$ y: g( ~0 [5 I        在RSA算法中,密钥的长度很重要。据我们目前所知,分解大整数的运算量随整数长度的增长而呈指数增长。我曾经为了演示RSA而生成过512位密钥,这个长度也是RSA标准密钥生成程序的默认值。然而到了2008年左右,生成程序已经不让我用512位的密钥了,因为不够长,于是我用了1024位的。
: ^% b0 r* Y: u  U' V2 M/ ~
* {$ J# R$ g: \) M# F1 t- r        看样子,过不了几年,1024位也要嫌短了。RSA实验室是持有RSA专利的公司,它曾举办过一个分解素因子大赛,从1991年一直办到2007年。它公布了一个列表,上面是越来越长的巨大合数,设立奖金悬赏能分解开每个合数的第一人。最小的合数有100多位,很快就分解开了。2007年这个竞赛停办之时,分解出来的最大合数有193位(二进制640位),奖金是2万美元。(这个列表还挂在网上,感兴趣的小伙伴们不妨一试。)
5 N/ V, J9 }9 A2 U        
: }" N  ]% K& a- z* Q  S        现代密码术尽管有这些神奇的特性,但在实际应用时仍然需要一定程度的信任来支撑,特别是需要可信的第三方存在。举个例子,我在网上买书时,如何确定我是在和亚马逊对话,而不是和一个精于伪装的冒牌货往来?undefined9 e& m8 [; o, \4 R: K/ k3 A+ i
; c  p# ]+ x. ^
        为了解决这个问题,我访问亚马逊时,该网站发送给我一个证书来证明它的身份。证书是由独立的权威机构签署的一组信息,用来证明亚马逊网站的身份。$ b/ f/ j. O4 |( f

" p* I( y$ x/ z$ D" H- B- F7 k$ e( `        浏览器用权威机构发布的公钥来检查网站发来的证书,确认它属于亚马逊而不是其他机构。理论上,我可以相信:如果权威机构说它是亚马逊,那它一定就是。但我首先要信任权威机构本身,如果是权威机构是假冒的,那我就不能信任用它签署的任何网站证书。) f9 @3 l, F9 R  ^# U$ }
; V+ c; l- y( n, d$ E
        令人诧异的是,常见的浏览器包含了很多证书,比如我用的Firefox版本里有80多个,其中大多数来自我从没听说过的组织,比如中国台湾的中华电信公司和斯洛伐克的Disiga.s.公司。2011年8月,黑客人侵了荷兰的一家证书权威机构DigiNotar,因而他就能生成包括Google在内的很多网站的假冒证书。
0 N2 I6 s! ?" c6 k/ N        + T( o/ o. E. ]) H5 T, u$ @$ F
        因为公钥算法很慢,所以一般不直接用公钥算法对文档签名,而是签署从原始文档提取出来的小得多的文档。选用适当方法生成的这种小文档无法伪造,也无法从其他文档生成同样的签名值。- R) X; g8 J% \; Q1 \4 c; i
$ ^: R5 Y6 B" ~1 ~8 {
        这样的小文档就叫做消息摘要或密码学散列,其创建方法是用某种算法把任意输人的比特流变换成固定长度的比特流,也就是摘要或散列,最终得到的结果具有如下特性:无法通过计算找到别的输人来生成同样的摘要。' N$ ~* W5 o( i7 Y/ F
7 j/ n- E# u9 c2 i* t$ d7 u
        此外,输人中最轻微的改变都会让输出摘要中大约一半的比特发生变化。这样,通过比较接收者计算生成的文档摘要与原始摘要是否匹配,就能有效检测文档是否遭到了篡改。下面来看一下字母x和X的密码学散列值(用十六进制表示):
, w6 Q3 g* M. x% C" v) N) I        * E! v& U: C! f3 o; ]( C5 G" m8 x
        x        9DD4E461268C8034F5C8564E155C67A6/ o) s$ }3 ^% P2 a- R
        X        02129BB861061D1A052C592E2DC6B383
5 n; y1 X, c/ O- W, C7 O% ]        
- _: ?3 w/ L: w        这两个字母的ASCII值只差一位,散列值却大不相同。根本无法通过计算找到别的输人,使得输出的散列值和这两者中的一个相同,也无法从散列值反推回原始输人。
/ y7 n9 Q7 d9 L  g6 T1 [        
4 x2 D; H. M7 {1 d5 m        目前广泛使用的消息摘要算法有两个。一个是罗纳德·李维斯特开发的MD5,生成128位的摘要。另一个是SHA-1,来自NIST(美国国家标准技术研究所),生成160位的摘要。. ?" I2 @, h6 C/ y6 ^

( l. w9 V; m9 _" U& |        已有研究表明MD5和SHA-1都有弱点,因此不适合用于对安全性要求较高的场合。
$ k. s) W1 f$ O
0 u, l5 s: z* N# t2 n        【根据抽屉原理,理论上,任何散列函数都必然存在碰撞,但一直以来,没有人成功构造出密码学散列函数的碰撞例子。2004年,中国科学家王小云针对MD5等函数,成功构造出了这样的碰撞例子。随后,王小云又与其他科学家一起设计了计算量少于263步的SHA-1碰撞算法。】
! x/ ]  f' S2 ~( H! n        
  W( g! g6 [& U7 @3 ]5 B        在任何安全系统中,最薄弱的环节都是作为用户的人,人会破坏那些他们觉得复杂难用的系统。设想一下,如果有人逼着你改密码,尤其是新密码必须马上想出来,而且要满足一些古怪的限制,比如要包含大小写字母、数字、某些特殊字符,但又不能包含另外一些字符,你会怎么做?
1 i( \) F5 K% o3 D
2 i8 k1 i$ N  @  u5 c$ _, ^        你可能会像我那样用公式来生成新密码,或者把无规律的新密码写在纸上,但这两种做法都会带来潜在的安全风险。(问问你自己:如果攻击者得到你的两个密码,能不能猜出你的其他密码?)就算每个人都能坚守安全防线,志在必得的敌人还可以用收买、讹诈、盗窃、暴打这四大武器来攻破城防。
4 g  |/ ?0 e- M3 g
5 e% {3 F$ q- N, F6 o. t        而像政府这样合法的暴力机构,则越来越多地用牢狱之灾来恐吓那些不肯说出密码的人。undefined
  h( ?/ s4 x" l  h/ P7 P! b. j  \8 A( h3 }  Q# V
undefined
        ) x8 H% g. _  p# ?+ F
10.10 小 结
6 i# E' M$ g! W3 \* f6 U8 S# J
        1990年以来,万维网从无到有,发展到如今已然无处不在了。万维网改变了商业,也改变了我们的很多习惯。尤其是在消费行为方面,过去谁能想到搜索、网上商店、评级系统、比价网站和产品试用网站的威力呢。
1 q# z9 ]/ _+ v6 t7 m2 {& ]        
$ M$ n$ ^& G2 v0 v" Z6 l        机遇和利益总是与问题和风险相逐又相随。万维网扩展了我们的生存空间,但也前所未有地让我们在陌生人面前暴露无遗,因此伤害也可能不期而至。
2 }0 K# T" J/ L0 l- ?        
6 m! E" q) P! o. U, T8 ^: p        万维网引发了很多难解的司法管辖权问题。例如在美国,很多州对其境内的买卖征收营业税,但是亚马逊这样的网上商店,并不会对来自大部分州的买家收营业税,依据是他们在买家所在的州并没有实体商铺,因而无需帮那个州的税务局代为收税。按理说,买家应该自己上报外地购物记录并依法纳税,但没人这么做。$ M, d& S4 E/ V# @, V
        
& {3 m6 o9 F( X* B- J        另外,诽谤罪的定罪也牵扯到司法管辖权。在有些国家,告某人诽谤只要能在该国看到载有相关言论的网站(无论网站在哪儿),就能胜诉,而被告是否到过这个国家都无所谓。9 n8 {# ^% ~- u- A: f$ p1 _
        2 d# s+ L* i. z9 i+ C9 D6 m' ?  C
        有些行为在某国合法,换一个国家可能就是非法的。常见的两个例子是色情业和在线赌博。一国公民在互联网上干了在本国犯法的事儿(比如到外国网站赌博),这个国家对他如何执法?有些国家仅为进出国门的互联网留下了有限的几条通路,以此来屏蔽他们不认可的网络访问,但这样做的国家在世界上也并非绝无仅有。
* M" s& s' c# ?5 S
' w- a3 t! B5 M        对政府来说,还有一个办法是让人们用实名上网。这看上去是个防止匿名辱骂和骚扰的好办法,但却让持激进观点的人和异见人士发言时如履薄冰。
! D2 Y5 A' A; A( ]) _9 x        3 z0 M- J7 T7 L6 b
        个人、政府(不论是不是国民支持的)和企业(其利益往往跨越国界)之间总是充满了合法权益的纠葛。互联网则让这些问题更加错综复杂。
6 K2 J, g" C' a* ~1 n


小执念 古黑浩劫论坛大牛 2017-2-1 20:50 |显示全部楼层

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

管理员
还有最后一章了,加油。
黑啤 「初入古黑」 2017-6-8 18:45 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

加密这部分第一次了解,以前就知道个扰码,通信上为了均衡0和1数量的处理
清风霁月 「出类拔萃」 2017-9-23 15:43 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

楼主的文笔实在用笔墨难以形容。。。熄了灯。。。打着赤脚。。。将整个人都倦在大班椅里。。。喝着清茶看那一个个帖子在论坛之间时隐时现。。。记得一位高人说。。。好帖子与垃圾帖的区别在于。。。好帖子越看越暖。。。而垃圾帖。。。越看越寒。。。我呢。。。一开始就和普通人一样。。。不相信真有一种帖子可以让人学会忘记烦恼和所有不开心的事情。。。所以。。。我选择看垃圾帖。。。选择垃圾帖的人。。。一般都比较冷静。。。 
微雨黄昏 「出类拔萃」 2018-1-21 21:16 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

我就是路过来看看的。。。#j325:
柔光的暖阳 「出类拔萃」 2018-1-23 10:13 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

有空一起交流一下
您需要登录后才可以回帖 登录 | 注册账号  

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2020-9-28 07:26 , Processed in 0.052456 second(s), 22 queries , Redis On.

© 2015-2020 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表