Java异常泄露敏感信息_浅谈“异常信息泄露(应用程序错误)”

详细的各种修复方案请参考如下:

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

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

java.lang.Throwable

/jsp/common/error.html

500

/jsp/common/error.html

404

/jsp/common/error.html

403

/jsp/common/error.hrml

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种方式:

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

error-business

error-parameter

启动测试项目,经验证,各种层面所抛出的异常(业务异常BusinessException、

参数异常ParameterException和其它的异常Exception)都能准确显示定义的异常处理页面,

达到了统一异常处理的目标。使用SimpleMappingExceptionResolver进行异常处理,

具有集成简单、有良好的扩展性、对已有代码没有入侵性等优点,但该方法仅能获取到异常信息,

若在出现异常时,对需要获取除异常以外的数据的情况不适用。

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

public class MyExceptionHandler implements HandlerExceptionResolver {

public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,

Exception ex) {

Mapmodel = new HashMap();

model.put("ex", ex);

// 根据不同错误转向不同页面

if(ex instanceof BusinessException) {

return new ModelAndView("error-business", model);

}else if(ex instanceof ParameterException) {

return new ModelAndView("error-parameter", model);

} else {

return new ModelAndView("error", model);

}

}

}

在Spring的配置文件applicationContext.xml中增加以下内容:

启动测试项目,经验证各种层抛出的异常(业务异常BusinessException、

参数异常ParameterException和其它的异常Exception)都能准确显示定义的异常处理页面,

达到了统一异常处理的目标,使用实现HandlerExceptionResolver接口的异常处理器进行异常处理,

具有集成简单、有良好的扩展性、对已有代码没有入侵性等优点,同时,

在异常处理时能获取导致出现异常的对象,有利于提供更详细的异常处理信息。

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

public class BaseController {

/** 基于@ExceptionHandler异常处理 */

@ExceptionHandler

public String exp(HttpServletRequest request, Exception ex) {

request.setAttribute("ex", ex);

// 根据不同错误转向不同页面

if(ex instanceof BusinessException) {

return "error-business";

}else if(ex instanceof ParameterException) {

return "error-parameter";

} else {

return "error";

}

}

}

修改代码,使所有需要异常处理的Controller都继承该类,如下所示,

修改后的TestController类继承于BaseController:

public class TestController extends BaseController

使用@ExceptionHandler注解实现异常处理,具有集成简单、有扩展性好

(只需要将要异常处理的Controller类继承于BaseController即可)、

不需要附加Spring配置等优点,但该方法对已有代码存在入侵性(需要修改已有代码,

使相关类继承于BaseController),在异常处理时不能获取除异常以外的数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值