MVC 框架安全

在现代 Web 开发中,使用 MVC 架构是一种流行的做法。MVC 是 Model-View-Controller 的缩写,它将 Web 应用分为三层,View 层负责用户视图、页面展示等工作;Controller 负责应 用的逻辑实现,接收 View 层传入的用户请求,并转发给对应的 Model 做处理;Model 层则负 责实现模型,完成数据的处理。

从数据的流入来看,用户提交的数据先后流经了 View 层、Controller、Model 层,数据的 流出则反过来。在设计安全方案时,要牢牢把握住数据这个关键因素。在 MVC 框架中,通过 切片、过滤器等方式,往往能对数据进行全局处理,这为设计安全方案提供了极大的便利。

比如在 Spring Security 中,通过 URL pattern 实现的访问控制,需要由框架来处理所有用户 请求,在 Spring Security 获取了 URL handler 基础上,才有可能将后续的安全检查落实。在 Spring Security 的配置中,第一步就是在 web.xml 文件中增加一个 filter,接管用户数据。

<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> 
</filter-mapping>

然而数据的处理是复杂的,数据经过不同的应用逻辑处理后,其内容可能会发生改变。比 如数据经过 toLowercase,会把大写变成小写;而一些编码解码,则可能会把 GBK 变成 Unicode 码。这些处理都会改变数据的内容,因此在设计安全方案时,要考虑到数据可能的变化,认真 斟酌安全检查插入的时机。

举例来说,在“注入攻击”一章中,我们并没有使用 PHP 的 magic_quotes_gpc 作为一项 对抗 SQL 注入的防御方案,这是因为 magic_quotes_gpc 是有缺陷的,它并没有在正确的地方 解决问题。magic_quotes_gpc 实际上是调用了一次 addslashes(),将一些特殊符号(比如单引号) 进行转义,变成了 \’ 。 对应到 MVC 架构里,它是在 View 层做这件事情的,而 SQL 注入是 Model 层需要解决的 问题,结果如何呢?黑客们找到了多种绕过 magic_quotes_gpc 的办法,比如使用 GBK 编码、 使用无单引号的注入等。 PHP官方在若干年后终于开始正视这个问题,于是在官方文档1 的描述中不再推荐大家使用 它:

所以 Model 层的事情搞到 View 层去解决,效果只会适得其反。

一般来说,我们需要先想清楚要解决什么问题,深入理解这些问题后,再在“正确”的地 方对数据进行安全检查。一些主要的 Web 安全威胁,如 XSS、CSRF、SQL 注入、访问控制、 认证、URL 跳转等不涉及业务逻辑的安全问题,都可以集中放在 MVC 框架中解决。

在框架中实施安全方案,比由程序员在业务中修复一个个具体的 bug,有着更多的优势。

首先,有些安全问题可以在框架中统一解决,能够大大节省程序员的工作量,节约人力成 本。当代码的规模大到一定程度时,在业务的压力下,专门花时间去一个个修补漏洞几乎成为 不可能完成的任务。

其次,对于一些常见的漏洞来说,由程序员一个个修补可能会出现遗漏,而在框架中统一 解决,有可能解决“遗漏”的问题。这需要制定相关的代码规范和工具配合。 最后,在每个业务里修补安全漏洞,补丁的标准难以统一,而在框架中集中实施的安全方 案,可以使所有基于框架开发的业务都能受益,从安全方案的有效性来说,更容易把握

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

016基于SSM+Jsp的医院远程诊断系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

HDU - 5651 xiaoxin juju needs help(Java JS Python C C++)

题目来源 Problem - 5651 (hdu.edu.cn) 题目描述 众所周知&#xff0c;小新是一位才华横溢的程序员。当他还是小学六年级的学生时&#xff0c;他就知道回文字符串了。 今年夏天&#xff0c;他在腾讯实习。一天&#xff0c;他的领导来找小新帮忙。他的领导给了他一个字符串&a…

MySQL之优化服务器设置(五)

优化服务器设置 高级InnoDB设置 innodb_old_blocks_time InnoDB有两段缓冲池LRU(最近最少使用)链表&#xff0c;设计目的是防止换出长期很多次的页面。像mysqldump产生的这种一次性的(大)查询&#xff0c;通常会读取页面到缓冲池的LRU列表&#xff0c;从中读取需要的行&…

npm i 报错 gifsicle pre-build test failed

1.ping raw.githubusercontent.com PS C:\Users\Administrator> ping raw.githubusercontent.com Ping 請求找不到主機 raw.githubusercontent.com。請檢查該名稱&#xff0c;然後重試。2.修改hosts檔案&#xff0c;增加以下設定 52.74.223.119 github.com 192.30.253.119 …

证明 两点分布 的期望和方差

两点分布 两点分布&#xff08;Bernoulli distribution&#xff09;是离散概率分布中最简单的一种。假设随机变量 X X X 只可能取两个值&#xff1a;0 和 1&#xff0c;其概率分别为 P ( X 0 ) 1 − p P(X 0) 1 - p P(X0)1−p 和 P ( X 1 ) p P(X 1) p P(X1)p&…

Android 支持库迁移到AndroidX

对应官方文档&#xff1a; developer.android.com/jetpack/and… 简单点说就是&#xff0c;对App开发者而言&#xff0c;AndroidX更加友好&#xff0c;因为我们引入时&#xff0c;只需要关注AndroidX中具体的需要引入的构件版本即可。且大部分具体的构件&#xff0c;具有一致的…

【吹泡泡game】

如果您想要编写一个简单的吹泡泡游戏&#xff0c;可以使用各种编程语言和游戏开发框架来实现。以下是使用Python和Pygame库的一个基本示例&#xff0c;Pygame是一个用于创建游戏的库&#xff0c;适合初学者。 首先&#xff0c;您需要安装Pygame库。在命令行中输入以下命令来安装…

Ansys Mechanical|学习方法

Ansys Mechanical是Ansys的旗舰产品之一&#xff0c;涉及的学科体系全面丰富&#xff0c;包括的力学分支主要有理论力学&#xff0c;振动理论&#xff0c;连续介质力学&#xff0c;固态力学&#xff0c;物理力学&#xff0c;爆炸力学及应用力学等。 在自媒体及数字经济飞速发展…

SpringCloud框架的复习(面试)

SpringCloud的概念: SpringCloud,我们都知道它是微服务的一个框架, 但它又不仅仅是一个框架 , 它更像是在springboot基础上的一份工具包的集合, 是为了方便开发者更方便的开发 , 旨在让开发者更容易地构建分布式系统服务&#xff0c;尤其是微服务架构的应用。它提供了许…

单例集合:Collection

一.Collection Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。 一.add添加 1.细节1 如果我们要往List系列集合中添加数据,那么方法永远返回true,因为List系列的是允许元素重复的。 2.细节2 如果要往Set系列集合中添加数据,如果当前要添加元素不…

语义分割的数据集各式

比较经典的2种 1. PASCAL VOC格式 VOCdevkit/ └── VOC2012/├── Annotations/│ ├── 2007_000032.xml│ ├── 2007_000033.xml│ ├── ...├── ImageSets/│ └── Segmentation/│ ├── train.txt│ ├── val.txt│ ├── tr…

镜头跟随实例

1、原理 (1) 使球与摄像机保持固定的角度和距离 (2) LateUpdate用于处理相机的跟随 2、方法 (1) 给Main Camera添加CamraCtrller.cs组件 public Transform Player;//小球的Transformprivate Vector3 offset;//小球与摄像机位置的偏移&#xff08;在三轴上的距离&#xff09…

CSRF令牌解析:保护web应用免受攻击

背景介绍 跨站请求伪造&#xff08;CSRF&#xff09;是一种广泛存在的网站攻击手段。与另一常见的攻击手段XSS&#xff08;跨站脚本攻击&#xff09;相比&#xff0c;CSRF并不试图窃取用户的数据&#xff0c;而是欺骗用户执行未授权的操作。这种攻击方式利用了Web应用中用户会…

【Linux】进程间通信1——管道概念,匿名管道

1.进程间通信介绍 进程是计算机系统分配资源的最小单位&#xff08;严格说来是线程&#xff09;。每个进程都有自己的一部分独立的系统资源&#xff0c;彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作&#xff0c;才有了进程间通信。 进程间通信&#xff0c;顾名…

如何利用 TypeScript 的判别联合类型提升错误处理与代码安全性

欢迎回到 TypeScript 高级技巧系列文章。我们之前已经讨论了Extract、Exclude和Indexed Access Types&#xff0c;接下来我们将深入探讨我最喜欢的TypeScript特性之一&#xff1a;判别联合类型&#xff08;Discriminated Unions&#xff09;。为什么我如此钟爱它呢&#xff1f;…

毛胚房需要验收吗

雅静说毛环房验收避坑指南,毛胚房需要验收吗?      那要不以后出了问题,你都签了字了,谁还管你      所以咱们毛胚房拿到手,先别签字,急着装修,      一定要先验房,收藏着,不然后续容易吃亏      1,先看看门窗,看入户门推拉是否顺滑      有无划痕,有没有…

【ROS里程计】中部分代码解释

bool OdomNodePub::Odom_Reset(ubt_odom::odomreset::Request& req, ubt_odom::odomreset::Response& res) {if(req.cmd "reset"){OdomResetFlag true;}else{OdomResetFlag false;}res.state "success";return true; } 该函数是一个ROS节点中…

【Mybatis-Plus】根据自定义注解实现自动加解密

背景 我们把数据存到数据库的时候&#xff0c;有些敏感字段是需要加密的&#xff0c;从数据库查出来再进行解密。如果存在多张表或者多个地方需要对部分字段进行加解密操作&#xff0c;每个地方都手写一次加解密的动作&#xff0c;显然不是最好的选择。如果我们使用的是Mybati…

学习vite的核心原理

Vite主要由两个部分组成 开发服务器 基于原生ES模块&#xff08;ESM&#xff09;提供开发环境支持。提供了丰富的内建功能&#xff0c;如速度快到惊人的模块热更新&#xff08;HMR&#xff09;。这意味着开发者在修改代码时&#xff0c;可以实时地看到更新效果&#xff0c;而…

边缘微型AI的宿主?—— RISC-V芯片

一、RISC-V技术 RISC-V&#xff08;发音为 "risk-five"&#xff09;是一种基于精简指令集计算&#xff08;RISC&#xff09;原则的开放源代码指令集架构&#xff08;ISA&#xff09;。它由加州大学伯克利分校在2010年首次发布&#xff0c;并迅速获得了全球学术界和工…