我正在保存到数据库。但是在保存过程中出现错误。当我像下面这样用try-catch块捕获它时,它不会给出详细的信息。
try{
//save to database
}
catch (Exception ex){
Console.WriteLine(ex.message);
}
但是如果我返回InnerException。消息它返回相当详细的信息。
我的问题是,就安全性而言,它是否有意义让我返回一个InnerException。消息,而不是ex.Message,在WebAPI中的最终用户?
或者我必须手动捕获相关错误并返回?如果是的话,能给我点提示吗?
这个问题没有单一的答案。给出完整的异常可能会带来多个信息安全问题。您可以创建一个UserFacingException : Exception
,当您的代码抛出一个可以向用户重复的异常时:抛出该异常(或该异常的特定子类)。这包括代码本身可能捕获更具体异常的地方,并向上报告它,例如:
catch (SqlException sql) when (sql.ErrorCode = ...) // unique constraint violation
{
throw new UserFacingException("Username already exists", sql);
}
那么你可以这样做:
try
{
// whatever
}
catch (UserFacingException uex)
{
Console.WriteLine(uex.Message); // TODO: to user, not console
}
catch (Exception ex)
{
Log(ex);
Console.WriteLine("An unknown error occurred"); // TODO: to user, not console
}