如题。在生产代码中,无法验证请求参数或格式时的日志级别是多少?
我混淆了这个谜题基于两点:
(1) 如果我将其记录到错误中。我担心如果一个黑客发送太多错误请求会导致我们的APP log 两个很多错误日志。
(2) 但如果我将其记录到调试或更低级别。我担心由于在生产应用程序中无法有效跟踪问题,日志将设置为警告。
那我的选择是什么?
如果由于没有系统错误但输入数据无效而导致验证失败,我将记录为信息或警告。如果您遇到系统异常等问题,例如数据库连接失败或空指针,则记录错误。否则,输入验证不一定构成错误,并且是一种照常发生的类型,因此是信息级别。
在黑客反复运行脚本发送“太多请求”的情况下,这可能被归类为拒绝服务攻击。在这种情况下,您需要确保您的防火墙软件设置为过滤这些,我不会在应用程序日志中担心它。
最后,如果黑客没有在拒绝服务阈值下完全轰炸您的系统,那么您可能需要编写一些逻辑来捕捉这种“错误验证”并记录一个带有明确错误消息的错误会知道去寻找,即一种特殊的错误。一个这样的例子是 sql 注入攻击,表单验证可能会捕获(并且您的应用程序中的某些层必须肯定捕获)。
根据您使用的日志记录框架的类型,您可能能够为此场景定义自己的错误级别或错误类别。
在我的程序中,我使用错误日志级别(或消息中的“错误”一词)来指示程序未能执行“它被指示执行的操作”。那么,这是没有“按指示”做的吗?我使用警告日志级别来报告可能(但不确定)表明某处存在问题的异常情况。
这些“请求参数”从何而来?如果这是一个客户端-服务器系统(Web 应用程序?),并且请求来自客户端,则服务器已被指示“为客户端服务”。如果客户端发送无效请求,服务器意味着(指定/设计)做什么?可能是拒绝请求并向客户端返回拒绝消息。在这种情况下,服务器只有在拒绝请求或返回消息失败时才会出错。也就是说,只有服务器中的错误才会算作“错误”。我会在警告级别报告无效的请求参数吗?如果我还提供了客户端程序,那么无效请求将表明客户端程序中存在错误,因此我将其记录为警告。如果客户端不受控制(例如 Web 浏览器),我不会将其报告为警告。
我都不会说。我会将请求写入数据库,这样我就可以一直查询它们。日志往往是倾倒场,当出现问题时很难破译。我总是想在他们进来时看到请求和响应。
至于黑客和拒绝服务,你必须建立逻辑来检测和阻止它。您的规则必须区分来自随机来源的高流量(一件好事)和一个或多个协同作用的恶意来源。你觉得你能做到吗?