跳转到主要内容
Chinese, Simplified

描述


安全地处理错误是安全编码的一个关键方面。有两种类型的错误需要特别注意。第一个是在处理安全控制本身时发生的异常。重要的是,这些异常不会启用对策通常不允许的行为。作为开发人员,您应该考虑安全机制通常有三种可能的结果:

  • 允许操作
  • 禁止操作
  • 例外

通常,您应该设计安全机制,以便故障将遵循与禁止操作相同的执行路径。例如,如果在处理期间存在异常,则isAuthorized(),isAuthenticated()和validate()等安全方法都应返回false。如果安全控制可以抛出异常,那么它们必须非常清楚该条件的确切含义。

另一种类型的安全相关异常是在不属于安全控制的代码中。如果它们影响应用程序是否正确调用控件,则这些异常与安全性相关。异常可能导致安全方法在不应该被调用时,或者它可能会影响安全控件中使用的变量的初始化。

例子


isAdmin

isAdmin = true; 
try { 
  codeWhichMayFail(); 
  isAdmin = isUserInRole( “Administrator” ); 
}
catch (Exception ex)
{
  log.write(ex.toString()); 
} 


如果codeWhichMayFail()失败,则默认情况下用户是管理员。这显然是一种安全风险。在这种情况下,修复很简单。它涉及简单的逻辑反转。在示例实例中,这很容易做到。

isAdmin = false;
try {
  codeWhichMayFail();
  isAdmin = isUserInrole( "Administrator" );
}
catch (Exception ex)
{
  log.write(ex.toString());
}


此示例也是最低权限原则的示例,该原则声明您永远不应授予超出要求的访问权限。如果codeWhichmayFail()需要管理员访问权限,我们应该在运行该代码之前验证管理员访问权限。

相关漏洞

相关控制


相关原则


参考


https://buildsecurityin.us-cert.gov/articles/knowledge/principles/faili…

 

原文:https://www.owasp.org/index.php/Fail_securely

本文:

讨论:加入知识星球或者小红圈【首席架构师圈】

Article
知识星球
 
微信公众号
 
视频号