我应该捕获普通用户永远不会发生的错误吗?

bgc*_*ode 5 security django error-handling web

我有一行我用它来获取数据库行.get(field = ID).普通用户总是会发送一个ID存在于数据库中的内容,但黑客可能不会,并且会抛出DoesNotExist异常.明确地捕获它是否很重要,或者我应该在这种情况下保留未被捕获的异常?无论哪种方式,黑客都不会看到任何消息,因此无论如何都没有任何安全风险.

我也想知道是否应该记录此异常失败.有兴趣听听你们做什么作为一般经验法则,以及你为什么记录/捕获与你放弃未被捕获的异常的理由.

bla*_*ite 2

重要的是您在什么上下文中使用该字段。如果您通过我访问该页面,/profile/[ID]则会显示“未找到用户”页面。如果你做了类似的事情

ID = context["user"].id
Object.get(field = ID)
Run Code Online (Sandbox Code Playgroud)

我不会尝试单独捕获错误。

总而言之,我保存了正常用户行为无法导致的所有错误。然后我可以查看我的错误日志,并可以直接查看我的网站在哪里引发故障或者黑客是否试图找到安全漏洞。

之后我修复了这个未定义的行为,以便错误日志尽可能为空。