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,有着更多的优势。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第三十九天| 416. 分割等和子集

416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; class Solution {public boolean canPartition(int[] nums) {int sum 0;for (int i0;i<nums.length;i){sum nums[i];}if(sum%2!0){return false;}int weight sum /2;// int[][] dp new int[nums.length][weig…

软件测试-第1章-绪论

目录 1.1软件危机和软件生存期 &#xff08;1&#xff09;软件危机 &#xff08;2&#xff09;软件生存周期 1.2软件测试的意义 1.3什么是软件测试 &#xff08;1&#xff09;软件测试的定义 &#xff08;2&#xff09;软件测试的范围 1.4怎样认识软件测试 1&#xff…

【包管理】Node.JS与Ptyhon安装

文章目录 Node.JSPtyhon Node.JS Node.js的安装通常包括以下几个步骤&#xff1a; 访问Node.js官网&#xff1a; 打开Node.js的官方网站&#xff08;如&#xff1a;https://nodejs.org/zh-cn/download/&#xff09;。 下载安装包&#xff1a; 根据你的操作系统选择对应的Node…

Go语言RPC开发深度指南:net/rpc包的实战技巧和优化策略

Go语言RPC开发深度指南&#xff1a;net/rpc包的实战技巧和优化策略 概览理解net/rpc的核心概念RPC的基本原理net/rpc的工作模式关键特性 快速开始准备RPC服务和客户端的基础环境构建一个基础的RPC服务端构建一个基础的RPC客户端 开发一个实际的RPC服务设计服务接口实现服务客户…

《Windows API每日一练》4.5 GDI映射模式

上一节讲述设置绘图模式时&#xff0c;包括设置背景模式、混合模式&#xff0c;还有一个就是映射模式。本节我们将详细讲述映射模式。 本节必须掌握的知识点&#xff1a; 设备坐标和逻辑坐标 视口和窗口 MM_TEXT映射模式 度量映射模式 自定义映射模式 第27练&#xff1a;GDI映…

打破安全设备孤岛,多源威胁检测与响应(XDR)如何构建一体化安全防线

在数字化和信息化迅猛发展的当下&#xff0c;安全设备孤岛现象成为网络安全治理中的一大挑战。在多元化的市场环境中&#xff0c;不同厂商的安全设备因数据格式与系统兼容性的差异&#xff0c;导致信息流通受阻、共享困难&#xff0c;形成孤立的安全防线。 安全设备孤岛现象不仅…

重构大学数学基础_week05_雅各比矩阵与雅各比行列式

这周来讲一下雅各比矩阵和雅各比行列式。 多元函数的局部线性属性 首先我们来回顾一下向量函数&#xff0c;就是我们输入一个向量&#xff0c;输出也是一个向量&#xff0c;我们假设现在有一个向量函数 这个函数意思就是在说&#xff0c;我们在原来的平面上有一个向量(x,y),经…

小米手机怎么用代理换ip:步骤详解与实用指南

在数字化时代&#xff0c;网络安全与隐私保护日益受到重视。对于小米手机用户而言&#xff0c;使用代理换IP已成为提升网络安全性、访问特定网站或绕过地域限制的有效手段。本文将详细介绍如何在小米手机上设置代理以更换IP地址&#xff0c;帮助用户更好地保护个人信息和享受更…

openEuler 24.03 LTS - 华为欧拉开源版(华为 RHEL 兼容发行版)

openEuler 24.03 LTS - 华为欧拉开源版&#xff08;华为 RHEL 兼容发行版&#xff09; 华为红帽企业 Linux 兼容发行版 请访问原文链接&#xff1a;https://sysin.org/blog/openeuler/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…

6.17 作业

使用qt实现优化自己的登录界面 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确&#xff0c;则实现登录界面关闭&#xff0c;另一个应用界面显示。 第一个源文件 …

【Netty】nio处理acceptreadwrite事件

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Netty ⛺️稳中求进&#xff0c;晒太阳 1.处理accept 1.1客户端代码 public class Client {public static void main(String[] args) {try (Socket socket new Socket("localhost…

泛微开发修炼之旅--19ecode获取用户人员信息方案汇总及代码示例(含pc端和移动端)

文章详情链接&#xff1a;19ecode获取用户人员信息方案汇总及代码示例&#xff08;含pc端和移动端&#xff09;

Web前端开发实战:HTML5+CSS3+JavaScript+Vue+Bootstrap

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

C#语言中的Async/await最佳实践

自从 C# 5 中引入 async/await 以来&#xff0c;开发人员之间一直对 async/await 关键字的最佳实践以及幕后实际发生的事情感到困惑。 让我们先从基础开始。 在 Windows 窗体的早期&#xff0c;UI 延迟与 I/O 操作所花费的时间成正比。这意味着&#xff0c;如果您尝试将数据保…

ResNet——Deep Residual Learning for Image Recognition(论文阅读)

论文名&#xff1a;Deep Residual Learning for Image Recognition 论文作者&#xff1a;Kaiming He et.al. 期刊/会议名&#xff1a;CVPR 2016 发表时间&#xff1a;2015-10 ​论文地址&#xff1a;https://arxiv.org/pdf/1512.03385 1.什么是ResNet ResNet是一种残差网络&a…

【八股系列】介绍React高阶组件,适用于什么场景?

文章目录 1. HOC的工作原理2. 返回的新组件3. 适用场景4. 注意事项5. 示例代码 React高阶组件&#xff08; Higher-Order Components&#xff0c;简称HOC&#xff09;是 React中一种高级的 复用组件逻辑的技术。 HOC自身不是 React API的一部分&#xff0c;而是基于 Reac…

【Spine学习05】之网格权重概念,以及让小臂动起来

上一节绑定好骨骼设置好了父级之后呢&#xff0c; 会发现操纵只有大臂能摆动&#xff0c;但是小臂以及手部无法K帧动起来。 当然如果你拿到的图片分层非常细&#xff0c;大小腿分开 例如这种的&#xff0c;铠甲勇士&#xff0c;那么其实绑不绑定权重意义不大&#xff0c; 因为骨…

职教本科人工智能工程技术教学解决方案

前言 随着人工智能技术的迅猛发展&#xff0c;其在各行各业的应用日益广泛&#xff0c;对高层次技术技能型人才的需求也愈发迫切。在这一背景下&#xff0c;职业教育本科层次的人工智能工程技术专业应运而生&#xff0c;旨在培养能够从事人工智能数据处理、模型构建、系统应用研…

echarts legend 背景色渐变

问题与本文无关&#xff1a;如果检测软件显示loadsh.js 的版本是4.17.10 装element-ui 2.15.8版本以下&#xff0c;2.15.6经过测试可以 代码&#xff1a; <template><div class"levelMain"><div class"survey-head"><div class"…

【思考】Vue2响应丢失、$set

【思考】Vue2响应丢失、$set vue2响应丢失情况复现原因解决总结 vue2响应丢失情况复现 场景&#xff1a;直接通过数组下标去修改数组造成响应丢失 <template><div><p v-for"(item, index) in list" :key"index">{{item}}</p><…