一网打尽!每个程序猿都该了解的黑客技术大汇总
程序员被黑过无数次,在其他人眼中,仿佛我们需要写得了木马,翻得了围墙,修得了电脑,找得到资源,但凡是跟计算机沾点边的,咱都得会才行。
段子归段子,言归正传,对于咱们程序员来说,多多少少了解一些信息安全的技术知识还是大有裨益的,不仅能了解一些计算机和网络的底层原理,也能反哺我们的开发工作,带着安全思维编程,减少漏洞的产生。
信息安全大体可分为三个大的分支:
- 网络安全
- 系统安全
- 密码学
下面就这三个领域分别罗列一些常用的黑客技术,部分技术是存在领域交叉的,就将其划入主要那个类别里去了。
网络安全
▐ SQL注入
Web安全三板斧之首,大名鼎鼎的SQL注入。
SQL注入攻击的核心在于让Web服务器执行攻击者期望的SQL语句,以便得到数据库中的感兴趣的数据或对数据库进行读取、修改、删除、插入等操作,达到其邪恶的目的。
而如何让Web服务器执行攻击者的SQL语句呢?SQL注入的常规套路在于将SQL语句放置于Form表单或请求参数之中提交到后端服务器,后端服务器如果未做输入安全校验,直接将变量取出进行数据库查询,则极易中招。
举例如下:
对于一个根据用户ID获取用户信息的接口,后端的SQL语句一般是这样:
select name,[...] from t_user where id=$id
其中,$id就是前端提交的用户id,而如果前端的请求是这样:
GET xx/userinfo?id=1%20or%201=1
其中请求参数id转义后就是1 or 1=1,如果后端不做安全过滤直接提交数据库查询,SQL语句就变成了:
select name,[...] from t_user where id=1 or 1=1
其结果是把用户表中的所有数据全部查出,达到了黑客泄露数据的目的。
以上只是一个极简单的示例,在真实的SQL注入攻击中参数构造和SQL语句远比这复杂得多,不过原理是一致的。
防御手段:对输入进行检测,阻断带有SQL语句特征对输入
重点关注:前端工程师、Web后端工程师
▐ XSS攻击
Web安全三板斧之二,全称跨站脚本攻击(Cross Site Scripting),为了与重叠样式表CSS区分,换了另一个缩写XSS。
XSS攻击的核心是将可执行的前端脚本代码(一般为JavaScript)植入到网页中,听起来比较拗口,用大白话说就是攻击者想让你的浏览器执行他写的JS代码。那如何办到呢?一般XSS分为两种:
反射型
1、攻击者将JS代码作为请求参数放置URL中,诱导用户点击 示例:
http://localhost:8080/test?name=<script>alert("you are under attack!")</script>
2、用户点击后,该JS作为请求参数传给Web服务器后端
3、后端服务器没有检查过滤,简单处理后放入网页正文中返回给浏览器
4、浏览器解析返回的网页,中招!
存储型
上述方式攻击脚本直接经服务器转手后返回浏览器触发执行,存储型与之的区别在于能够将攻击脚本入库存储,在后面进行查询时,再将攻击脚本渲染进网页,返回给浏览器触发执行。常见的套路举例如下:
1、攻击者网页回帖,帖子中包含JS脚本
2、回帖提交服务器后,存储至数据库
3、其他网友查看帖子,后台查询该帖子的回帖内容,构建完整网页,返回浏览器
4、该网友浏览器渲染返回的网页,中招!
防御手段:前后端均需要做好内容检测,过滤掉可执行脚本的侵入
重点关注:前端工程师、Web后端工程师
▐ CSRF攻击
Web安全三板斧之三,攻击示意图如下:
核心思想在于,在打开A网站的情况下,另外打开Tab页面打开恶意网站B,此时在B页面的“唆使”下,浏览器发起一个对网站A的HTTP请求。这个过程的危害在于2点:
1、这个HTTP请求不是用户主动意图,而是B“唆使的”,如果是一个危害较大的请求操作(发邮件?删数据?等等)那就麻烦了
2、因为之前A网站已经打开了,浏览器存有A下发的Cookie或其他用于身份认证的信息,这一次被“唆使”的请求,将会自动带上这些信息,A网站后端分不清楚这是否是用户真实的意愿
重点关注:前端工程师、Web后端工程师
▐ DDoS攻击
DDoS全称Distributed Denial of Service:分布式拒绝服务攻击。是拒绝服务攻击的升级版。拒绝攻击服务顾名思义,让服务不可用。常用于攻击对外提供服务的服务器,像常见的:
- Web服务
- 邮件服务
- DNS服务
- 即时通讯服务
- ……
在早期互联网技术还没有那么发达的时候,发起DoS攻击是一件很容易的事情:一台性能强劲的计算机,写个程序多线程不断向服务器进行请求,服务器应接不暇,最终无法处理正常的请求,对别的正常用户来说,看上去网站貌似无法访问,拒绝服务就是这么个意思。
后来随着技术对发展,现在的服务器早已不是一台服务器那么简单,你访问一个www.baidu.com的域名,背后是数不清的CDN节点,数不清的Web服务器。
这种情况下,还想靠单台计算机去试图让一个网络服务满载,无异于鸡蛋碰石头,对方没趴下,自己先趴下了。
技术从来都是一柄双刃剑,分布式技术既可以用来提供高可用的服务,也能够被攻击方用来进行大规模杀伤性攻击。攻击者不再局限于单台计算机的攻击能力,转而通过成规模的网络集群发起拒绝服务攻击。
拒绝服务攻击实际上是一类技术,根据具体实施手段的不同,又可以进一步细分:
- SYN Flood
- ICMP Flood
- UDP Flood
- ……
防御手段:即便是到现在,面对DDoS也没有100%打包票的防御方法,只能靠一些缓解技术一定层面上减轻攻击的威力。这些技术包括:流量清洗、SYN Cookie等等。
重点关注:运维工程师、安全工程师