课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网技术的不断发展,程序员除了需要了解不同网站的开发技术以外,对于一些常见的web攻击手段也应该知道如何预防。下面我们给大家分享了四种比较常见的web网页攻击方法,一起来看下吧。
XSS
什么是XSS
XSS攻击:跨站脚本攻击(Cross-SiteScripting),为了不和层叠样式表(CascadingStyleSheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。XSS是一种常见的web安全漏洞,它允许攻击者将恶意代码植入到提供给其它用户使用的页面中。不同于大多数攻击(一般只涉及攻击者和受害者),XSS涉及到三方,即攻击者、客户端与Web应用。XSS的攻击目标是为了盗取存储在客户端的cookie或者其他网站用于识别客户端身份的敏感信息。一旦获取到合法用户的信息后,攻击者甚至可以假冒合法用户与网站进行交互。
XSS通常可以分为两大类:
存储型XSS,主要出现在让用户输入数据,供其他浏览此页的用户进行查看的地方,包括留言、评论、博客日志和各类表单等。应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面时就可能受到攻击。这个流程简单可以描述为:恶意用户的Html输入Web程序->进入数据库->Web程序->用户浏览器。
反射型XSS,主要做法是将脚本代码加入URL地址的请求参数里,请求参数进入程序后在页面直接输出,用户点击类似的恶意链接就可能受到攻击。
比如说我写了一个网站,然后攻击者在上面发布了一个文章,内容是这样的,如果我没有对他的内容进行处理,直接存储到数据库,那么下一次当其他用户访问他的这篇文章的时候,服务器从数据库读取后然后响应给客户端,浏览器执行了这段脚本,就会将cookie展现出来,这就是典型的存储型XSS。
如何预防XSS
答案很简单,坚决不要相信用户的任何输入,并过滤掉输入中的所有特殊字符。这样就能消灭绝大部分的XSS攻击。
目前防御XSS主要有如下几种方式:
过滤特殊字符
避免XSS的方法之一主要是将用户所提供的内容进行过滤
SQL注入
什么是SQL注入
攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。
举例:'OR'1'='1
这是常见的SQL注入攻击,当我们输如用户名admin,然后密码输如'OR'1'=1='1的时候,我们在查询用户名和密码是否正确的时候,本来要执行的是SELECT*FROMuserWHEREusername=''andpassword='',经过参数拼接后,会执行SQL语句SELECT*FROMuserWHEREusername=''andpassword=''OR'1'='1',这个时候1=1是成立,自然就跳过验证了。
如何预防SQL注入
在Java中,我们可以使用预编译语句(PreparedStatement),这样的话即使我们使用SQL语句伪造成参数,到了服务端的时候,这个伪造SQL语句的参数也只是简单的字符,并不能起到攻击的作用。
对进入数据库的特殊字符('"尖括号&*;等)进行转义处理,或编码转换。
在应用发布之前建议使用专业的SQL注入检测工具进行检测,以及时修补被发现的SQL注入漏洞。网上有很多这方面的开源工具,例如sqlmap、SQLninja等。
避免网站打印出SQL错误信息,比如类型错误、字段不匹配等,把代码里的SQL语句暴露出来,以防止攻击者利用这些错误信息进行SQL注入。
DDOS
什么是DDOS
DDOS:分布式拒绝服务攻击(DistributedDenialofService),简单说就是发送大量请求是使服务器瘫痪。DDos攻击是在DOS攻击基础上的,可以通俗理解,dos是单挑,而ddos是群殴,因为现代技术的发展,dos攻击的杀伤力降低,所以出现了DDOS,攻击者借助公共网络,将大数量的计算机设备联合起来,向一个或多个目标进行攻击。
在技术角度上,DDoS攻击可以针对网络通讯协议的各层,手段大致有:TCP类的SYNFlood、ACKFlood,UDP类的Fraggle、Trinoo,DNSQueryFlood,ICMPFlood,Slowloris类等等。一般会根据攻击目标的情况,针对性的把技术手法混合,以达到低的成本难防御的目的,并且可以进行合理的节奏控制,以及隐藏保护攻击资源。
下面介绍一下TCP协议中的SYN攻击。
SYN攻击
在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-openconnect)。此时服务器处于SYN_RCVD状态。当收到ACK后,服务器才能转入ESTABLISHED状态.
SYN攻击指的是,攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认。由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。
如何预防DDOS
阿里巴巴的安全团队在实战中发现,DDoS防御产品的核心是检测技术和清洗技术。检测技术就是检测网站是否正在遭受DDoS攻击,而清洗技术就是清洗掉异常流量。而检测技术的核心在于对业务深刻的理解,才能快速精确判断出是否真的发生了DDoS攻击。清洗技术对检测来讲,不同的业务场景下要求的粒度不一样。
CSRF
什么是CSRF
CSRF(Cross-siterequestforgery),中文名称:跨站请求伪造,也被称为:oneclickattack/sessionriding,缩写为:CSRF/XSRF。
你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
如何预防CSRF攻击
简单来说,CSRF就是网站A对用户建立信任关系后,在网站B上利用这种信任关系,跨站点向网站A发起一些伪造的用户操作请求,以达到攻击的目的。
而之所以可以完成攻击是因为B向A发起攻击的时候会把A网站的cookie带给A网站,也就是说cookie已经不安全了。
通过SynchronizerTokens
SynchronizerTokens:在表单里隐藏一个随机变化的csrf_tokencsrf_token提交到后台进行验证,如果验证通过则可以继续执行操作。这种情况有效的主要原因是网站B拿不到网站A表单里的csrf_token
这种方式的使用条件是PHP和JSP等。因为cookie已经不安全了,因此把csrf_token值存储在session中,然后每次表单提交时都从session取出来放到form表单的隐藏域中,这样B网站不可以得到这个存储到session中的值。
下面是JSP的:
但是我现在的情况是html,不是JSP,并不能动态的从session中取出csrf_token值。只能采用加密的方式了。
Hash加密cookie中csrf_token值
这可能是简单的解决方案了,因为攻击者不能获得三方的Cookie(理论上),所以表单中的数据也就构造失败了。
我采用的hash加密方法是JS实现Java的HashCode方法,得到hash值,这个比较简单。也可以采用其他的hash算法。
前端向后台传递hash之后的csrf_token值和cookie中的csrf_token值,后台拿到cookie中的csrf_token值后得到hashCode值然后与前端传过来的值进行比较,一样则通过。
总结
上面一共提到了4种攻击方式,分别是XSS攻击(关键是脚本,利用恶意脚本发起攻击),SQL注入(关键是通过用SQL语句伪造参数发出攻击),DDOS攻击(关键是发出大量请求,后令服务器崩溃),CSRF攻击(关键是借助本地cookie进行认证,伪造发送请求)。
作者:润玉秦涵
来源:百家号
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。