OWASP top10漏洞原理及防御(2017版官方)_owasp top 10 2017-程序员宅基地

技术标签: 安全漏洞  网络与安全  网络安全  


本文转载出处在文末表明,同时附上网上OWASP TOP 10的官方电子书 pdf 地址
OWASP Top 10 - 2017

一、OWASP top 10简介

1.OWASP介绍
OWASP:开放式Web应用程序安全项目(Open Web Application Security Project),OWASP是一家国际性组织机构,并且是一个开放的、非盈利组织,它致力于协助政府、企业开发、升级各类应用程序以保证其可信任性。所有OWASP的工具、文档、研讨以及所有分会都对任何就应用安全领域感兴趣的人士自由开放。
不过OWASP每四年发布一次,现在最新的OWASP是2017年的,在2021年会更新最新的OWASP top 10。

2.2017版的OWASP top 10
在这里插入图片描述

二、OWASP top 10详解

A1:2017-注入

1.注入攻击概念
注入攻击是指攻击者在输入数据时向解释器提交一些非法或者未授权的命令来欺骗解释权,使解释器错误的执行了这些代码,向攻击者返回一些本不应该被看见的数据。

2.常见注入分类
最常见的注入有SQL注入和命令执行。

  • SQL注入

(1):SQL注入介绍
SQL注入就是指Web应用程序对用户输入的数据的合法性没有进行判断,前端传入后端的参数使攻击者可控的,并且参数中带有数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作。

(2):SQL注入原理
SQL注入漏洞产生需要以下两个条件:

  • 参数是用户可控的:前端传给后端的参数内容是用户可以控制的
  • 参数带入数据库查询:传入的参数可以带入数据库中查询

如果满足以上两个条件,那么攻击者就可以在前端页面中通过SQL语句拼接,将自己想要查询的SQL语句拼接到合法参数后面,这样就就可以通过构造非法的SQL语句来对数据库进行增删改查等操作。

(3):SQL注入的防御方法

  • ①:过滤危险字符:现在很多CMS都采用过滤危险字符的方法,比如使用正则表达式匹配union、sleep、select等关键字,如果匹配到,那么就退出程序。(也可以使用PHP中mysql_real_escape_string()函数过滤一些特殊字符)
  • ②:采用PDO预编译技术:
    在使用PDO技术访问数据库时,真正的real prepared statements默认是不使用的,因此使用"setAttribute(PDO::ATTR_EMULATE_PREPARES, false);"这一句来禁掉模拟预处理语句,使用真正的预编译。
    在这里插入图片描述

为什么预编译可以防止SQL注入?
使用如上代码进行分析,当调用prepare()函数时,查询语句"select * from test where name = ? and password = ?“已经发送给了数据库,此时只有占位符”?"发送过去,并没有发送用户提交的数据;当调用到execute()函数时,用户提交的值才会传送给数据库,他们是分开传送的,两者是独立的。因此后面你输入的参数,无论你输入的是什么,都不会影响该sql语句的语法结构了,因为语法分析已经完成了,那么后面输入的参数,就绝对不可能作为sql命令来执行的,只会被当做字符串字面值参数来处理。
PDO不能防御以下三种SQL注入:

  • 你不能让占位符?代替一组值:select * from users where user_id IN (?);
  • 你不能让占位符?代替数据库表名和列名:select * from users order by ?;
  • 你不能让占位符?代替任何其他SQL语句:select extract ( ? from datetime_column) as variable_datetime_element from users;
  • OS注入

(1):OS注入介绍
OS指令执行是为了通过网络接口在web服务器执行OS命令的一种技术。如果应用程序使用外部输入的字符串或受外部影响的字符串组装命令,并且没有经过正确的过滤,就可能导致OS命令的注入攻击。

(2):OS注入原理
OS注入的原理就是程序开发者对输入的数据没有进行任何过滤,攻击者在前端可以在正确输入的命令后面拼接自己想要执行的命令。如果没有对&、&&、|、||等拼接字符进行过滤,那么就会造成命令注入,这样攻击者就可以使用拼接的命令来查看各种信息,甚至执行反弹shell拿到shell。

(3):OS注入的防御方法
①:过滤&、&&、|、||等字符,最好使用白名单过滤方法
②:不止在前端进行验证,还可以在服务器端再进行一次验证
③:要用最小权限去运行程序,不要给予程序多余的权限
④:在命令执行错误时不要显示过多的细节,这样攻击者就不能通过错误提示得到更多的信息

A2:2017-失效的身份认证

1.身份认证和会话管理的定义
身份认证:身份认证最常用于系统登录,形式一般为用户名加密码的登录方式,在安全性要求较高的情况下,还有验证码、客户端证书、Ukey等。
会话管理:HTTP利用会话机制来实现身份认证,HTTP身份认证的结果往往是获得一个令牌并放在cookie中,之后的身份识别只需读取授权令牌,如果授权令牌认证成功,那么就无需再次进行登录认证。

2.什么是失效的身份认证和会话管理
用户身份认证和会话管理是一个应用程序中最关键的过程,有缺陷的设计会严重破坏这个过程。在开发Web应用程序时,开发人员往往只关注Web应用程序所需的功能。由于这个原因,开发人员通常会建立自定义的认证和会话管理方案。但要正确实现这些方案却很难,结果这些自定义的方案往往在如下方面存在漏洞:退出、密码管理、超时、记住我、秘密问题、帐户更新等等。因此攻击者就可以通过破坏密码、密钥、会话令牌或攻击其他的漏洞去冒充其他用户的身份,这种身份的冒充可能是暂时的,也可能是永久的。

3.存在失效身份认证和会话管理的漏洞例子
(1):用户更改密码之前不验证用户,而是依靠会话的IP地址
(2):没有会话超时限制
(3):用户忘记密码后,密码找回功能太过简单。

4.防御失效身份和会话管理的方法
(1):区分公共区域和受限区域:站点的公共区域允许匿名用户访问,但是站点的受限区域只允许指定用户访问
(2):支持密码的有效期:向用户提供可以在一段时间后修改密码的功能
(3):能够禁用账户:在收到攻击后可以禁用账户来避免遭受进一步的损失
(4):要求用户使用强密码
(5):不要在网络上以纯文本方式传输用户名和密码:使用SSL对数据流进行加密,也可以对cookie进行加密

A3:2017-敏感数据泄露

1.敏感数据泄露介绍
近年来,敏感数据泄露已经成为了一最常见、最具影响力的攻击,不久前就爆出过Facebook泄露了用户的大量信息,以及12306也多次泄露用户的信息。现在信息泄露已经成为了owasp top 10中排名第三的漏洞,可想而知敏感信息泄露现在已经成为十分严重的问题。

2.敏感信息泄露原理
攻击者不是直接攻击密码,而是在传输过程中或从客户端窃取密钥、发起中间人攻击,或从服务器端窃取明文数据,还有可能由于管理员的安全性不高,使用弱密码,被攻击者暴力破解,进入到数据库拿到敏感信息。

3.防御敏感信息泄露的方法
(1):对系统处理、存储或传输的数据分类,并根据分类进行访问控制
(2):对重要数据进行加密存放,数据在传输过程中使用密文进行传输
(3):及时清理没有用的敏感数据,只能使用指定用户访问敏感数据

A4:2017-XML外部实体(XXE)

1.XXE介绍
XXE(XML External Entity)指的是XML外部实体注入,XML用于标识电子文件使其具有结构性的标识语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声名、DTD文档类型定义、文档元素。

2.XXE攻击原理
如果攻击者可以上传XML文档或者在XML文档中添加恶意内容,通过易受攻击的代码、依赖项或集成,他们就能够攻击含有缺陷的XML处理器。XXE缺陷可用于提取数据、执行远程服务器请求、扫描内部系统、执行拒绝服务攻击和其他攻击。

3.防御XXE的方法
(1):尽可能使用简单的数据格式(如:JSON),避免对敏感数据进行序列化
(2):禁止使用外部实体,例如libxml_disable_entity_loader(true)
(3):过滤用户提交的XML数据,防止出现非法内容

A5:2017-失效的访问控制

1.什么是失效的访问控制
访问控制:即保护资源不被非法访问和使用,目前应用最多的是基于角色的访问控制机制。失效的访问控制就是攻击者通过各种手段提升自己的权限,越过访问控制,使访问控制失效,这样攻击者就可以冒充用户、管理员或拥有特权的用户,或者创建、访问、更新或删除任何记录。

2.失效的访问控制攻击原理
(1):攻击者通过修改 URL、内部应用程序状态或 HTML 页面绕过访问控制检查,或简单地使用自定义的 API 攻击工具
(2):特权提升:在不登录的情况下假扮用户,或以用户身份登录时充当管理员
(3):元数据操作:如重放或篡改 JWT 访问控制令牌,以此来修改cookie提升权限

3.防御失效的访问控制的方法
(1):除公有资源外,其他资源默认情况下拒绝访问
(2):使用一次性的访问控制机制,并在整个应用程序中不断重用它们
(3):建立访问控制模型以强制执行所有权记录,而不是接受用户创建、读取、更新或删除的任何记录
(4):当用户注销后,服务器上的JWT令牌应失效

A6:2017-安全配置错误

1.安全配置介绍
由于系统管理员的疏忽,可能会产生一些安全配置错误。安全配置错误可以发生在一个应用程序堆栈的任何层面,包括网络服务、平台、Web服务器、应用服务器、数据库、框架、自定义代码和预安装的虚拟机、容器和存储。可以使用自动扫描器来检测错误的安全配置、默认帐户的使用或配置、不必要的服务、遗留选项等。

2.安全配置错误攻击原理
攻击者能够通过未修复的漏洞、访问默认账户、不再使用的页面、未受保护的文件和目录、开放的不必要的端口等来取得对系统的未授权的访问,比如如果由于管理员的疏忽,/etc/passwd文件具有777的访问权限,这样攻击者就可以在拿到普通用户的身份后通过修改该文件拿到root权限。

3.防御安全配置错误的方法
(1):使用的服务不包含任何不必要的功能、组件、文档和示例。移除或不安装不适用的功能和框架
(2):及时检测系统服务版本,为已发现的漏洞打补丁
(3):在对文件等分配权限时,根据其工作需要采取最小权限原则的方法

A7:2017-跨站脚本(XSS)

1.XSS介绍
XSS(Cross-Site Scripting,实际上应该是CSS,但是这与前端中的CSS重名,因此改名为XSS)简称为跨站脚本攻击,这是一种针对网站的应用程序的安全漏洞攻击技术,是代码注入的一种。它允许用户将恶意代码注入网页,其他用户在访问时就会收到影响。恶意用户利用XSS代码攻击成功后,可以进行重定向、获取cookie值等内容。

2.XSS分类
XSS分为三类:反射型XSS、存储型XSS、DOM型XSS

3.XSS原理
(1):反射型XSS原理
反射型XSS又称为非持久型XSS,这种攻击方式往往具有一次性。
攻击原理:攻击者向服务器一个带有恶意JS代码的请求,服务器会向攻击者返回一个带有JS脚本的页面,攻击者将带有恶意JS脚本的页面发送给目标用户,用户点击后就会触发XSS漏洞,从而被盗取cookie值或者被重定向到第三方网站。
(2):存储型XSS
存储型XSS又称为持久性XSS,攻击脚本将被永久地存放到目标服务器的数据库或者文件中,具有很高的隐蔽性。
攻击原理:攻击者向服务器一个带有恶意JS代码的请求,服务器会先在服务器上存储一份,然后会向攻击者返回一个带有JS脚本的页面。此时,当其他用户登录这个网站时,都会被盗取cookie值或者被重定向到第三方网站。
(3):DOM型XSS
DOM全称Document Object Model,DOM型XSS实际上是一种特殊类型的反射型XSS,它是一种基于DOM文档对象模型的一种漏洞
攻击原理:攻击者向服务器一个带有恶意JS代码的请求,服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。

4.防御XSS的方法
(1):对于截取cookie的XSS的防御可以在cookie上添加HttpOnly
(2):过滤输入的数据,过滤"

A8:2017-不安全的反序列化

1.什么是序列化
有些时候我们需要把应用程序中的数据以另一种形式进行表达,以便于将数据存储起来,并在未来某个时间点再次使用,或者便于通过网络传输给接收方。这一过程我们把它叫做序列化。

2.什么是反序列化
反序列化和序列化是两个正好相反的过程。当我们要再次使用这些数据的时候,应用程序读取序列化之后的数据,并将其恢复成应用程序中的数据。

3.反序列化有什么安全问题
尽管反序列化最严重可导致远程代码执行(RCE,Remote Code Execution),但最常见的反序列化安全问题却是通过修改序列化之后的数据字段,从而进行提权或越权操作。

4.反序列化攻击原理
序列化即是把对象转变为字节流,存放在内存、文件数据库中,而反序列化即是把字节流转变为对象。在java中有一个ObjectOutputStream类的writeobject方法可以实现序列化,而ObjectInputStream类的Readobject方法可以实现反序列化。该漏洞的原因出自于如果应用对恶意构造的用户输入的数据进行反序列化,这样就会产生非预期的对象,从而有可能产生远程代码执行。或者应用中存在可以在反序列化过程中或者之后被改变行为的类,则攻击者可以通过改变应用逻辑或者实现远程代码执行攻击。我们将其称为对象和数据结构攻击。

5.防御反序列化的方法
(1):最安全的方法是不接受来自不受信源的序列化对象,或使用只允许原始数据类型的序列化媒体
(2):反序列化之前,先进行严格的数据类型校验。由于校验规则容易被攻击者探索出来,进而容易被绕过,因此防御不能仅依赖这一个手段,但可以作为完整性校验防御方案的补充
(3):隔离运行那些在低特权环境中反序列化的代码
(4):对反序列化过程进行详尽的日志记录,监控反序列化过程,在发现疑似反序列化攻击时进行警报

A9:2017-使用含有已知漏洞的组件

1.攻击原理
由于现在的服务器都需要使用很多的组件,管理员并不能保证所使用的组件都是没有最新的,因此可能会存在一些版本是存在已知漏洞的(实际上比较新的版本的组件也是会存在漏洞的),攻击者可以使用这些已知的漏洞来进行攻击,甚至获得管理员权限。

2.防御方法
(1):移除不使用的依赖、不需要的功能、组件、文件和文档
(2):从官方渠道安全的获取组件,并使用签名机制来降低组件被篡改或加入恶意漏洞的风险
(3):关注最新的漏洞报告,及时为需要的组件进行升级或者打补丁

A10:2017-不足的日志记录和监控

1.日志记录介绍
日志记录是一个系统的最重要的功能之一。日志记录包括登录成功记录、登录失败记录、访问控制记录等,用来记录服务器的各种信息。

2.攻击原理
攻击者依靠监控的不足和响应的不及时来达成他们的目标而不被知晓。比如日志没有记录登录失败,那么攻击者可能就可以通过暴力破解多次进行登录尝试,但是日志中却没有记录。这就可能让攻击者成功入侵系统并隐匿自己的行踪。这个看似危害不大但却是十分严重的危害,因为一个日志系统不完善的服务器很容易遭受攻击并且在遭受攻击后无法判断攻击来源,这样就无法做出相应的防御,很可能再次遭受同样的攻击。

3.防御方法
(1):确保所有登录、访问控制失败、输入验证失败能够被记录到日志中去,并保留足够的用户上下文信息,以识别可疑或恶意帐户,并为后期取证预留足够时间
(2):建立有效的监控和告警机制,使可疑活动在可接受的时间内被发现和应对
(3):完善日志系统,使其可以监控各种日志信息
(4):及时对日志系统进行备份,并保存足够长时间


本文转载自OWASP top 10漏洞原理及防御(2017版官方)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/e_mmm0629/article/details/114136462

智能推荐

hive使用适用场景_大数据入门:Hive应用场景-程序员宅基地

文章浏览阅读5.8k次。在大数据的发展当中,大数据技术生态的组件,也在不断地拓展开来,而其中的Hive组件,作为Hadoop的数据仓库工具,可以实现对Hadoop集群当中的大规模数据进行相应的数据处理。今天我们的大数据入门分享,就主要来讲讲,Hive应用场景。关于Hive,首先需要明确的一点就是,Hive并非数据库,Hive所提供的数据存储、查询和分析功能,本质上来说,并非传统数据库所提供的存储、查询、分析功能。Hive..._hive应用场景

zblog采集-织梦全自动采集插件-织梦免费采集插件_zblog 网页采集插件-程序员宅基地

文章浏览阅读496次。Zblog是由Zblog开发团队开发的一款小巧而强大的基于Asp和PHP平台的开源程序,但是插件市场上的Zblog采集插件,没有一款能打的,要么就是没有SEO文章内容处理,要么就是功能单一。很少有适合SEO站长的Zblog采集。人们都知道Zblog采集接口都是对Zblog采集不熟悉的人做的,很多人采取模拟登陆的方法进行发布文章,也有很多人直接操作数据库发布文章,然而这些都或多或少的产生各种问题,发布速度慢、文章内容未经严格过滤,导致安全性问题、不能发Tag、不能自动创建分类等。但是使用Zblog采._zblog 网页采集插件

Flink学习四:提交Flink运行job_flink定时运行job-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏2次。restUI页面提交1.1 添加上传jar包1.2 提交任务job1.3 查看提交的任务2. 命令行提交./flink-1.9.3/bin/flink run -c com.qu.wc.StreamWordCount -p 2 FlinkTutorial-1.0-SNAPSHOT.jar3. 命令行查看正在运行的job./flink-1.9.3/bin/flink list4. 命令行查看所有job./flink-1.9.3/bin/flink list --all._flink定时运行job

STM32-LED闪烁项目总结_嵌入式stm32闪烁led实验总结-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏6次。这个项目是基于STM32的LED闪烁项目,主要目的是让学习者熟悉STM32的基本操作和编程方法。在这个项目中,我们将使用STM32作为控制器,通过对GPIO口的控制实现LED灯的闪烁。这个STM32 LED闪烁的项目是一个非常简单的入门项目,但它可以帮助学习者熟悉STM32的编程方法和GPIO口的使用。在这个项目中,我们通过对GPIO口的控制实现了LED灯的闪烁。LED闪烁是STM32入门课程的基础操作之一,它旨在教学生如何使用STM32开发板控制LED灯的闪烁。_嵌入式stm32闪烁led实验总结

Debezium安装部署和将服务托管到systemctl-程序员宅基地

文章浏览阅读63次。本文介绍了安装和部署Debezium的详细步骤,并演示了如何将Debezium服务托管到systemctl以进行方便的管理。本文将详细介绍如何安装和部署Debezium,并将其服务托管到systemctl。解压缩后,将得到一个名为"debezium"的目录,其中包含Debezium的二进制文件和其他必要的资源。注意替换"ExecStart"中的"/path/to/debezium"为实际的Debezium目录路径。接下来,需要下载Debezium的压缩包,并将其解压到所需的目录。

Android 控制屏幕唤醒常亮或熄灭_android实现拿起手机亮屏-程序员宅基地

文章浏览阅读4.4k次。需求:在诗词曲文项目中,诗词整篇朗读的时候,文章没有读完会因为屏幕熄灭停止朗读。要求:在文章没有朗读完毕之前屏幕常亮,读完以后屏幕常亮关闭;1.权限配置:设置电源管理的权限。

随便推点

目标检测简介-程序员宅基地

文章浏览阅读2.3k次。目标检测简介、评估标准、经典算法_目标检测

记SQL server安装后无法连接127.0.0.1解决方法_sqlserver 127 0 01 无法连接-程序员宅基地

文章浏览阅读6.3k次,点赞4次,收藏9次。实训时需要安装SQL server2008 R所以我上网上找了一个.exe 的安装包链接:https://pan.baidu.com/s/1_FkhB8XJy3Js_rFADhdtmA提取码:ztki注:解压后1.04G安装时Microsoft需下载.NET,更新安装后会自动安装如下:点击第一个傻瓜式安装,唯一注意的是在修改路径的时候如下不可修改:到安装实例的时候就可以修改啦数据..._sqlserver 127 0 01 无法连接

js 获取对象的所有key值,用来遍历_js 遍历对象的key-程序员宅基地

文章浏览阅读7.4k次。1. Object.keys(item); 获取到了key之后就可以遍历的时候直接使用这个进行遍历所有的key跟valuevar infoItem={ name:'xiaowu', age:'18',}//的出来的keys就是[name,age]var keys=Object.keys(infoItem);2. 通常用于以下实力中 <div *ngFor="let item of keys"> <div>{{item}}.._js 遍历对象的key

粒子群算法(PSO)求解路径规划_粒子群算法路径规划-程序员宅基地

文章浏览阅读2.2w次,点赞51次,收藏310次。粒子群算法求解路径规划路径规划问题描述    给定环境信息,如果该环境内有障碍物,寻求起始点到目标点的最短路径, 并且路径不能与障碍物相交,如图 1.1.1 所示。1.2 粒子群算法求解1.2.1 求解思路    粒子群优化算法(PSO),粒子群中的每一个粒子都代表一个问题的可能解, 通过粒子个体的简单行为,群体内的信息交互实现问题求解的智能性。    在路径规划中,我们将每一条路径规划为一个粒子,每个粒子群群有 n 个粒 子,即有 n 条路径,同时,每个粒子又有 m 个染色体,即中间过渡点的_粒子群算法路径规划

量化评价:稳健的业绩评价指标_rar 海龟-程序员宅基地

文章浏览阅读353次。所谓稳健的评估指标,是指在评估的过程中数据的轻微变化并不会显著的影响一个统计指标。而不稳健的评估指标则相反,在对交易系统进行回测时,参数值的轻微变化会带来不稳健指标的大幅变化。对于不稳健的评估指标,任何对数据有影响的因素都会对测试结果产生过大的影响,这很容易导致数据过拟合。_rar 海龟

IAP在ARM Cortex-M3微控制器实现原理_value line devices connectivity line devices-程序员宅基地

文章浏览阅读607次,点赞2次,收藏7次。–基于STM32F103ZET6的UART通讯实现一、什么是IAP,为什么要IAPIAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使用过程中需要进行应用代码的更换、升级等操作的话,则可能需要将设备返回原厂并拆解出来再使用J-Link重新烧录代码,这就增加了很多不必要的麻烦。站在用户的角度来说,就是能让用户自己来更换设备里边的代码程序而厂家这边只需要提供给_value line devices connectivity line devices