你应该了解一些Web攻击 常见的Web攻击方式以及防护方法

首页 » 经验教程 » 你应该了解一些Web攻击 常见的Web攻击方式以及防护方法

你应该了解一些Web攻击 常见的Web攻击方式以及防护方法

跨站脚本攻击(XSS)

跨站脚本攻击(XSS,Cross-site scripting),指攻击者在网页中嵌入恶意脚本程序,是最常见和基本的攻击WEB网站的方法。攻击者在网页上发布包含攻击性代码的数据。当浏览者看到此网页时,特定的脚本就会以浏览者用户的身份和权限来执行。通过XSS可以比较容易地修改用户数据、窃取用户信息,以及造成其它类型的攻击,这个在django中涉及到过。

一般存在于评论区,用户恶意评论。在评论区输入js循环代码打印alert,那么网页在打开的时候就会一直循环的打印,无法正常访问。当然恶意脚本很多,不仅仅是js。XSS攻击的种类很多,但基本上都是通过html标签注入的,所以要解决就是筛选敏感标签。

解决方法

对数据进行筛选或者转义,剔除敏感的标签,禁止script标签


跨站请求伪造攻击(CSRF)

跨站请求伪造(CSRF,Cross-site request forgery)是另一种常见POST请求攻击。攻击者通过各种方法伪造一个请求,模仿用户提交表单的行为,从而达到修改用户的数据。或者执行特定任务的目的。为了假冒用户的身份,CSRF攻击常常和XSS攻击配合起来做,但也可以通过其它手段,例如诱使用户点击一个包含攻击的链接

进行跨站攻击,必须满足三个条件:

  • 相关操作-攻击者应该能够诱导用户操作某些动作,比如修改密码等。
  • 基于cookie的会话处理-执行跨站伪造需要发出一个或者多个http请求,并且该请求是通过cookie来标志用户的。
  • 请求参数固定-跨站请求不能包含无法确定或者猜测的其它参数。例如,如果修改密码需要当前密码的值,那么攻击者就无法进行攻击。

解决办法

1、采用POST请求(后端也设置成只能post请求),增加攻击的难度.用户点击一个链接就可以发起GET类型的请求。而POST请求相对比较难,攻击者往往需要借助javascript才能实现

2、之所以被攻击是因为攻击者利用了存储在浏览器用于用户认证的cookie,那么如果我们不用cookie来验证不就可以预防了。所以我们可以采用token(不存储于浏览器)认证,就像django一样


DDOS攻击

分布式拒绝服务攻击(Distributed Denial of Service),简单说就是发送大量请求是使服务器瘫痪。DDos攻击是在DOS攻击基础上的,可以通俗理解,dos是单挑,而ddos是群殴,因为现代技术的发展,dos攻击的杀伤力降低,所以出现了DDOS,攻击者借助公共网络,将大数量的计算机设备联合起来,向一个或多个目标进行攻击。

简单说一下tcp三次握手,就是我们浏览网页进行的数据传递过程。客户端先服务器发出请求,请求建立连接,然后服务器返回一个报文,表明请求以被接受,然后客户端也会返回一个报文,最后建立连接。那么如果有这么一种情况,攻击者伪造ip地址,发出报文给服务器请求连接,这个时候服务器接受到了,根据tcp三次握手的规则,服务器也要回应一个报文,可是这个ip是伪造的,报文回应给谁呢,第二次握手出现错误,第三次自然也就不能顺利进行了,这个时候服务器收不到第三次握手时客户端发出的报文,又再重复第二次握手的操作。如果攻击者伪造了大量的ip地址并发出请求,这个时候服务器将维护一个非常大的半连接等待列表,占用了大量的资源,最后服务器瘫痪。

解决办法

1、最直接的方法增加带宽。但是攻击者用各地的电脑进行攻击,他的带宽不会耗费很多钱,但对于服务器来说,带宽非常昂贵。

2、云服务提供商有自己的一套完整DDoS解决方案,并且能提供丰富的带宽资源,有钱可以解决很多难题!


Http Heads攻击

凡是用浏览器查看任何WEB网站,无论你的WEB网站采用何种技术和框架,都用到了HTTP协议。HTTP协议在Response header和content之间,有一个空行,即两组CRLF(0x0D 0A)字符。这个空行标志着headers的结束和content的开始。“聪明”的攻击者可以利用这一点。只要攻击者有办法将任意字符“注入”到 headers中,这种攻击就可以发生

以登陆为例:有这样一个url:http://localhost/login?page=http%3A%2F%2Flocalhost%2Findex,当登录成功以后,需要重定向回page参数所指定的页面。下面是重定向发生时的response headers.

HTTP/1.1 302 Moved Temporarily
Date: Tue, 17 Aug 2010 20:00:29 GMT
Server: Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
Location: http://localhost/index

假如把URL修改一下,变成这个样子:http://localhost/loginpage=http%3A%2F%2Flocalhost%2Fcheckout%0D%0A%0D%0A%3Cscript%3Ealert%28%27hello%27%29%3C%2Fscript%3E

那么重定向发生时的reponse会变成下面的样子:

HTTP/1.1 302 Moved Temporarily
Date: Tue, 17 Aug 2010 20:00:29 GMT
   Server: Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
   Location: http://localhost/checkout<CRLF>
   <CRLF>
   <script>alert('hello')</script>

这个页面可能会意外地执行隐藏在URL中的javascript。类似的情况不仅发生在重定向(Location header)上,也有可能发生在其它headers中,如Set-Cookie header。这种攻击如果成功的话,可以做很多事,例如:执行脚本、设置额外的cookie(Set-Cookie: evil=value)等。

解决办法

过滤所有的response headers,除去header中出现的非法字符,尤其是CRLF。服务器一般会限制request headers的大小。例如Apache server默认限制request header为8K。如果超过8K,Aapche Server将会返回400 Bad Request响应

对于大多数情况,8K是足够大的。假设应用程序把用户输入的某内容保存在cookie中,就有可能超过8K.攻击者把超过8k的header链接发给受害者,就会被服务器拒绝访问.解决办法就是检查cookie的大小,限制新cookie的总大写,减少因header过大而产生的拒绝访问攻击


SQL注入

通过sql命令伪装成正常的http请求参数,传递到服务器端,服务器执行sql命令造成对数据库进行攻击,简单来说就是拼接sql命令来实现注入。

‘ or ‘1’= ‘1,这是最常见的sql注入攻击,你可能觉得这啥呐,但是当我们输如用户名 eyujun ,然后密码输如’ or ‘1’= ‘1的时候,后台会查询用户名和密码是否正确的时候,本来要执行的是select * from user where username=” and password=”,经过参数拼接后,会执行sql语句 select * from user where username=’eyujun’ and password=” or ‘1’= ‘1’,这个时候1=1是成立,自然就跳过验证了。

但是如果再严重一点,密码输如的是‘;drop table user;–,那么sql命令为select * from user where username=” and password=”;drop table user;’ 这个时候我们就直接把这个表给删除了.

解决办法

在java中,我们可以使用预编译语句(PreparedStatement),这样的话即使我们使用sql语句伪造成参数,到了服务端的时候,这个伪造sql语句的参数也只是简单的字符,并不能起到攻击的作用。

很多orm框架已经可以对参数进行转义

做最坏的打算,即使被’拖库‘(‘脱裤,数据库泄露’)。数据库中密码不应明文存储的,可以对密码使用md5进行加密,为了加大破解成本,所以可以采用加盐的(数据库存储用户名,盐(随机字符长),md5后的密文)方式。

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《你应该了解一些Web攻击 常见的Web攻击方式以及防护方法》 发布于2020-05-03

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

3 + 5 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册