Jus*_*tin 5 php security exception-handling laravel laravel-5.1
我想在Laravel 5.1中抛出错误时设置要显示给用户的自定义消息.例如,在控制器中我可能有:
if(!has_access()){
abort('401', 'please contact support to gain access to this item.');
}
Run Code Online (Sandbox Code Playgroud)
然后我的自定义错误页面我会显示错误:
$exception->getMessage();
Run Code Online (Sandbox Code Playgroud)
但是,如果出现SQL错误或其他事件怎么办?那还不会设置我在错误页面上不知不觉地输出的异常消息吗?
getMessage()的PHP文档没有详细介绍.
如何在不引入任何安全风险的情况下设置特定的异常消息?
小智 2
但是,如果出现 SQL 错误或其他事件怎么办?这是否也会设置我会在不知不觉中在错误页面上输出的异常消息?
有可能,是的。PHP 不保证异常消息的内容将“安全”地显示给用户,并且某些类很可能会抛出消息中包含敏感信息的异常。
如果要使用异常向用户显示错误,请使用Exception这些异常的特定子类,并且仅在异常是该子类的实例时才打印消息,例如
class UserVisibleException extends Exception {
// You don't need any code in here, but you could add a custom constructor
// if you wanted to.
}
// Then, in your abort() function...
throw new UserVisibleException($message);
// Then, in your exception handler...
if ($exc instanceof UserVisibleException) {
print $exc->getMessage();
} else {
print "An internal error occurred.";
}
Run Code Online (Sandbox Code Playgroud)