web安全

来源:互联网 发布:vuex刷新页面数据丢失 编辑:程序博客网 时间:2024/06/16 19:31

一、CSRF:Cross-site request forgery 跨站请求伪造

简单理解就是攻击者盗用了我们的身份,并以我们的名义发送恶意请求。
要完成一次CSRF攻击,需要完成以下两个步骤:

  1. 登录受信任的网站A,并在本地生成cookie
  2. 在不登出A的情况下,访问危险网站B
  3. 危险网站B中有链接访问网站A

这时当你点击这个链接的时候,就会携带你在A中生成的本地cookie访问网站A,如果攻击者添加了一些操作参数的话就会执行这些操作。原因主要是因为,服务器接收到你的请求后,认为这时一条合法的更新资源的操作,就会立即执行。无论使用post还是get都有可能受到攻击。

不难看出,CSRF 攻击时源于 WEB 的隐式身份验证机制(cookie)!WEB 的身份验证机制虽然可以保证一个请求是来自某个用户的浏览器,但无法保证该请求是经过用户批准发送的。

如何防御CSRF攻击
两方面:服务器端和客户端。现在一般都在服务器端进行。

关键操作只接受 POST 请求
验证码:

CSRF一般都是在用户不知道的情况下发生的,所以如果我们使用验证码,那么每次操作都需要与用户进行互动,从而简单有效的防御了CSRF的攻击。但如果有过多的验证码又会影响用户体验,所以验证码只在一些特殊操作里使用。

检测Referer

常见的互联网页面与页面之间是有联系的,腾讯首页应该不会有通往facebook的链接,如果你在论坛中留言,不管你留言之后重定向到哪里,之前的网址一定保留在新页面的Referer属性中。
通过检测Referer的值,我们就可以判断这个请求是合法的还是非法的,但是问题出在服务器不是任何时候都接收到Referer的值,所以Referer Check一般用于监控CSRF攻击的发生,而不用来抵御攻击。

Token:目前主流的做法是使用 Token 防御 CSRF 攻击

CSRF攻击要成功的条件在于攻击者能够准确的预测所有参数从而构造出合法的请求,所以根据不可预测性原则,我们可以对参数进行加密从而防止CSRF攻击可以保存其原有参数不变,另外添加一个参数 Token,其值是随机的,这样攻击者因为不知道 Token 而无法构造出合法的请求进行攻击,所以我们在构造请求时候只需要保证:

  1. Token 要足够随机,使攻击者无法准确预测
  2. Token 是一次性的,即每次请求成功后要更新 Token,增加预测难度
  3. Token 要主要保密性,敏感操作使用 POST,防止 Token 出现在 URL 中

最后值得注意的是,过滤用户输入的内容不能阻挡CSRF攻击,我们需要做的是过滤请求的来源,因为有些请求是合法的,有些是非法的,所以CSRF防御主要时过滤那些非法伪造的请求来源。

二、XSS攻击

又名CSS:Cross-site Script,跨站脚本攻击,为了和css层叠样式表区分,是web程序中常见的漏洞。

原理时攻击者向有XSS漏洞的网站中输入恶意的HTML代码,当其他用户浏览该网站时候,该HTML代码会自动执行,从而达到攻击的目的,如盗取用户的cookie,破坏页面结构,重定向到其他网站。

例如某个网站评论区没有对输入进行过滤,那么我们可以来一句:

<script>while(true) {    alert('你关不掉我');}</script>

是的,没错,你关不掉我!
由于评论中有js的内容,这时候,如果服务器不对输入的内容进行过滤或者转义掉这些脚本,作为内容发布到页面上,所有访问的用户都会运行这段脚本。

这个还好,就是关不掉我而已。。。如果修改为恶意代码,就可以获取你的cookie或者个其他信息了。

XSS还分类: 持久型 XSS 和非持久性 XSS

  1. 持久型 XSS 就是对客户端攻击的脚本植入到服务器上,从而导致每个正常访问到的用户都会遭到这段 XSS 脚本的攻击。(如上述的留言评论功能)
  2. 非持久型 XSS 是对一个页面的 URL 中的某个参数做文章,把精心构造好的恶意脚本包装在 URL 参数重,再将这个 URL 发布到网上,骗取用户访问,从而进行攻击

非持久性 XSS 的安全威胁比较小,因为只要服务器调整业务代码进行过滤,黑客精心构造的这段 URL 就会瞬间失效了,而相比之下,持久型 XSS 的攻击影响力很大,有时候服务端需要删好几张表,查询很多库才能将恶意代码的数据进行删除。

如何防御XSS攻击?

理论上,网站上所有可输入的地方没有对输入内容进行处理的话,都会存在xss漏洞,漏洞的危险程度取决于代码的威力,攻击代码也不仅限于js,防御xss攻击最简单直接的方法就是过滤用户的输入。

如果不需要用户输入HTML,那么我们就可以对用户的输入进行转义:

<script>window.location.href="http://www.xss.com";</script>

转义后变为:

&lt;script&gt;window.location.href=&quot;http://www.baidu.com&quot;&lt;/script&gt;

现在就是普通文本了,变得无毒无害了,不能执行了。

当我们需要用户输入HTML的时候,我们也需要对用户的输入做更加小心细致的处理。

仅仅粗暴的去掉scropt标签时没有用的,任何一个合法的HTML标签都可以添加onclick等行内的js事件甚至函数。所以,更好的方法可能是,将用户的输入使用HTML解析库进行解析,获取其中的数据,然后根据用户原有的标签属性,重新构建HTML元素树。构建的过程中,所有的标签、属性都只从白名单中拿取。

三、SQL注入攻击

所谓SQL注入,就是通过把SQL命令插入到Web表单的提交或页面请求的查询字符串,最终使得服务器执行恶意的SQL命令。

具体来说,它是利用现有的应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入恶意SQL语句得到一个存在安全漏洞的网站的数据库,而不是按照设计者的意图取执行SQL语句。

防护SQL注入攻击

  1. 输入验证: 永远不要相信用户的输入:对用户的输入进行校验,可以通过正则表达式,或限制长度;对但引号和双“-”进行转换。
  2. 使用参数化的过滤行语句: 永远不要使用动态拼装SQL,可以使用参数化的SQL或者个直接使用存储过程进行数据查询存取。要防御SQL注入,用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。然后,用户输入就被限于一个参数。
  3. 确保数据库安全: 锁定数据库的安全,永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。只给访问数据库的web应用功能所需的最低的权限,撤销不必要的公共许可,使用强大的加密技术来保护敏感数据并维护审查跟踪。如果web应用不需要访问某些表,那么确认它没有访问这些表的权限。如果web应用只需要只读的权限,那么就禁止它对此表的 drop 、insert、update、delete 的权限,并确保数据库打了最新补丁。
  4. 加密处理: 不要把机密信息直接存放,加密或者 hash 掉密码和敏感的信息。例如:将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了“消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。

四、DDOS攻击
分布式拒绝服务攻击:Distributed Denial of Service。指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。
DDOS 攻击利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统无法提供正常的服务。
DDoS 攻击通过大量合法的请求占用大量网络资源,以达到瘫痪网络的目的。 具体有几种形式:

  1. 通过使网络过载来干扰甚至阻断正常的网络通讯
  2. 通过向服务器提交大量请求,使服务器超负荷
  3. 阻断某一用户访问服务器
  4. 阻断某服务与特定系统或个人的通讯

按照TCP/IP协议的层次可将DDOS攻击分为基于ARP的攻击、基于ICMP的攻击、基于IP的攻击、基于UDP的攻击、基于TCP的攻击和基于应用层的攻击。
1、基于ARP
ARP是无连接的协议,当收到攻击者发送来的ARP应答时。它将接收ARP应答包中所提供的信息。更新ARP缓存。因此,含有错误源地址信息的ARP请求和含有错误目标地址信息的ARP应答均会使上层应用忙于处理这种异常而无法响应外来请求,使得目标主机丧失网络通信能力。产生拒绝服务,如ARP重定向攻击。
2、基于ICMP
攻击者向一个子网的广播地址发送多个ICMP Echo请求数据包。并将源地址伪装成想要攻击的目标主机的地址。这样,该子网上的所有主机均对此ICMP Echo请求包作出答复,向被攻击的目标主机发送数据包,使该主机受到攻击,导致网络阻塞。
3、基于IP
TCP/IP中的IP数据包在网络传递时,数据包可以分成更小的片段。到达目的地后再进行合并重装。在实现分段重新组装的进程中存在漏洞,缺乏必要的检查。利用IP报文分片后重组的重叠现象攻击服务器,进而引起服务器内核崩溃。如Teardrop是基于IP的攻击。
4、基于应用层
应用层包括SMTP,HTTP,DNS等各种应用协议。其中SMTP定义了如何在两个主机间传输邮件的过程,基于标准SMTP的邮件服务器,在客户端请求发送邮件时,是不对其身份进行验证的。另外,许多邮件服务器都允许邮件中继。攻击者利用邮件服务器持续不断地向攻击目标发送垃圾邮件,大量侵占服务器资源。

如何抵御DDoS攻击?
关闭不必要的服务
限制同时打开的Syn半连接数目
缩短Syn半连接的time out 时间
及时更新系统补丁

这里具体理解一下SYN攻击。

在三次握手过程中,服务器发送 SYN-ACK 之后,收到客户端的 ACK 之前的 TCP 连接称为半连接(half-open connect)。此时服务器处于 SYN_RCVD 状态。当收到 ACK 后,服务器才能转入 ESTABLISHED 状态.

SYN 攻击指的是,攻击客户端在短时间内伪造大量不存在的 IP 地址,向服务器不断地发送 SYN 包,服务器回复确认包,并等待客户的确认。

由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的 SYN 包将长时间占用未连接队列,正常的 SYN 请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。

检测 SYN 攻击:检测 SYN 攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源 IP 地址是随机的,基本上可以断定这是一次 SYN 攻击。

SYN 攻击防护:

缩短超时(SYN Timeout)时间增加最大半连接数过滤网关防护
0 0
原创粉丝点击