当前位置: 首页 > news >正文

终极指南:OWASP Cheat Sheet Series教你掌握错误处理与日志记录的安全实践

终极指南:OWASP Cheat Sheet Series教你掌握错误处理与日志记录的安全实践

【免费下载链接】CheatSheetSeriesThe OWASP Cheat Sheet Series was created to provide a concise collection of high value information on specific application security topics.项目地址: https://gitcode.com/gh_mirrors/ch/CheatSheetSeries

OWASP Cheat Sheet Series是一个专注于提供特定应用安全主题高价值信息的简明集合,本文将深入解析其中错误处理和日志记录的最佳实践,帮助开发者构建更安全的应用程序。

为什么错误处理与日志记录对应用安全至关重要?

在电影之外,每一次攻击都始于攻击者的信息收集阶段。未处理的错误会在这个初始阶段为攻击者提供大量技术信息,如应用服务器、框架和库的名称及版本等,这对后续攻击至关重要。

错误处理问题不仅会泄露目标的大量信息,还可能被用于识别目标功能中的注入点。例如,一个500错误页面可能会泄露Struts2和Tomcat的版本信息,而SQL查询错误则可能暴露网站的安装路径,为攻击者提供可乘之机。

日志记录则是安全事件响应的关键。它不仅能用于一般调试、建立基线、业务流程监控,还在安全方面发挥着重要作用,如识别安全事件、监控策略违规、协助防抵赖控制、提供审计跟踪等。

错误处理的核心原则与最佳实践

错误处理的核心目标是:当发生意外错误时,应用程序返回通用响应给用户,而错误详情则在服务器端记录以便调查,而不是返回给用户。

标准Java Web应用程序

对于标准Java Web应用,可以在web.xml部署描述符级别配置全局错误处理程序。以下是Servlet规范2.5及以上版本的配置示例:

在web.xml文件中配置重定向:

<error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page>

error.jsp文件内容:

<%@ page language="java" isErrorPage="true" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%> <% String errorMessage = exception.getMessage(); //记录异常 response.setHeader("X-ERROR", "true"); response.setStatus(500); %> {"message":"发生错误,请重试"}

Java SpringMVC/SpringBoot Web应用程序

使用SpringMVC或SpringBoot时,可以通过实现以下类来定义全局错误处理程序。Spring Framework 6引入了基于RFC 7807的问题详情:

import org.springframework.http.HttpStatus; import org.springframework.http.ProblemDetail; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; @RestControllerAdvice public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(value = {Exception.class}) public ProblemDetail handleGlobalError(RuntimeException exception, WebRequest request) { //记录异常 return ProblemDetail.forStatusAndDetail(HttpStatus.INTERNAL_SERVER_ERROR, "发生错误,请重试"); } }

ASP NET Core Web应用程序

在ASP.NET Core中,可以将异常处理程序指定为专用的API控制器:

错误处理API控制器内容:

[Route("api/[controller]")] [ApiController] [AllowAnonymous] public class ErrorController : ControllerBase { [HttpGet] [HttpPost] [HttpHead] [HttpDelete] [HttpPut] [HttpOptions] [HttpPatch] public JsonResult Handle() { Exception exception = HttpContext.Features.Get<IExceptionHandlerFeature>()?.Error; //记录异常 var responseBody = new Dictionary<String, String>{ { "message", "发生错误,请重试" } }; JsonResult response = new JsonResult(responseBody); response.StatusCode = (int)HttpStatusCode.InternalServerError; Request.HttpContext.Response.Headers.Remove("X-ERROR"); Request.HttpContext.Response.Headers.Add("X-ERROR", "true"); return response; } }

在Startup.cs文件中定义异常处理程序到专用错误处理API控制器的映射:

public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/api/error"); app.UseStatusCodePages("text/plain", "状态码页面,状态码: {0}"); } app.UseMvc(); }

日志记录的关键要素与实施策略

日志记录是应用程序安全的重要组成部分。它应该在应用程序内部保持一致,在组织的应用程序组合中保持一致,并在相关时使用行业标准。

应该记录哪些事件?

安全监控、警报和报告的级别和内容需要在项目的需求和设计阶段确定,并且应该与信息安全风险成比例。在可能的情况下,始终记录以下内容:

  • 输入验证失败,如协议违规、不可接受的编码、无效的参数名称和值
  • 输出验证失败,如数据库记录集不匹配、无效的数据编码
  • 身份验证成功和失败
  • 授权(访问控制)失败
  • 会话管理失败,如Cookie会话标识值修改或可疑的JWT验证失败
  • 应用程序错误和系统事件,如语法和运行时错误、连接问题等
  • 应用程序及相关系统的启动和关闭,以及日志初始化
  • 高风险功能的使用,包括用户管理操作、系统管理权限的使用等

事件属性

每个日志条目需要包含足够的信息用于后续的监控和分析。应用程序日志必须记录每个事件的"何时、何地、谁和什么"。

这些属性将根据架构、应用程序类别和主机系统/设备而有所不同,但通常包括:

  • 何时:日志日期和时间、事件日期和时间、交互标识符
  • 何地:应用程序标识符、应用程序地址、服务、地理位置、窗口/表单/页面、代码位置
  • 谁:源地址、用户身份
  • 什么:事件类型、事件严重性、安全相关事件标志、描述

网络架构示例

以下是一个为客户提供业务功能的服务的网络架构示例。我们建议创建一个集中式系统来收集日志。可能有许多这样的服务,但所有服务都必须将日志安全地收集到集中式系统中。

如图所示,在网络级别,保存和下载日志的过程需要打开不同的网络访问(端口),用不同颜色突出显示箭头。此外,保存和下载由不同的应用程序执行。

日志的保护

日志机制和收集的事件数据必须受到保护,防止在传输过程中被篡改,以及在存储后被未授权访问、修改和删除。日志可能包含个人和其他敏感信息,或者数据可能包含有关应用程序代码和逻辑的信息。

  • 静态保护:建立篡改检测机制,尽快将日志数据存储或复制到只读介质,所有对日志的访问都必须被记录和监控,读取日志数据的权限应受到限制并定期审查。
  • 传输保护:如果日志数据通过不受信任的网络发送,使用安全的传输协议,考虑是否需要验证事件数据的来源,在将事件数据发送给第三方之前进行尽职调查。

如何避免常见的错误处理和日志记录陷阱?

  1. 不要在错误消息中泄露敏感信息,如技术栈版本、数据库结构等。
  2. 避免将详细的异常堆栈跟踪返回给用户,应使用通用错误消息。
  3. 不要完全禁用应用程序日志记录或必要的合规性事件日志记录。
  4. 避免在日志中记录敏感数据,如密码、访问令牌、个人身份信息等。
  5. 不要忽视日志的保护,确保日志数据的机密性、完整性和可用性。
  6. 不要忘记同步所有服务器和设备的时间,这对于事件关联至关重要。
  7. 不要在生产环境中使用开发人员异常页面,这可能泄露敏感信息。

总结

错误处理和日志记录是应用程序安全的关键组成部分。通过实施OWASP Cheat Sheet Series中概述的最佳实践,开发者可以显著提高应用程序的安全性,减少信息泄露的风险,并为安全事件响应提供有力支持。

OWASP Cheat Sheet Series提供了更多关于错误处理和日志记录的详细信息,可以在项目的cheatsheets目录中找到:

  • 错误处理:cheatsheets/Error_Handling_Cheat_Sheet.md
  • 日志记录:cheatsheets/Logging_Cheat_Sheet.md

通过遵循这些指南,开发者可以构建更安全、更可靠的应用程序,更好地保护用户数据和系统资源。

【免费下载链接】CheatSheetSeriesThe OWASP Cheat Sheet Series was created to provide a concise collection of high value information on specific application security topics.项目地址: https://gitcode.com/gh_mirrors/ch/CheatSheetSeries

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/708004/

相关文章:

  • GAN实现MNIST手写数字生成:从原理到实践
  • 三菱PLC通讯避坑指南:Java长连接读写时,网络闪断怎么办?
  • Material Design Lite字体优化:Web字体加载策略终极指南
  • 51单片机MPU6050 DMP驱动实现
  • Java开发者AI转型第十七课!SpringAI Tool Calling底层三剑客拆解与编程式注册源码实战
  • XState路由管理终极指南:如何与React Router/Vue Router无缝集成
  • 耐腐蚀PVDF管生产厂家-镇江苏一塑业有限公司 - 苏一塑业13914572689
  • 3分钟掌握!Monaco Editor运行时信息实时监控终极指南
  • 漫画脸描述生成提示词工程:如何用‘负面提示’规避常见崩坏(如多手指、畸形关节)
  • Rodio自定义解码器:如何扩展支持新的音频格式
  • 生态网络可视化终极指南:用Manim构建动态食物链模型
  • LVGL Spinner控件避坑指南:解决嵌入式GUI加载动画卡顿、内存泄漏的5个实战技巧
  • wechat-need-web规则配置详解:如何自定义URL过滤和Header修改
  • sofa-pbrpc Python客户端使用指南:跨语言RPC调用的简单方案
  • Keras训练历史可视化:从基础到高级技巧
  • 如何使用React Router构建智能投顾的投资建议路由流程
  • code buddy使用小结
  • 如何快速提升Windows游戏性能:OpenSpeedy开源游戏加速工具的完整指南
  • 终极指南:10分钟掌握Deno高性能HTTP服务器开发
  • 显卡驱动彻底卸载指南:如何使用DDU解决驱动残留问题
  • feature_engine vs Scikit-learn:为什么数据科学家都在转向这个特征工程神器
  • 【2026年网易雷火春招- 4月26日-第二题- 界面缓存】(题目+思路+JavaC++Python解析+在线测试)
  • 3个步骤掌握UABEAvalonia:跨平台Unity资源编辑器的终极指南
  • Chalktalk草图库深度探索:100+数学、物理、音频可视化示例
  • LangAlpha框架解析:快速构建LLM应用的轻量级Python工具
  • 达梦DM8数据库运维:批量清理SELECT长查询会话的两种实战脚本(附完整PL/SQL)
  • nli-MiniLM2-L6-H768企业实操:中小企业低成本部署情感分析与主题识别系统
  • 用Multisim仿真AM信号包络检波器:从原理到避坑,手把手教你分析惰性失真与底部切割
  • The Super Tiny Compiler:错误处理与异常捕获机制终极指南
  • 天猫超市购物卡回收指南,省钱有妙招! - 团团收购物卡回收