目录
处理访问
身份验证
会话管理
访问控制
处理输入
输入的多样性
输入处理方法
边界确认
多步确认与规范化
应对攻击
管理应用程序
首页 运维 安全 Web Application核心防御机制是什么

Web Application核心防御机制是什么

May 11, 2023 pm 08:46 PM
web application


为防止恶意输入,应用程序实施了大量的安全机制,而这些安全机制在概念上都具有相似性。

这些安全机制由以下几个方面组成:

1、处理用户访问web应用程序的数据与功能(防止未授权访问)

2、处理用户对web应用程序功能输入的数据(防止构造恶意数据)

3、应对攻击(处理预料外的报错、自动阻止明显的攻击、自动向管理员发送警报、维护程序的访问日志)

4、管理与维护应用程序

处理访问

通常一个应用程序的用户有不同类型如,普通用户、登录验证用户、管理员。对不同用户web应用程序给予不同的权限,他们只能访问不同的数据与功能。

web应用程序是通过三层互相关联的安全机制来处理用户的访问:

1、身份验证(Authentication)

2、会话管理(Session Management)

3、访问控制(Access Control)

这三个机制处理用户对应用程序的访问,同时它也是三个受攻击面(attack surface);而且这三者相互依赖缺一不可,无论哪个地方出了问题都会造成未授权访问(木桶原理)。

身份验证

身份验证是处理用户访问的第一道机制,除非网站只有一种用户,否则必须使用身份验证。

如今web应用程序大都使用传统身份验证模型,即用户名密码。

在银行等安全性较高的应用程序中会使用其他证书、双因素认证等来强化这个模型;在安全性要求更高的应用程序中可能需要客户端证书、智能卡或询问-应答机制等其他身份验证模型。

身份验证机制往往还需要一系列其他支持功能,如注册、忘记密码、修改密码等。

身份验证机制存在一些普遍的漏洞,如遍历用户名、弱口令、逻辑缺陷避开登录、社工库查询等等。

会话管理

通过验证之后,就是管理用户的会话了。为了实施访问控制,应用程序需要识别不同用户提交的各种请求;为此,应用程序需要为每个用户建立一个会话,并向用户发送一个表示会话的令牌即session token。会话本身是保存在服务器上的一组数据结构,用于追踪用户和应用程序的交互状态。

会话令牌一般在cookie中传递,有时也会出现在隐藏表单字段或者url查询字符串上,会话令牌会在停止请求后一段时间内失效。

有些应用程序不使用会话令牌来识别会话,而是通过反复提交用户证书识别会话(http内置身份验证机制就是这样,通过反复提交通过base64加密的账号密码来识别会话)。在一些情况下会话信息不保存在服务器上,而是保存在客户端,为了防止用户修改,一般会对其进行加密。

会话管理的受攻击面就是会话令牌本身,推测出会话令牌的生成规则或者截获到其他用户的会话令牌便可以以他人身份访问未经授权的功能与数据。

访问控制

如果前面的身份验证与会话管理运行正常,应用程序便可以通过每个请求中的会话令牌确认每个用户的身份与交互状态,于是便可决定是否同意用户的请求。

因为典型访问控制的要求比较复杂,每个角色有不同的权限,每个用户只允许访问应用程序中的一部分数据与功能,因此这个机制中一般存在大量漏洞,可以造成未授权访问。

处理输入

所有的用户输入都不可信,大部分对web应用程序的攻击都与攻击者专门构造的输入有关,所以安全的处理用户的输入是保障应用程序安全的关键。

输入的多样性

web应用程序可能对一些特殊的输入执行非常严格的检查,例如长度限制、字符限制等;有时候则可能需要接受用户提交的任意输入;而隐藏表单字段和cookie等是在服务器上生成传回客户端,再由用户的请求传回服务器,在这个过程中攻击者却可以查看并修改它们。

输入处理方法

不同的情况使用不同的处理方法,或者搭配使用。

1、黑名单

黑名单包含一组在攻击中会使用的字符串或模式,所有与黑名单匹配的数据都会阻止。

黑名单是输入确认效果最差的方法。原因有二:

1)用户的输入可以通过各种编码或者其他的表现形式进行绕过,比如遗漏一些有相同作用的字符。例如alert(‘xss’)被阻止,还可以使用prompt(‘xss’)、例如web应用防火墙常受到空字节(null)攻击,这是因为在托管与非托管情况下处理字符串的方式不同。

2)术飞速的发展,使之产生一些新型的漏洞利用方法。

2、白名单

白名单包含一组良性的字符串、模式或一组标准。所有不与白名单匹配的数据都会被阻止。

白名单是输入确认效果最好的方法,因为指定白名单时只会留下安全的字符串,攻击者无法构造输入。

但是白名单具有局限性。在许多情况下web应用程序必须接受一些不符合安全标准的字符,例如应用程序需要用户以真实姓名注册,但是姓名中却包含一些连字符、撇号等可能对数据库造成攻击的字符。所以白名单具有局限性,并非解决不安全输入的万能方法。

3、净化

这种方式解决了白名单无法处理的部分,它接受一些无法保证安全的数据输入,但是会对其进行净化,例如删除、转义、编码等

净化可以作为一种通用的方法,但是需要注意的是如果一个输入项中需要容纳几种可能的恶意数据,就很能对其进行有效的进化。这时需要使用边界确认。

4、安全数据处理

以不安全的方式处理用户提交的数据,是许多web应用程序漏洞形成的根本原因。

安全的数据处理方式,不需要纠结于对用户输入数据的确认,转而确保处理过程的绝对安全。例如防止sql注入的参数化查询。

但是这项方法不适用于web应用程序需要执行的每一项任务,如果适用,它就是处理恶意输入的通用处理方法了。

5、逻辑检查

在一些漏洞中攻击者与正常用户的输入完全相同,仅仅是动机不同,在这种情况下,以上机制几乎完全无效。例如攻击这通过修改隐藏表单字段提交的账号,企图访问其他用户账号。此时再多的输入确认也无法区别攻击者与正常用户的数据。为防止未授权访问,应用程序必须确认所提交账号属于之前提交该账号的用户。

边界确认

鉴于核心安全问题的本质(所有用户输入皆不可信),可以将因特网(不可信)与服务器应用程序(可信)之间作为边界,然后在边界净化所有来自因特网的输入,将净化后的数据交给服务器应用程序。以上,是一种简单的边界确认,在分析实际的漏洞时发现执行这种简单的输入确认是不够的。

基于应用程序执行功能的广泛性及其采用技术的多样性,一个典型的应用程序需要防御大量的各种各样的输入攻击,每种攻击可能采用一种截然不同的专门设计的数据,因此很难在外部边界建立一个简单的机制防御所有的攻击。

许多应用程序功能都设计组合一系列不同的处理过程,用户的一个输入,可能在许多组件中执行许多操作,其中前一个操作的输出结果被用于后一个操作。数据经过转换后与原始输入完全不同。而经验丰富的攻击者却能利用这种不同,在关键步骤生成恶意数据,攻击接受数据的组件。因此很难在外部边界建立一个简单的机制防御所有的攻击。

边界确认是一种更加有效的模型。这里的边界不在局限于因特网与web应用程序之间的边界,web应用程序的每个组件或功能单元都有边界。如此,每个组件都可以防御它收到的特殊类型的专门设计的输入。当数据通过不同的组件,即可对前面生成的数据执行确认检查,而且由于不同的处理阶段执行不同的确认检查,它们之间不可能发生冲突。

例如下图:

Web Application核心防御机制是什么

多步确认与规范化

在确认检查过程中,当需要在几个步骤中处理用户的输入时,就会出现一个输入机制经常遇到的问题。当应用程序试图通过删除或者编码某些字符达到净化用户输入时,就会出现这种问题。如果不谨慎处理这个问题,攻击者就能构造专门的输入,使恶意数据成功避开确认机制。例如双写绕过、利用步骤执行顺序绕过。

数据规范化会造成另一个问题。为了通过http传送一些不常见的字符和二进制数据,通常会通过编码对其进行规范化,但是如何在实施过滤之后才进行解码,攻击者就可以通过编码避开确认机制。

除了供web应用程序使用的标准编码方案外,其他情况下,如果应用程序的组件将数据从一个字符集转换为另一个字符集,这也会导致规范化问题。例如Ÿ和Â则被转换为Y和A,攻击者经常使用这种方法传送受阻止的字符和关键字。

有时候很难避免多步确认和规范化造成的问题,也不存在解决和这类问题的唯一方案。如何可能一般避免净化不良输入,而是完全拒绝这种输入。

应对攻击

以上我们已经尽可能的阻止了攻击者的入侵,但是没有一个绝对安全的系统,若发生安全事件web应用程序应当如何应对攻击呢,处理措施一般为以下几条:

1、处理预料外的报错

2、自动阻止明显的攻击

3、自动向管理员发送警报

4、维护程序的访问日志

处理错误

应用程序的一个关键机制就是如何处理意料之外的错误。一般在生产环境下,应用程序不应该向用户返回任何系统生成的信息或者其他调试信息。这些信息对于攻击者而言是为下一步的进攻提供了很好的参考信息。而且意料之外的错误往往指明了程序的防御机制中的一些缺陷。错误处理机制通常与日志机制整合在一起。

应对攻击

很多攻击都会发送大量的常见恶意字符,遇到这类情况应用程序应采取自动反应措施阻止攻击者的探查。例如终止会话、要求重新登录、禁止ip等等

维护日志

日志会对入侵情况进行记录,入侵过后仍能还原入侵过程。

重要的应用程序日志应记录所有请求。一般情况下应至少包括一下几项:

1、所有与身份验证相关的事件,如成功或失败的登录、密码修改

2、关键操作,如转账等

3、被访问控制阻止的请求

4、包含已知攻击字符串

日志会记录每个事件的时间、ip、用户账户。日志需要严格保护,避免未授权的读取。写入,修改等等

日志同样也会成为一个攻击面,例如可以未授权访问的日志会为攻击者提供会话令牌、请求参数等等敏感信息。

向管理员发出警报

核心问题就是误报和漏报,将警报机制与确认机制和其他控制方法结合起来可以得到一些改善。

一般而言监控到的反常事件包括以下几种:

1、应用反常,如接收到一个ip的大量的请求

2、交易反常,如一个银行账户所转入转出的资金数量出现异常

3、包含已知攻击字符串

4、请求中普通用户无法查看的数据被修改

管理应用程序

管理程序可以帮助管理员管理用户账户与角色、应用监控与审计功能、执行诊断任务并配置应用程序的各种功能。

管理机制是应用程序主要受攻击面之一,管理机制往往都拥有很高的权限。获得了管理机制控制权,就是获得了应用程序的控制权。而且管理机制中往往会存在一些比较明显的漏洞和敏感的功能。获得管理员的权限的漏洞一般出现在处理用户访问机制上,如未授权访问、弱口令等,如果管理后台可以处理普通用户发送的请求,可以尝试xss漏洞盲打后台。

以上是Web Application核心防御机制是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用python Flask实现日志在web网页实时更新显示 如何使用python Flask实现日志在web网页实时更新显示 May 17, 2023 am 11:07 AM

一、日志输出到文件使用模块:logging可以生成自定义等级日志,可以输出日志到指定路径日志等级:debug(调试日志)=5){clearTimeout(time)//如果连续10次获取的都是空日志清除定时任务}return}if(data.log_type==2){//如果获取到新日志for(i=0;i

python WSGI Application原理是什么 python WSGI Application原理是什么 May 19, 2023 pm 01:25 PM

本篇文章所依赖的python环境为:什么是WSGIWSGI也称之为web服务器通用网关接口,全称是webservergatewayinterface。它定义了在python中web服务器与web应用程序之间应该如何通信并且处理http请求和响应的一个标准,注意,它只是一个协议,或者说是规范、标准,你也可以不按这个标准来,就像我们上一篇文章所写的web服务器那样。WSGI也分为应用程序和服务器网关,其中我们熟知的Flask就是属于应用程序,uWSGI、wsgiref属于服务器网关。个人感觉,WSG

Nginx的Web服务器caddy怎么使用 Nginx的Web服务器caddy怎么使用 May 30, 2023 pm 12:19 PM

Caddy简介Caddy是一款功能强大,扩展性高的Web服务器,目前在Github上已有38K Star。Caddy采用Go语言编写,可用于静态资源托管和反向代理。Caddy具有如下主要特性:对比Nginx复杂的配置,其独创的Caddyfile配置非常简单;可以通过其提供的AdminAPI实现动态修改配置;默认支持自动化HTTPS配置,能自动申请HTTPS证书并进行配置;能够扩展到数以万计的站点;可以在任意地方执行,没有额外的依赖;采用Go语言编写,内存安全更有保证。安装首先我们直接在CentO

Java API 开发中使用 Jetty7 进行 Web 服务器处理 Java API 开发中使用 Jetty7 进行 Web 服务器处理 Jun 18, 2023 am 10:42 AM

JavaAPI开发中使用Jetty7进行Web服务器处理随着互联网的发展,Web服务器已经成为了应用程序开发的核心部分,同时也是许多企业所关注的焦点。为了满足日益增长的业务需求,许多开发人员选择使用Jetty进行Web服务器开发,其灵活性和可扩展性受到了广泛的认可。本文将介绍如何在JavaAPI开发中使用Jetty7进行We

Web 端实时防挡脸弹幕(基于机器学习) Web 端实时防挡脸弹幕(基于机器学习) Jun 10, 2023 pm 01:03 PM

防挡脸弹幕,即大量弹幕飘过,但不会遮挡视频画面中的人物,看起来像是从人物背后飘过去的。机器学习已经火了好几年了,但很多人都不知道浏览器中也能运行这些能力;本文介绍在视频弹幕方面的实践优化过程,文末列举了一些本方案可适用的场景,期望能开启一些脑洞。mediapipeDemo(https://google.github.io/mediapipe/)展示主流防挡脸弹幕实现原理点播up上传视频服务器后台计算提取视频画面中的人像区域,转换成svg存储客户端播放视频的同时,从服务器下载svg与弹幕合成,人像

怎么配置nginx保证frps服务器与web共用80端口 怎么配置nginx保证frps服务器与web共用80端口 Jun 03, 2023 am 08:19 AM

首先你会有个疑惑,frp是什么呢?简单的说frp就是内网穿透工具,配置好客户端以后,可以通过服务器来访问内网。现在我的服务器,已经用nginx做站了,80端口只有一个,那如果frp的服务端也想使用80端口,那应该怎么办呢?经过查询,这个是可以实现的,就是利用nginx的反向代理来实现。补充一下:frps就是服务器端(server),frpc就是客户端(client)。第一步:修改服务器中nginx.conf配置文件在nginx.conf中http{}里添加以下参数,server{listen80

如何使用Golang实现Web应用程序的表单验证 如何使用Golang实现Web应用程序的表单验证 Jun 24, 2023 am 09:08 AM

表单验证是Web应用程序开发中非常重要的一个环节,它能够在提交表单数据之前对数据进行有效性检查,避免应用程序出现安全漏洞和数据错误。使用Golang可以轻松地实现Web应用程序的表单验证,本文将介绍如何使用Golang来实现Web应用程序的表单验证。一、表单验证的基本要素在介绍如何实现表单验证之前,我们需要知道表单验证的基本要素是什么。表单元素:表单元素是指

如何从驾驶舱Web用户界面启用管理访问 如何从驾驶舱Web用户界面启用管理访问 Mar 20, 2024 pm 06:56 PM

Cockpit是一个面向Linux服务器的基于Web的图形界面。它主要是为了使新用户/专家用户更容易管理Linux服务器。在本文中,我们将讨论Cockpit访问模式以及如何从CockpitWebUI切换Cockpit的管理访问。内容主题:驾驶舱进入模式查找当前驾驶舱访问模式从CockpitWebUI启用Cockpit的管理访问从CockpitWebUI禁用Cockpit的管理访问结论驾驶舱进入模式驾驶舱有两种访问模式:受限访问:这是驾驶舱的默认访问模式。在这种访问模式下,您不能从驾驶舱Web用户

See all articles