异常信息泄露 应用程序错误泄露 原理以及修复方法

漏洞名称:未自定义统一错误页面导致信息泄露,抛出异常信息泄露,错误详情信息泄漏,AWVS漏洞名称如下:
Application error message
Error message on page
ASP.NET error message

漏洞描述:攻击者可通过构造恶意请求包触发Web应用程序报错,提取报错信息泄露的敏感信息,如Web中间件的版本信息、数据库连接信息。

检测条件:1、 被测网站web业务正常运行

检测方法

1、 通过web扫描工具对网站扫描可得到结果。
2、 或者通过手工,去尝试打开一些不存在的网站路径,或者文件,以及在url中输入一些敏感的字符,看其页面是否会抛出异常或者报错,导致错误消息中包含一些网站架构,版本,等敏感信息。

修复方案

1、 对于tomcat的中间件下,常用修复方式如下:找到配置文件web.xml,修改内容如下:

配置一个统一的静态页面,将400、403、404、500等常见报错重定向到该静态页面,而不是抛出异常(报错信息导致代码信息泄漏)。

<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/jsp/common/error.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/jsp/common/error.html</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/jsp/common/error.html</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/jsp/common/error.hrml</location>
</error-page>

2、 对于常用的jsp语言开发的网站,可在业务流程中,加入异常捕获过程中预定义的错误编码,将异常输出到错误日志中,并在前台页面返回相应的错误编码,以便应用系统运维人员进行异常排查。代码参考:

try {
//某业务处理流程
……
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
resultMessage = getText("业务处理发生异常,错误编码A-04221!");
return "errorJsp";
}

3、 对于IIS/ASP.net下设置404错误页面:这样,便可以保证IIS能够正确地返回‚404‛状态码:首先,修改应用程序根目录的设置,打开 ‚web.config‛ 文件编辑,在其中加入如下内容:

<configuration>
<system.web>
<customErrors mode=‛On‛ defaultRedirect=‛error.asp‛>
<error statusCode=‛404″ redirect=‛notfound.asp‛ />
</customErrors>
</system.web>
</configuration>

注:上文例中‚error.asp‛为系统默认的404页面,‚notfound.asp‛为自定义的404页面,使用时请修改相应文件名。然后,在自定义的404页面‚notfound.asp‛中加入将显示的代码页面,如‚not found‛。

4、 对于apache服务器的设置:修改 httpd.conf,找到如下:

#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
httpd.conf中的这一部分,#ErrorDocument 404 /missing.html 是显示错误
页信息的,去掉前面的#,修改为:ErrorDocument 404 /404.jsp

5、 对于PHP中间件的使用者,可通过修改php.ini文件来实现如果关闭与开启错误信息,关闭错误显示后,php函数执行错误的信息将不会再显示给用户,这样能在一定程度上防止攻击者从错误信息得知脚本的物理位置,以及一些其它有用的信息,起码给攻击者的黑箱检测造成一定的障碍。这些错误信息可能对我们自己有用,可以让它写到指定文件中去,那么修改以下

log_errors = Off
改为:
log_errors = On
以及指定文件,找到下面这行:
;error_log = filename
去 掉 前 面 的 ; 注 释 , 把 filename 改 为 指 定 文 件 , 如
/usr/local/xxx/logs/php_error.log
error_log = /usr/local/xxx/logs/php_error.log
这样所有的错误都会写到php_error.log文件里。

6、 对于J2EE项目开发的网站,如果想通过捕获抛出的异常信息的方式来修复,可以使用Spring MVC统一异常处理的方法来进行修复, Spring MVC处理异常有3种方式:

6.1、 使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver:

<bean class="org.springframework.web.servlet.handler.SimpleMapping
ExceptionResolver">
<!-- 定义默认的异常处理页面,当该异常类型的注册时使用 -->
<property name="defaultErrorView" value="error"></property>
<!-- 定义异常处理页面用来获取异常信息的变量名,默认为exception --〉
<property name="exceptionAttribute" value="ex"></property>
<!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值
-->
<property name="exceptionMappings">
<props>
<prop
key="cn.basttg.core.exception.BusinessException">error-business</prop>
<prop
key="cn.basttg.core.exception.ParameterException">error-parameter</prop>
<!-- 这里还可以继续扩展对不同异常类型的处理 -->
</props>
</property>
</bean>

启动测试项目,经验证,各种层面所抛出的异常(业务异常BusinessException、参数异常ParameterException和其它的异常Exception)都能准确显示定义的异常处理页面,达到了统一异常处理的目标。使用SimpleMappingExceptionResolver进行异常处理,具有集成简单、有良好的扩展性、对已有代码没有入侵性等优点,但该方法仅能获取到异常信息,若在出现异常时,对需要获取除异常以外的数据的情况不适用。

6.2、 实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器; 增加HandlerExceptionResolver 接口的实现类MyExceptionHandler,代码如下:

1..public class MyExceptionHandler implements
HandlerExceptionResolver {
2.
3. public ModelAndView resolveException(HttpServletRequest
request, HttpServletResponse response, Object handler,
4. Exception ex) {
5. Map<String, Object> model = new HashMap<String, Object>();
6. model.put("ex", ex);
7.
8. // 根据不同错误转向不同页面
9. if(ex instanceof BusinessException) {
10. return new ModelAndView("error-business", model);
11. }else if(ex instanceof ParameterException) {
12. return new ModelAndView("error-parameter", model);
13. } else {
14. return new ModelAndView("error", model);
15. }
16. }
17.}
在Spring的配置文件applicationContext.xml中增加以下内容:
<bean
id="exceptionHandler"
class="cn.basttg.core.exception.MyExceptionHandler"/>

启动测试项目,经验证各种层抛出的异常(业务异常BusinessException、参数异常ParameterException和其它的异常Exception)都能准确显示定义的异常 处 理 页 面 , 达 到 了 统 一 异 常 处 理 的 目 标 , 使 用 实 现HandlerExceptionResolver接口的异常处理器进行异常处理,具有集成简单、有良好的扩展性、对已有代码没有入侵性等优点,同时,在异常处理时能获取
导致出现异常的对象,有利于提供更详细的异常处理信息。

6.3、 使用@ExceptionHandler注解实现异常处理;增加BaseController类,并在类中使用@ExceptionHandler注解声明异常处理,代码如下:

1.public class BaseController {
2. /** 基于@ExceptionHandler异常处理 */
3. @ExceptionHandler
4. public String exp(HttpServletRequest request, Exception ex) {
5.
6. request.setAttribute("ex", ex);
7.
8. // 根据不同错误转向不同页面
9. if(ex instanceof BusinessException) {
10. return "error-business";
11. }else if(ex instanceof ParameterException) {
12. return "error-parameter";
13. } else {
14. return "error";
15. }
16. }
17.}

修改代码,使所有需要异常处理的Controller都继承该类,如下所示,修改后的TestController类继承于BaseController:public class TestController extends BaseController使用@ExceptionHandler注解实现异常处理,具有集成简单、有扩展性好(只需要将要异常处理的Controller类继承于BaseController即可)、不需要附加Spring配置等优点,但该方法对已有代码存在入侵性(需要修改已有代码,使相关类继承于BaseController),在异常处理时不能获取除异常以外的数据。

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

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

相关文章

FebHost:意大利.IT域名一张意大利网络名片

.IT域名是意大利的国家顶级域名&#xff0c;对于意大利企业和个人而言,拥有一个属于自己的”.IT”域名无疑是件令人自豪的事。这个被誉为意大利互联网标志性代表的域名,不仅隐含着浓厚的意大利文化特色,还为使用者在当地市场的推广铺平了道路。 对于那些希望在意大利市场建立强…

微信开发者工具接入短剧播放器插件

接入短剧播放插线 申请添加插件基础接入app.jsonapp.jsplayerManager.js数据加密跳转到播放器页面运行出错示例小程序页面页面使用的方法小程序输入框绑定申请添加插件 添加插件:登录微信开发者平台 ——> 设置 ——> 第三方设置 ——> 插件管理 ——> 搜索“短剧…

基于SpringBoot + Vue实现的养老院管理系统设计与实现+毕业论文(12000字)+搭建视频

介绍 养老院管理系统是一款运用软件开发技术设计实现的应用系统&#xff0c;在信息处理上可以达到快速的目的&#xff0c;不管是针对数据添加&#xff0c;数据维护和统计&#xff0c;以及数据查询等处理要求&#xff0c;养老院管理系统都可以轻松应对。 系统包含登录、注册、…

蓝桥杯每日不知道多少题之更小的数

题目链接&#xff1a;更小的数 - 洛谷 P9232 - Virtual Judge (vjudge.net) 解题思路&#xff1a;这个题看数据量是可以过n方的算法的&#xff0c;首先考虑dp&#xff0c;那么则是两层for循环&#xff0c;即枚举所有情况&#xff0c;那么怎么进行状态转移呢&#xff0c;当 s[i…

Linux 系统 docker搭建LNMP环境

1、安装nginx docker pull nginx (默认安装的是最新版本) 2、运行nginx docker run --name nginx -p 80:80 -d nginx:latest 备注&#xff1a;--name nginx 表示容器名为 nginx -d 表示后台运行 -p 80:80 表示把本地80端口绑定到Nginx服务端的 80端口 nginx:lates…

【YOLOv5改进系列(9)】高效涨点----使用CAM(上下文增强模块)替换掉yolov5中的SPPF模块

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ CAM模块详细介绍二、2️⃣CAM模块的三种融合模式三、3️⃣如何添加CAM模块3.1 &#x1f393; 添加CAM模块代码3.2 ✨添加yolov5s_CAM.yaml文件3.3 ⭐️修改yolo.py文相关文件 四、4️⃣实验结果4.1 &#x1f39…

【阅读笔记】《你的第一本博弈论》

博弈论入门书&#xff0c;很多例子方便理解 副标题: 用博弈论解决工作和生活的难题 作者&#xff1a;欧俊 笔记 CH1 博弈论&#xff1a;最高级的思维和生存策略 博弈的分类&#xff1a; • 负和博弈 • 零和博弈 • 正和博弈 博弈论带给我们的启示&#xff1a; • 要会选择 …

Leetcode 82. 删除排序链表中的重复元素 II

给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5] 提示&#xff1a; 链表中节点数目在范围 [0, 300] 内 -100 < Node.…

一些实用的功能函数

1. 【算法】求两个数中&#xff0c;bit位不同的个数&#xff08;在计网那道题中用过&#xff09; 解法&#xff1a;首先把两位数异或&#xff0c;得到的结果&#xff0c;通过自身跟自身-1相与&#xff0c;直到等于0为止 代码如下&#xff1a; int calculateNotSam(int a,int …

uniapp怎么使用接口返回的iconfont图标

uniapp怎么使用接口返回的iconfont图标 首先在你的项目中添加该图标&#xff0c;名称要对应 实际应用 item.ICONFONT_NAME“tools”; item.ICONFONT_COLOR“FA5151”; <view class"iconfont" :class"icon-item.ICONFONT_NAME" :color"item.ICON…

ORACLE 存中文

笔记 oracle 存中文要用 nvarchar2 &#xff0c;涉及长度校验 NVARCHAR2和VARCHAR2的区别&#xff0c;从使用角度来看区别在于&#xff1a; NVARCHAR2在计算长度时和字符集相关&#xff0c; 例如数据库是中文字符集时&#xff0c;以长度10为例&#xff0c;则 NVARCHAR2(10)可…

Kubernetes Pod深度解析:构建可靠微服务的秘密武器(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Kubernetes概述 2、Pod概述 二、Po…

输出单链表倒数第K个结点值

方法一&#xff1a; 两次遍历链表。第一次遍历&#xff0c;计算链表长度&#xff0c;然后计算链表倒数第m个结点的正数位置k&#xff0c;判断位置是否合法&#xff0c;如果不合法&#xff0c;输出NOT FOUND&#xff0c;否则&#xff0c;进行第二次遍历链表&#xff0c;查找链表…

手写SpringBoot(三)之自动配置

系列文章目录 手写SpringBoot&#xff08;一&#xff09;之简易版SpringBoot 手写SpringBoot&#xff08;二&#xff09;之动态切换Servlet容器 手写SpringBoot&#xff08;三&#xff09;之自动配置 手写SpringBoot&#xff08;四&#xff09;之bean动态加载 手写SpringBoot…

企业培训系统功能介绍

在当今知识经济时代&#xff0c;企业的竞争力在很大程度上取决于员工的专业能力和综合素质。为了适应不断变化的市场需求和技术进步&#xff0c;企业需要对员工进行持续有效的培训。一个高效的企业培训系统对企业人才培训至关重要。以下介绍一下企业培训系统的主要功能&#xf…

电脑文件msvcp120.dll丢失的解决方法详细分析,找多种靠谱方法修复

遇到msvcp120.dll文件丢失的问题实际上不算罕见&#xff0c;这往往是由于我们频繁使用电脑而导致的意外删除&#xff0c;或者是电脑受到病毒感染。当这类情况发生时&#xff0c;msvcp120.dll文件可能会被错误地移除或损坏&#xff0c;这便需要我们去进行修复。接下来&#xff0…

【系统架构师】-第18章-安全架构设计

(1)信息泄露&#xff1a;信息被泄露或透露给某个非授权的实体。 (2)破坏信息的完整性&#xff1a;数据被非授权地进行增删、修改或破坏而受到损失。 (3)拒绝服务&#xff1a;对信息或其他资源的合法访问被无条件地阻止。 (4)非法使用(非授权访问):某一资源被某个非授权的人或…

FA模型切换Stage模型组件切换之ServiceAbility切换DataAbility切换

ServiceAbility切换 FA模型中的ServiceAbility对应Stage模型中的ServiceExtensionAbility。Stage模型下的ServiceExtensionAbility为系统API&#xff0c;只有系统应用才可以创建。因此&#xff0c;FA模型的ServiceAbility的切换&#xff0c;对于系统应用和三方应用策略有所不同…

实践笔记-harbor搭建(版本:2.9.0)

harbor搭建 1.下载安装包&#xff08;版本&#xff1a;2.9.0&#xff09;2.修改配置文件3.安装4.访问harbor5.可能用得上的命令: 环境&#xff1a;centos7 1.下载安装包&#xff08;版本&#xff1a;2.9.0&#xff09; 网盘资源&#xff1a;https://pan.baidu.com/s/1fcoJIa4x…

上海人工智能实验室大模型算法岗(实习)面经分享

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…