Web 安全之 XSS,CSRF,SQL注入,DDoS CC攻击 以及应对

#####如何知道某个网站是否能被sql注入的一种防范 在网上看到一个方法,主要是利用带有查询字符串的url,故意输错一个url中的参数,如果服务器返回的错误结果显示是sql服务器的参数没有被正确编码,则表示这个url是直接触及数据库服务器的,那么就可以进行sql注入了

###防止SQL注入的解决方案 1)对用户的输入进行校验,使用正则表达式过滤传入的参数 2)*使用参数化语句(利用占位符和参数,对在sql中需要填数据的位置进行限定),不要拼接sql,也可以使用安全的存储过程 3)不要使用管理员权限的数据库连接,为每个应用使用权限有限的数据库连接 4)检查数据存储类型 5)重要的信息一定要加密

跨站脚本攻击(XSS,Cross Site Scripting,避免和css重名)

目的: 主要还是窃取用户数据信息或者破坏 例子:比如有个web页面有个对外开放的评论框等 攻击者留言,内容是一段非法js脚本(如果攻击者发现可以运行脚本)那么就会被攻击

防范XSS的常见方案:

输入过滤: 即对用户输入的数据进行过滤操作,过滤其中的“<”,">","/",“”script”等脚本关键字,或者对输入数据长度进行限制等等。着重对与用户交互的每一处都进行检测和xss过滤,以有效的阻止xss攻击 输出编码: 在用户输入数据到web应用程序中时,先对数据进行编码,利用htmlEncoder等工具进行编码,然后再把数据输出到页面中,一般可以把输入编码为普通文字,这样以来脚本语言就不会成为html代码的一部分 Cookie防盗 利用xss,攻击者可以窃取用户的cookie,所以可以对cookie中的重要信息进行MD5加密,以防止xss攻击。

###CSRF 跨站请求伪造(Cross-site request forgery)

举例csrf攻击的具体方法: 假设某游戏网站的虚拟币转账是采用GET方式进行操作的,样式如: http://www.game.com/Transfer.php?toUserId=11&vMoney=1000 此时恶意攻击者的网站也构建一个相似的链接: 1、可以是采用图片隐藏,页面一打开就自动进行访问第三方文章: 2、也可以采用js进行相应的操作 http://www.game.com/Transfer.php?toUserId=20&vMoney=1000 #toUserID为攻击的账号ID  1、假若客户端已经验证并登陆www.game.com网站,此时客户端浏览器保存了游戏网站的验证cookie  2、客户端再tab另一个页面进行访问恶意攻击者的网站,并从恶意攻击者的网站构造的链接来访问游戏网站  3、浏览器将会携带该游戏网站的cookie进行访问,刷一下就没了1000游戏虚拟币 将由链接GET提交数据改成了表单提交数据

//提交数据表单
<form action="./Transfer.php" method="POST">
    <p>toUserId: <input type="text" name="toUserId" /</p>
    <p>vMoney: <input type="text" name="vMoney" /></p>
    <p><input type="submit" value="Transfer" /></p>
</form>

Transfer.php

<?php
2      session_start();
3      if (isset($_REQUEST['toUserId'] && isset($_REQUEST['vMoney']))  #验证
4      {
5           //相应的转账操作
6      }
7  ?>

恶意攻击者将会观察网站的表单形式,并进行相应的测试。 首先恶意攻击者采用(http://www.game.com/Transfer.php?toUserId=20&vMoney=1000)进行测试,发现仍然可以转账。   那么此时游戏网站所做的更改没起到任何的防范作用,恶意攻击者只需要像上面那样进行攻击即可达到目的。   总结:   1、网站开发者的错误点在于没有使用$_POST进行接收数据。当$_REQUEST可以接收POST和GET发来的数据,因此漏洞就产生了。  这一次,游戏网站开发者又再一次认识到了错误,将进行下一步的改进与升级,将采用POST来接收数据

1 <?php
2      session_start();
3      if (isset($_POST['toUserId'] && isset($_POST['vMoney']))  #验证
4      {
5           //相应的转账操作
6      }
7  ?>

  恶意攻击者根据游戏虚拟币转账表单进行伪造了一份一模一样的转账表单,并且嵌入到iframe中 嵌套页面:(用户访问恶意攻击者主机的页面,即tab的新页面)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>攻击者主机页面</title>
    <script type="text/javascript">
    function csrf()
    {
        window.frames['steal'].document.forms[0].submit();
    }
    </script>
</head>
<body onload="csrf()">
<iframe name="steal" display="none" src="./xsrf.html">
</iframe>
</body>
</html>

表单页面:(csrf.html)

<!DOCTYPE html>
<html>
<head>
    <title>csrf</title>
</head>
<body>
<form display="none" action="http://www.game.com/Transfer.php" method="post" >
    <input type="hidden" name="toUserID" value="20">
    <input type="hidden" name="vMoney" value="1000">
</form>
</body>
</html>

所以关键还是要服务器端的防范 防范CSRF的漏洞方式: 1、CSRF Token验证,利用浏览器的同源限制,在HTTP接口执行前验证Cookie中的Token,验证通过才会继续执行请求。 2、在一些关键操作上要求人机交互,例如短信验证码、界面的滑块,防止伪请求 3、将cookie设置为HttpOnly。如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性。 //设置cookie response.addHeader("Set-Cookie", "uid=112; Path=/; HttpOnly") 4.通过refer识别:根据http协议,在http投中有一个字符安叫refer,它记录了该http请求的来源地址

###XSS和CSRF比较 xss是在用户请求到的html中加入恶意代码,使得用户被恶意代码影响 csrf是盗用浏览器中的登录信息,冒充用户去执行操作 xss主要是对用户数据没有进行转义,使得用户数据影响到了项目代码 侧重代码实现 csrf主要是http接口在调用上没有进行防范,对于恶意的调用也给与了授权。 通常利用xss实现csrf,具体而言就是利用xss获得用户的cookie,然后冒充用户进行登录,发起恶意的http请求,比如删帖,改密码等

###Ddos攻击及其CC攻击 #####什么是DDoS攻击和CC攻击? DDoS,又称分布式拒绝服务,信息安全的三要素保密性、完整性和可用性中,DDoS攻击,针对的目标正是“可用性”。该攻击方式迫使服务器的缓冲区满,不接收新的请求,使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接。 常用的DDoS软件有:LOIC

很多人都分不清楚DDoS攻击和CC攻击的区别。CC攻击,即挑战黑洞,CC攻击的原理是通过代理服务器或者大量肉鸡模拟多个用户访问目标网站的动态页面,制造大量的后台数据库查询动作,消耗目标CPU资源,造成拒绝服务。

总之,DDoS攻击打的是网站的服务器,而CC攻击是针对网站的页面攻击的,用术语来说就是,DDoS一个是WEB网络层拒绝服务攻击,CC一个是WEB应用层拒绝服务攻击

#####网站为什么会遭遇DDos攻击或CC攻击? 网站之所以会遭受DDos攻击和CC攻击,主要因素是来自于同行的竞争激烈,一些非法同行采用极端激进的竞争方式,从中获取流量利益。

还有一些小企业网站所用的CDN,性能和带宽一般,加上程序人员的安全意识不高,比如有些网站ping域名的时候,直接暴露网站所在服务器的IP,一旦被攻击方记录IP信息,便会锁定攻击服务器,导致服务器严重受影响。 ######一句话总结:CC攻击和DDOS攻击的主要是针对 WEB 应用程序比较消耗资源的地方进行疯狂请求

#####网站怎们防御DDos攻击和CC攻击呢? 防止ddos:所有的防御措施中硬件安防设施(硬件防火墙)是最有效的,但是硬件防火墙也不是说能杜绝一切攻击,也仅仅能起到降低攻击级别的效果,DDoS攻击只能被减弱,无法被彻底消除。

DDOS攻击不仅能攻击计算机,还能攻击路由器,因为路由器是一台特殊类型的计算机;

网速决定攻击的好和快,比如说,如果你一个被限制网速的环境下,它们的攻击效果不是很明显,但是快的网速相比之下更具有效果

#####如何防范ddos和 cc攻击的方法:

(1).负载均衡 普通级别服务器处理数据的能力最多只能答复每秒数十万个链接请求,网络处理能力很受限制。负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性,CC攻击会使服务器大量的网络传输而过载,所以对DDoS流量攻击和CC攻击都很见效,用户访问速度也会加快。

(2).CDN流量清洗 CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率,因此使用CDN加速也用到了负载均衡技术。相比高防硬件防火墙不可能扛下无限流量的限制,CDN则更加理智,多节点分担渗透流量。

(3)分布式集群防御 分布式集群防御的特点是在每个节点服务器配置多个IP地址,如一个节点受攻击无法提供服务,系统将会根据优先级设置自动切换另一个节点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态,从更为深度的安全防护角度去影响企业的安全执行决策。

(4)过滤不必要的服务和端口 可以使用Inexpress、Express、Forwarding等工具来过滤不必要的服务和端口,即在路由器上过滤假IP。

(5)异常流量的清洗过滤 通过DDoS硬件防火墙对异常流量的清洗过滤,通过数据包的规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等顶尖技术能准确判断外来访问流量是否正常,进一步将异常流量禁止过滤。

(6)高防智能DNS解析 高智能DNS解析系统与DDoS防御系统的完美结合,为企业提供对抗新兴安全威胁的超级检测功能。同时还有宕机检测功能,随时可将瘫痪的服务器IP智能更换成正常服务器IP,为企业的网络保持一个永不宕机的服务状态。

攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃。相比其它的DDoS攻击CC似乎更有技术含量一些。这种攻击你见不到真实源IP,见不到特别大的异常流量,但造成服务器无法进行正常连接。

#####防范CC攻击的方法

(1)、数据缓存(内存级别,不要用文件) 对于服务中具备高度共性,多用户可重用,或单用户多次可重用的数据,一旦从数据库中检索出,或通过计算得出后,最好将其放在缓存中,后续请求均可直接从缓存中取得数据,减轻数据库的检索压力和应用服务器的计算压力,并且能够快速返回结果并释放进程,从而也能缓解服务器的内存压力。要注意的是,缓存不要使用文件形式,可以使用redis、memorycached等基于内存的nosql缓存服务,并且与应用服务器分离,单独部署在局域网内。局域网内的网络IO肯定比起磁盘IO要高。为了不使局域网成为瓶颈,千兆网络也是有必要的。

(2)、页面静态化 与数据缓存一样,页面数据本质上也属于数据,常见的手段是生成静态化的html页面文件,利用客户端浏览器的缓存功能或者服务端的缓存服务,以及CDN节点的缓冲服务,均可以降低服务器端的数据检索和计算压力,快速响应结果并释放连接进程。

(3)、用户级别的调用频率限制 不管服务是有登陆态还是没登陆态,基于session等方式都可以为客户端分配唯一的识别ID(后称作SID),服务端可以将SID存到缓存中。当客户端请求服务时,如果没有带SID(cookie中或请求参数中等),则由服务端快速分配一个并返回。可以的话,本次请求可以不返回数据,或者将分配SID独立出业务服务。当客户端请求时带了合法SID(即SID能在服务端缓存中匹配到),便可以依据SID对客户端进行频率限制。而对于SID非法的请求,则直接拒绝服务。相比根据IP进行的频率限制,根据SID的频率限制更加精准可控,可最大程度地避免误杀隋况。

(4)、IP限制 最后,IP限制依然可以结合上述规则一起使用,但是可以将其前置至)JCb层的防火墙或负载均衡器上去做,并且可以调大限制的阈值,防止恶意访问穿透到应用服务器上,造成应用服务器压力

配置Apache 和 nginx的简单防止cc攻击:

Apache防cc 内置mod_reqtimeout:用户可配置从一个客户端接收HTTP头部和HTTPbody的超时时间和最小速率。如果一个客户端不能在配置时间内发送完头部或body数据,服务器会返回一个408REQUEST TIME OUT错误

//搜索 即可定位
< IfModule mod_reqtimeout.c > .....

mod_security:一个开源的WAF模块,有专门针对慢速攻击防护的规则

SecRule RESPONSE_STATUS “@streq 408” “phase:5,t:none,nolog,pass, setvar:ip.slow_dos_counter=+1, expirevar:ip.slow_dos_counter=60, id:’1234123456′”
SecRule IP:SLOW_DOS_COUNTER “@gt 5” “phase:1,t:none,log,drop,
msg:’Client Connection Dropped due to high number of slow DoS alerts’, id:’1234123457′”

传统的流量清洗设备针对CC攻击,主要通过阈值的方式来进行防护,某一个客户在一定的周期内,请求访问量过大,超过了阈值,清洗设备通过返回验证码或者JS代码的方式。 意思就是,攻击者们使用肉鸡上的DDoS工具模拟大量http request,这种工具一般不会解析服务端返回数据,更不会解析JS之类的代码。 因此当清洗设备截获到HTTP请求时,返回一段特殊JavaScript代码,正常用户的浏览器会处理并正常跳转不影响使用,而攻击程序会攻击到空处。

而且对于慢速攻击来说,通过返回验证码或者JS代码的方式依然能达到部分效果。但是根据慢速攻击的特征,可以辅助以下几种防护方式: 1、周期内统计报文数量。一个TCP连接,HTTP请求的报文中,报文过多或者报文过少都是有问题的,如果一个周期内报文数量非常少,那么它就可能是慢速攻击;如果一个周期内报文数量非常多,那么它就可能是一个CC攻击。 2、限制HTTP请求头的最大许可时间。超过最大许可时间,如果数据还没有传输完成,那么它就有可能是一个慢速攻击。

//nignx 防cc简单实现
http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    server {
        #限制每ip每秒不超过20个请求,漏桶数burst为5
        #brust的意思就是,如果第1秒、2,3,4秒请求为19个,
        #第5秒的请求为25个是被允许的。
        #但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
        #nodelay,如果不设置该选项,严格使用平均速率限制请求数,
        #第1秒25个请求时,5个请求放到第2秒执行,
        #设置nodelay,25个请求将在第1秒执行。
        limit_req   zone=one  burst=1 nodelay;
    }
}

记录你我
请先登录后发表评论
  • latest comments
  • 总共0条评论