前端杀手

xss

XSS攻击者通过畸形的输入,将恶意的js代码插入到了页面中。当其他用户浏览该网页时,恶意的js代码会被执行,从而达到攻击的目的。往往XSS并不需要攻击者去直接攻击受害者的浏览器。攻击者可以利用网站的漏洞,将这一段恶意代码提交。然后,通过网站去传递给受害者,同时窃取受害者的信息等。

XSS攻击发生的根本原因是对用户输入的信任。

首先,作为一个开发者,必须达成的一点共识是所有的用户输入都是不安全的。尤其是类似于XSS这类的注入型漏洞。我们可以通过两个方式对其进行防御——编码和验证。

编码:对于用户的输入而言,所输入的内容只会作为数据,而不是代码。
验证:通过正则表达式等方式,去检查用户的输入中是否带有敏感字符等。
所以,我们的解决方案可以围绕上述两点进行展开:

输入检测

对用户输入的数据进行检测。对于这些代码注入类的漏洞原则上是不相信用户输入的数据的。所以,我们要对用户输入的数据进行一定程度上的过滤,将输入数据中的特殊字符与关键词都过滤掉,并且对输入的长度进行一定的限制。只要开发的人员严格检查每个输入点,对每个输入点的数据进行检测和xss过滤,是可以阻止xss攻击的。

输出编码

通过前面xss的原理分析,我们知道造成xss的还有一个原因是应用程序直接将用户输入的数据嵌入HTML页面中了。如果我们对用户输入的数据进行编码,之后在嵌入页面中,那么html页面会将输入的数据当作是普通的数据进行处理。

Cookie安全

利用xss攻击,我们可以轻易的获取到用户的cookie信息。那么我们需要对用户的cookie进行一定的处理。首先,我们尽可能减少cookie中敏感信息的存储,并且尽量对cookie使用hash算法多次散列存放。合理的使用cookie的httponly的属性值。这样可以防止恶意的js代码对cookie的调用。(如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击。)

禁用脚本

可以在浏览器中进行js的安全设置。类似与chrome等浏览器都会拦截一些危险的xss操作,例如:想要读取cookie时,浏览器会阻止这个操作,征求用户指示,同时提醒用户此类操作的危害性。

CSRF

场景:用户在A页面登陆了银行账号,生成了cookie,在为关闭的情况下打开了钓鱼链接,钓鱼链接发送post请求拿到了cookie进行用户伪装。

CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端 Session 的网站,因为 Session ID 也是大多保存在 cookie 里面的),再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。

CSRF,对于目前而言攻击较少,也是因为对于这方面的防御手段越来越成熟所导致的。下面,我们来看一下如何去防护CSRF的攻击。

预防CSRF攻击

检查HTTP Referer字段

在HTTP的请求头中,有一个Referer字段,用于表示请求来源于哪个地址。上面提到的银行网站,可以在请求到来时,检查Referer字段,如果请求来源地址不在白名单内,就不予回应。

这种方法简单易行,但是也有一定的局限性,比如完全依赖于浏览器发送正确的Referer字段,况且Referer也是很可能被攻击者篡改的。

添加校验TOKEN

其原理是服务器在响应请求时,生成一个csrf-token传递到前台,当前台发起请求时,需要带着这个csrf-token以便于服务器端进行校验。这样一来,由于csrf攻击网站无法获取到这个token,所以也无法通过服务器端的校验。

当前台发起请求时,csrf-token可以通过url参数,或者post的请求体来携带,但是最安全的方式,还是将csrf-token添加到自定义HTTP请求头中(比如X-CSRF-TOKEN)

sql注入

SQL注入漏洞产生的原因是,在动态创建数据库查询语句时直接拼接了未经检查的用户输入数据。

防御和检查SQL注入的手段

使用参数化的过滤性语句

要防御SQL注入,用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。然后,用户输入就被限于一个参数。

ddos

分布式拒绝服务攻击(DDoS)是一种特殊形式的拒绝服务攻击。它是利用多台已经被攻击者所控制的机器对某一台单机发起攻击,在带宽相对的情况下,被攻击的主机很容易失去反应能力。作为一种分布、协作的大规模攻击方式,分布式拒绝服务攻击(DDoS)主要瞄准比较大的站点,像商业公司,搜索引擎和政府部门的站点。由于它通过利用一批受控制的机器向一台机器发起攻击,来势迅猛,而且往往令人难以防备,具有极大的破坏性。

全称是 Distributed Denial of Service,翻译成中文就是分布式拒绝服务。一般来说是指攻击者利用“肉鸡”对目标网站在较短的时间内发起大量请求,大规模消耗目标网站的主机资源,让它无法正常服务。在线游戏、互联网金融等领域是 DDoS 攻击的高发行业。
如何应对 DDoS 攻击?

高防服务器

还是拿我开的重庆火锅店举例,高防服务器就是我给重庆火锅店增加了两名保安,这两名保安可以让保护店铺不受流氓骚扰,并且还会定期在店铺周围巡逻防止流氓骚扰。高防服务器主要是指能独立硬防御 50Gbps 以上的服务器,能够帮助网站拒绝服务攻击,定期扫描网络主节点等,这东西是不错,就是贵~

黑名单

面对火锅店里面的流氓,我一怒之下将他们拍照入档,并禁止他们踏入店铺,但是有的时候遇到长得像的人也会禁止他进入店铺。这个就是设置黑名单,此方法秉承的就是“错杀一千,也不放一百”的原则,会封锁正常流量,影响到正常业务。

DDoS 清洗

DDos 清洗,就是我发现客人进店几分钟以后,但是一直不点餐,我就把他踢出店里。DDoS 清洗会对用户请求数据进行实时监控,及时发现DOS攻击等异常流量,在不影响正常业务开展的情况下清洗掉这些异常流量。

CDN 加速

CDN 加速,我们可以这么理解:为了减少流氓骚扰,我干脆将火锅店开到了线上,承接外卖服务,这样流氓找不到店在哪里,也耍不来流氓了。在现实中,CDN 服务将网站访问流量分配到了各个节点中,这样一方面隐藏网站的真实 IP,另一方面即使遭遇 DDoS 攻击,也可以将流量分散到各个节点中,防止源站崩溃。