Vigoli nieqsa misjuba fi 3.6% tar-repożitorji Python ittestjati

Ġew ippubblikati r-riżultati ta 'studju dwar il-vulnerabbiltà tal-kodiċi Python għal żbalji relatati mal-użu ħażin tal-virgoli fil-kodiċi. Il-problemi huma kkawżati mill-fatt li meta enumera, Python awtomatikament jikkonkatena l-kordi fil-lista jekk ma jkunux separati b'virgola, u jittratta wkoll il-valur bħala tuple jekk il-valur ikun segwit minn virgola. Wara li wettqu analiżi awtomatizzata ta '666 repożitorju GitHub b'kodiċi Python, ir-riċerkaturi identifikaw kwistjonijiet possibbli ta' virgola f'5% tal-proġetti studjati.

Spezzjoni manwali ulterjuri wriet li żbalji reali kienu preżenti biss f'24 repożitorju (3.6%), u l-1.4% li kien fadal kienu pożittivi foloz (pereżempju, virgola setgħet titħalla barra deliberatament bejn il-linji biex tikkonkatena mogħdijiet ta' fajls b'ħafna linji, hashes twal, HTML blokki jew espressjonijiet SQL). Ta’ min jinnota li fost l-24 repożitorju bi żbalji reali kien hemm proġetti kbar bħal Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield u django-helpdesk. Madankollu, il-problemi bil-virgoli mhumiex speċifiċi għal Python u ħafna drabi joħorġu fi proġetti C/C++ (eżempji ta’ soluzzjonijiet riċenti huma LLVM, Mono, Tensorflow).

It-tipi ewlenin ta 'żbalji studjati:

  • Aċċidentalment nieqsa virgola fil-listi, tuples, u settijiet, li tikkawża kordi li jiġu konkatenati minflok jiġu interpretati bħala valuri separati. Pereżempju, f'Sentry, wieħed mit-testijiet tilef virgola bejn is-sekwenzi "rilaxxi" u "discover" fil-lista, li rriżultat fil-verifika ta' handler ineżistenti "/releasesdiscover", minflok ma ċċekkja "/releases" u " /skopri" separatament.
    Vigoli nieqsa misjuba fi 3.6% tar-repożitorji Python ittestjati

    Eżempju ieħor huwa li virgola nieqsa f'rapidpro ikkawżat li żewġ regoli differenti jingħaqdu fuq il-linja 572:

    Vigoli nieqsa misjuba fi 3.6% tar-repożitorji Python ittestjati

  • Virgola nieqsa fl-aħħar ta' definizzjoni ta' tuple b'element wieħed, li tikkawża li l-assenjazzjoni tassenja tip regolari aktar milli tuple. Pereżempju, l-espressjoni "valuri = (1,)" se tirriżulta f'assenjazzjoni għal varjabbli ta 'tuple ta' element wieħed, iżda "valuri = (1)" se tirriżulta f'assenjazzjoni ta 'tip sħiħ. Il-parentesi f'dawn l-assenjazzjonijiet ma jaffettwawx id-definizzjoni tat-tip u huma fakultattivi, u l-preżenza ta 'tuple hija determinata mill-parser ibbażata biss fuq il-preżenza ta' virgoli. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # se tiġi assenjata string minflok tuple. ) }
  • Is-sitwazzjoni opposta hija virgoli żejda waqt l-assenjazzjoni. Jekk virgola titħalla aċċidentalment fit-tmiem ta' assenjazzjoni, tuple tiġi assenjata bħala l-valur minflok it-tip tas-soltu (per eżempju, jekk "valur = 1," hija speċifikata minflok "valur = 1").

Sors: opennet.ru

Żid kumment