粗略整理网络安全问题

一. 什么是中间人攻击:

要理解中间人攻击,首先要理解数据在网络中是如何传递的。我的电脑要访问某个网页,我需要发出访问请求,这个请求从我的电脑发出后不是直接到达目标服务器,而是需要委托很多设备帮忙传递,而且我们也很难明确确认我的消息是谁帮忙传递的。但是好处是,我发出的请求通常都能够顺利到达服务器,虽然可能每次走的路不尽相同。服务器收到请求后会制作一份回复信息,这个信息同样经过很多设备发送到我的电脑上。在我和服务器中间帮忙传递信息的这些人就是中间人。

如果我的信息没有进行加密,那么任何中间人都有机会查看和篡改我的信息,如果发生了这样的恶意行为,就是我们所说的中间人攻击。那么中间人为什么要发起攻击,这样能获得什么了好处呢?比如,我的请求包含了重要的隐私信息,那么恶意攻击者可以查看并拷贝一份数据,然后对我进行勒索。或者,比如我的信息是请求服务器转账给某人(银行的系统会有复杂的流程防止中间人攻击,我们假设的可能只是某些不安全的游戏网站中的虚拟货币等等),那么这个中间人就可以把收益者改成他的账号,并将服务器返回的信息改成成功转账给我要转账的人。这样,我和服务器就都蒙在鼓里。

当然,防止中间人攻击其实也是很简单的,直接使用加密算法对信息进行加密,中间人看不懂,也就没法篡改了。

二. 什么是重放攻击:

我们在上一段中提到通过信息加密可以简单的防止中间人攻击。但是如果中间人是一个更聪明的人,虽然我们对传递的信息进行了加密,但是他还是有办法进行攻击。

首先中间人可以诱骗你给他转账,比如,他要卖给你一个游戏道具,让你转给他对应的钱,你觉的价格很合适,于是你给他赚了钱,就在这时,中间人截获了你发送的转账请求,虽然他看不懂你给服务器发送的请求是什么内容,但是他完全可以将同样的信息再发送给服务器一份,这时,服务器就以为你又发送了一份转账请求,于是服务器就又给他赚了一笔同样的帐。只要你的账号上还有余额,中间人就可以一次次的将你的钱转到他的账目上。这种攻击方式就叫做重放攻击。

那么如何防范重放攻击呢?基本的思路就是让中间人重新发送的内容失效,比如每次向服务器发送的请求中携带一个请求计数,每次发送请求的时候都将这个计数增加,只要服务器收到了之前出现过的转账请求,就认为这次请求无效,而中间人只能发送你发送过的信息,并不能自己编写请求,这样就无法冒充你给服务器发转账请求了。

三. 什么是跨站脚本攻击

跨站脚本攻击是利用网页的漏洞,通过一定手段向网页中注入恶意代码并使其执行,这种攻击手段比较多见,并且因为直接控制了客户端,危险系数很高。

跨站攻击的原理并不复杂,但是可能发生的情况却很多,最简单的跨站脚本攻击方式是向URL参数中注入js脚本,当用户使用这个url访问页面的时候,js脚本就会执行。

比如黑客诱骗你给他转账一定数额,这时他告诉你要购买你的游戏道具,并且给出的价格比较合理也很诱人。然后他发给你一个链接,然后告诉你从这个链接就可以转账。你打开网页之后发现确实是你在用的那个游戏的转账网页,而且他已经贴心的帮你把数额填好了,你只需要点击确认就可以完成转账,但是实际上这个URL中已经被他添加了恶意脚本,只要你点击确认,恶意脚本就会把你转账的数额修改,那么你的钱就会被黑客骗走。

当然URL注入脚本最起码你还要通过这个URL打开网页才能中招,如果黑客将恶意脚本直接注入到网站中,只要你打开这个网站,恶意脚本就会运行。比如将恶意脚本注入到评论中,可能你在交易市场跟别人讨价还价的时候你的账号就已经被攻陷了。

那么如何防范跨站脚本攻击呢?最直接的办法就是把注入的入口堵死,发现注入的参数可能是恶意脚本就直接阻止这次访问,可以使用正则检查用户输入的文本。或者限制用户可以使用的字符。当然,上文也提到了,跨站脚本攻击的种类很多,魔高一尺、道高一丈,攻击和反攻击的套路也是会不断升级的。

四. 什么是sql注入

上文提到的跨站脚本攻击的目的就是让恶意脚本在客户端执行,但是sql注入却可以让恶意脚本在服务器端执行,结果会更加可怕。

sql注入的原理和跨站脚本攻击的原理一样,只是注入的恶意脚本会让数据库管理程序执行,防范的方法也一样,就是检查过滤输入的参数。当然如果你使用的是成熟的ORM,通常ORM本身就具有防sql注入的功能。

五. 什么是跨站请求伪造

跨站请求伪造是利用验证信息会保存一段时间的特点,在用户访问B网站的时候,冒用用户的验证信息向A网站发起恶意请求。比如A网站是一个银行网站,而你同时也在访问B网站,B网站的恶意程序会冒用你的验证信息向A网站发送请求,实现转账的恶意行为。

通常我们使用的浏览器都支持防范跨站请求伪造,浏览器在发送请求的时候会检查发起请求的页面和目标地址是否同源,如果不同源就认为存在风险拒绝访问。但是有的时候我们确实需要跨站请求,比如C网页不是一个恶意网站,只是正常调用A网站的接口。这种情况下,C网站通常已经通过了A网站的验证,A网站认为C网站是一个安全的网站,就会在他的允许列表中添加C网站的地址。浏览器得到回复后,获悉A网站认可C网站,就会允许这次访问。

未完待续…