首页 > 解决方案 > str.split() 是否容易受到拒绝服务攻击?

问题描述

我有一个想要从 POST 请求中捕获和处理的 base64 uri:

def post(self, request, *args, **kwargs):

    image_data = request.POST.get('signature_base64', None)
    imgformat, imgstr = image_data.split(';base64,')

但是,我的代码 linter ( SonarCloud ) 将此标记为可能暴露为 DoS 攻击。

正则表达式可能具有指数执行时间,具体取决于输入字符串的模式和长度。例如,下面的示例可能导致应用程序拒绝服务:

模式:/(a+)+b/输入字符串: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacb

建议:修复使用 CPU 密集型功能的硬编码正则表达式模式(尽可能避免捕获、嵌套量词和反向引用,例如将上述模式替换为 (/a+b/))。当使用用户控制的输入定义正则表达式模式时,应清理最后一个以转义作为正则表达式语法一部分的字符。

我不确定如何防止这种情况发生。短绒是正确的吗?在这种情况下,最佳做法是什么?

标签: python-3.xdjangoregexsonarqubesonarlint

解决方案


推荐阅读