1. 客户端攻击

1.1 跨站脚本攻击(XSS)

跨站脚本攻击(XSS)是客户端脚本安全中的头号大敌。OWASP TOP 10威胁多次把XSS列在榜首。

1.1.1 XSS分类

XSS根据效果的不同可以分成如下几类:

第一种类型:反射型XSS
反射型XSS只是简单地把用户输入的数据“反射”给浏览器。也就是说,黑客往往需要诱使用户“点击”一个恶意链接,才能攻击成功。反射型XSS也叫做“非持久型XSS”(Non-persistent XSS)。

http://www.a.com/test.php?param=<script>alert(/xss/)</script>

第二种类型:存储型XSS
存储型XSS会把用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性。

比较常见的一个场景就是,黑客写下一篇包含有恶意JavaScript代码的博客文章,文章发表后,所有访问该博客文章的用户,都会在他们的浏览器中执行这段恶意的JavaScript代码。黑客把恶意的脚本保存到服务器端,所以这种XSS攻击就叫做“存储型XSS”。

1.1.2 XSS攻击

XSS攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用以完成各种具体功能的恶意脚本,被称为“XSSPayload”。

“Cookie劫持”攻击
一个最常见的XSS Payload,就是通过读取浏览器的Cookie对象,从而发起“Cookie劫持”攻击。

Cookie中一般加密保存了当前用户的登录凭证。Cookie如果丢失,往往意味着用户的登录凭证丢失。换句话说,攻击者可以不通过密码,而直接登录进用户的账户。

“Cookie劫持”并非所有的时候都会有效。有的网站可能会在Set-Cookie时给关键Cookie植入HttpOnly标识;有的网站则可能会把Cookie与客户端IP绑定,从而使得XSS窃取的Cookie失去意义。

构造GET与POST请求
一个网站的应用,只需要接受HTTP协议中的GET或POST请求,即可完成所有操作。对于攻击者来说,仅通过JavaScript,就可以让浏览器发起这两种请求。

通过构造特定的GET与POST请求,攻击者可以做到,比如:删除博客文章、发表评论、读取私密信息等非法操作。

构造GET与POST请求也并非所有时候都有效。比如在提交表单时要求用户输入验证码,那么这种XSS Payload都会失效。

XSS钓鱼
利用JavaScript在当前页面上“画出”一个伪造的登录框,当用户在登录框中输入用户名与密码后,其密码将被发送至黑客的服务器上。

XSS蠕虫
以往的蠕虫是利用服务器端软件漏洞进行传播的。比如2003年的冲击波蠕虫,利用的是Windows的RPC远程溢出漏洞。

在2005年,年仅19岁的Samy Kamkar发起了对MySpace.com的XSS Worm攻击。Samy Kamkar的蠕虫在短短几小时内就感染了100万用户——它在每个用户的自我简介后边加了一句话:“but most of all, Samy is my hero.”(Samy是我的偶像)。这是Web安全史上第一个重量级的XSS Worm,具有里程碑意义。

一般来说,用户之间发生交互行为的页面,如果存在存储型XSS,则比较容易发起XSS Worm攻击。比如,发送站内信、用户留言等页面,都是XSS Worm的高发区,需要重点关注。

而相对的,如果一个页面只能由用户个人查看,比如“用户个人资料设置”页面,因为缺乏用户之间互动的功能,所以即使存在XSS,也不能被用于XSS Worm的传播。

1.1.3 XSS防御

XSS的本质还是一种“HTML注入”,用户的数据被当成了HTML代码一部分来执行,从而混淆了原本的语义,产生了新的语义。

想要根治XSS问题,可以列出所有XSS可能发生的场景,再一一解决。

比如,XSS的利用方式一般是构造一个

常见的防御方法是对使用HtmlEncode/JavascriptEncode/encodeForCSS/URLEncode等函数进行过滤。

1.2 跨站点请求伪造(CSRF)

CSRF的全名是Cross Site Request Forgery,翻译成中文就是跨站点请求伪造。

1.2.1 CSRF攻击

比如:

  1. 攻击者首先在自己的域构造一个页面:http://www.a.com/csrf.html,其内容为: img src=“http://blog.sohu.com/manage/entry.do?m=delete&id=1111”
  2. 攻击者诱使目标用户访问这个页面,就会导致用户删除自己的博客文章。
  3. 试想,如果这张图片展示在某个公共的论坛/博客中,会产生什么效果呢?

这个删除博客文章的请求,是攻击者所伪造的,所以这种攻击就叫做“跨站点请求伪造”。

1.2.2 CSRF防御

验证码

验证码被认为是对抗CSRF攻击最简洁而有效的防御方法。

CSRF攻击的过程,往往是在用户不知情的情况下构造了网络请求。而验证码,则强制用户必须与应用进行交互,才能完成最终请求。因此在通常情况下,验证码能够很好地遏制CSRF攻击。

但是验证码并非万能。很多时候,出于用户体验考虑,网站不能给所有的操作都加上验证码。因此,验证码只能作为防御CSRF的一种辅助手段,而不能作为最主要的解决方案。

Anti CSRF Token

现在业界针对CSRF的防御,一致的做法是使用一个Token。

CSRF为什么能够攻击成功?其本质原因是重要操作的所有参数都是可以被攻击者猜测到的。攻击者只有预测出URL的所有参数与参数值,才能成功地构造一个伪造的请求;反之,攻击者将无法攻击成功。

出于这个原因,可以想到一个解决方案:把参数加密,或者使用一些随机数,从而让攻击者无法猜测到参数值。

http://host/path/manage?username=abc&token=[random]

1.3 点击劫持ClickJacking

1.3.1 ClickJacking攻击

点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

点击劫持攻击与CSRF攻击有异曲同工之妙,都是在用户不知情的情况下诱使用户完成一些动作。但是在CSRF攻击的过程中,如果出现用户交互的页面,则攻击可能会无法顺利完成。与之相反的是,点击劫持没有这个顾虑,它利用的就是与用户产生交互的页面。

ClickJacking相对于XSS与CSRF来说,因为需要诱使用户与页面产生交互行为,因此实施攻击的成本更高,在网络犯罪中比较少见。

1.3.2 ClickJacking防御

针对传统的ClickJacking,一般是通过禁止跨域的iframe来防范。比如frame busting、X-Frame-Options、Content Security Policy等技术。

2. 服务端攻击

2.1 SQL注入

注入攻击的本质,是把用户输入的数据当做代码执行。这里有两个关键条件,第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。

2.1.1 SQL注入攻击

SQL注入

var sql = "select * from order where ship_city='" + ship_city + "'";

变量ShipCity的值由用户提交。
假如用户输入一段有语义的SQL语句,比如:

Beijing';drop table order;

sql语句就变成

select * from order where ship_city='Beijing';drop table order;

盲注(BIind Injection)

比如,一个应用的URL如下:http://newspaper.com/items.php?id=2
对应的sql语句如下:select title, body from items where id= 2
如果攻击者构造如下的条件语句:select title, body from items where id= 2 and 1=1
对比页面返回结果的差异,就可以判断出SQL注入是否存在

2.1.2 SQL注入防御

从防御的角度来看,要做的事情有两件:(1)找到所有的SQL注入漏洞;(2)修补这些漏洞。

一般来说,各种Web语言都实现了一些编码函数,可以帮助对抗SQL注入。

检查输入数据的数据类型,在很大程度上可以对抗SQL注入。比如:限制了输入数据的类型只能为integer

2.2 文件上传漏洞

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。

“文件上传”本身没有问题,但有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

2.2.1 文件上传攻击

上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行;
上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行;
上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。

2.2.2 文件上传防御

  1. 文件上传的目录设置为不可执行
  2. 判断文件类型
  3. 使用随机数改写文件名和文件路径
  4. 单独设置文件服务器的域名

2.3 认证与会话管理

在Web应用中,用户登录之后,服务器端通常会建立一个新的Session以跟踪用户的状态。每个Session对应一个标识符SessionID, SessionID用来标识用户身份,一般是加密保存在Cookie中。

一般来说,Session是有生命周期的,当用户长时间未活动后,或者用户点击退出后,服务器将销毁Session。Session如果一直未能失效,会导致什么问题呢?

Session劫持就是一种通过窃取用户SessionID后,使用该SessionID登录进目标账户的攻击方法,此时攻击者实际上是使用了目标账户的有效Session。如果SessionID是保存在Cookie中的,则这种攻击可以称为Cookie劫持。

常见web攻击方式与防御方法相关推荐

  1. php攻击方式及防御方法,Syn Flood 攻击 及其一般防御方法

    防火墙通知受到Syn Flood攻击,并解释说: A SYN Flood is an attempt to consume memory and resources. A Normal TCP/IP ...

  2. 网络验证常见的攻击方式与防御手段

    目前,各种网络验证系统攻击事件层出不穷,搭过服务器的人可能都知道,DDOS攻击是中小型网络验证服务器的噩梦.基本上一打就死,而防御DDOS攻击的办法也只有一种就是硬抗,普通的DDOS硬防防火墙基本上都 ...

  3. xss攻击突破转义_WEB安全之XSS攻击方式与防御方式

    上一期给大家简单介绍XSS以及其操作,本期将带大家了解XSS比较常见的攻击方式与防御方式,一起去了解一下~ XSS 常见攻击方法 1.绕过 XSS-Filter,利用 <> 标签注入 Ht ...

  4. 网络/Network - 网络安全 - 常见web攻击与防护

    前言 网络世界, 没有所谓的安全, 任何系统都存在漏洞, 只要时间足够以及具备值得被攻破的价值. 就会被攻击. 攻与防之间,本来就没有绝对的安全. 我们能做的就是,尽量提高攻击的成本. 有时有些方案虽 ...

  5. 常见的Web攻击方式及对应防御

    Web攻击 XSS(跨站脚本攻击) CSRF(跨站请求伪造) Http Heads攻击 SQL 注入 DOS攻击(拒绝服务攻击) DDOS攻击 (分布式拒绝服务攻击) XSS(跨站脚本攻击) 简介: ...

  6. 【web常见的攻击方式有哪些?如何防御?】

    一.Web攻击是什么 Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为,比如植入恶意代码,修改网站权限,获取网站用户隐私信息等等 Web应用程序的安全性是任何基于We ...

  7. web常见的攻击方式(WebAttack)及如何防御

    web常见的攻击方式有哪些?如何防御? 面试官:web常见的攻击方式有哪些?如何防御? 一.是什么 Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为 如植入恶意代码, ...

  8. web常见的攻击方式有哪些,以及如何进行防御?

    一.是什么 Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为 如植入恶意代码,修改网站权限,获取网站用户隐私信息等等 Web应用程序的安全性是任何基于Web业务的重要 ...

  9. web常见的攻击方式有哪些?如何防御?

    一.是什么 Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为 如植入恶意代码,修改网站权限,获取网站用户隐私信息等等 Web应用程序的安全性是任何基于Web业务的重要 ...

最新文章

  1. 吴明曦:马斯克的天基互联网与未来6G地基互联网优劣比较分析
  2. 【BZOJ】1681: [Usaco2005 Mar]Checking an Alibi 不在场的证明(spfa)
  3. 疯狂android讲义(kotlin版) 源码 pan_每周一书《疯狂Python讲义》分享
  4. 用JAVASCRIPT实现静态对象、静态方法和静态属性
  5. LinuxWorld 2007:Linux从狂热走向理性
  6. VueI18n的应用
  7. C4.5最新版本Release8与MDL的关系的详细解读
  8. packETH发包工具使用教程
  9. Cocos2D中相关问题提问的几个论坛
  10. html input file name,HTML Input FileUpload name用法及代码示例
  11. php fizz,php 的 FizzBuzzWhizznbsp;nbsp;
  12. 腾讯自己与自己的战争
  13. 力扣题目系列:204. 计数质数
  14. 组概念_【收藏】学习质谱一定要知道的6组概念
  15. 一次性密码本-绝对不会被破译的密码
  16. 基于matlab的qpsk与bpsk信号性能比较仿真,基于matlab的QPSK与BPSK信号性能比较仿真...
  17. 荐书 | 5本数学科普让你不再“畏惧”数学,感受数学的内在美
  18. wifi模块php,什么是Wifi模块 Wifi模块功能有哪些
  19. mysql relay log 查看_mysql relay log和binlog 小结
  20. 【转】达摩祖师《悟性论》

热门文章

  1. ims系统 呈现服务器,基于IMS的呈现服务器的设计与实现
  2. Redis内存回收和持久化策略
  3. 06MySQL基本函数的使用
  4. 工控软件IFIX加入WEB显示图表
  5. pandas添加、修改dataframe中index的列名
  6. pandas忽略行列索引,纵向拼接多个dataframe
  7. 联发科天玑800适配鸿蒙系统,联发科天玑800什么水平
  8. php自动加载原理,php中的自动加载类机制原理
  9. 在html页面中使用模板继承,HTML静态模板的继承
  10. java反射 获取变量值_Java反射:如何获取变量的名称?