Како Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Checkmarx Π±Π΅Π· Π΄Π° ΠΏΠΎΠ»ΡƒΠ΄ΠΈΡ‚Π΅

Π•Ρ˜ Π₯Π°Π±Ρ€!

Π’ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π°, Π½Π°ΡˆΠ°Ρ‚Π° компанија ΠΌΠ½ΠΎΠ³Ρƒ чСсто сС Π·Π°Π½ΠΈΠΌΠ°Π²Π° со Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° статички ΠΊΠΎΠ΄ΠΎΠ²ΠΈ (SAST). Надвор ΠΎΠ΄ ΠΊΡƒΡ‚ΠΈΡ˜Π°Ρ‚Π° ситС Ρ‚ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ просСчно. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, сС зависи ΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ сС користат Π²ΠΎ Π½Π΅Π³ΠΎ, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΎΠ΄ Ρ‚ΠΎΠ° ΠΊΠΎΠ»ΠΊΡƒ Π΄ΠΎΠ±Ρ€ΠΎ ΠΎΠ²ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ сС ΠΎΠΏΡ„Π°Ρ‚Π΅Π½ΠΈ со ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·Π°. Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΌΠΎΠ΅ мислСњС, Π΅Π΄Π΅Π½ ΠΎΠ΄ Π½Π°Ρ˜Π²Π°ΠΆΠ½ΠΈΡ‚Π΅ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡƒΠΌΠΈ ΠΏΡ€ΠΈ ΠΈΠ·Π±ΠΎΡ€ΠΎΡ‚ Π½Π° Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° SAST Π΅ способноста Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈ Π½Π° спСцификитС Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΈΠΌΠ΅Π½ΠΎ, Π΄Π° сС ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ ΠΈ ΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ почСсто сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π°Π°Ρ‚, Custom Queries.

Како Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Checkmarx Π±Π΅Π· Π΄Π° ΠΏΠΎΠ»ΡƒΠ΄ΠΈΡ‚Π΅

ΠΠ°Ρ˜Ρ‡Π΅ΡΡ‚ΠΎ користимС Checkmarx - ΠΌΠ½ΠΎΠ³Ρƒ интСрСсСн ΠΈ моќСн Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΈ. Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌ Π·Π° ΠΌΠΎΠ΅Ρ‚ΠΎ искуство Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° Π·Π° Ρ‚ΠΎΠ°.

Π‘ΠΎΠ΄Ρ€ΠΆΠΈΠ½Π°

Π’Π»Π΅Π³ΡƒΠ²Π°ΡšΠ΅

Π—Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊ, Π±ΠΈ сакал Π΄Π° ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡Π°ΠΌ Π΅Π΄Π½Π° ΠΎΠ΄ Ρ€Π΅Ρ‚ΠΊΠΈΡ‚Π΅ написи Π½Π° руски јазик Π·Π° карактСристикитС Π½Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΏΡ€Π°ΡˆΠ°ΡšΠ° Π·Π° Checkmarx. ОбјавСно Π΅ Π½Π° Π₯Π°Π±Ρ€Π΅ Π½Π° ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π½Π° 2019 Π³ΠΎΠ΄ΠΈΠ½Π° ΠΏΠΎΠ΄ наслов: β€žΠ—Π΄Ρ€Π°Π²ΠΎ, ЧСкмаркс! Како Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π±Π°Ρ€Π°ΡšΠ΅ Π·Π° Checkmarx SAST ΠΈ Π΄Π° Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ ΠΎΠ΄Π»ΠΈΡ‡Π½ΠΈ пропусти.

Π˜ΡΠΏΠΈΡ‚ΡƒΠ²Π° Π΄Π΅Ρ‚Π°Π»Π½ΠΎ ΠΊΠ°ΠΊΠΎ Π΄Π° сС Π½Π°ΠΏΠΈΡˆΠ°Ρ‚ ΠΏΡ€Π²ΠΈΡ‚Π΅ ΠΏΡ€Π°ΡˆΠ°ΡšΠ° Π²ΠΎ CxQL (Checkmarx Query Language) Π·Π° нСкоја Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΈ Π³ΠΈ ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π° основнитС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π°Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·Π°.

НСма Π΄Π° Π³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π°ΠΌ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅ опишано Π²ΠΎ Π½Π΅Π³ΠΎ, ΠΈΠ°ΠΊΠΎ Π½Π΅ΠΊΠΎΠΈ раскрсници сСпак ќС Π±ΠΈΠ΄Π°Ρ‚ присутни. Π’ΠΎ ΠΌΠΎΡ˜Π°Ρ‚Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС сС ΠΎΠ±ΠΈΠ΄Π°ΠΌ Π΄Π° составам Π΅Π΄Π΅Π½ Π²ΠΈΠ΄ β€žΠ·Π±ΠΈΡ€ΠΊΠ° Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈβ€œ, список Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π° Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΠΊΠΎΠΈ сС срСтнав Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΌΠΎΡ˜Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° со Checkmarx. ΠœΠΎΡ€Π°Π² Π΄Π° Π³ΠΎ срСдам ΠΌΠΎΠ·ΠΎΠΊΠΎΡ‚ Π·Π° ΠΌΠ½ΠΎΠ³Ρƒ ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. ПонСкогаш нСмашС Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π° понСкогаш бСшС Π΄ΡƒΡ€ΠΈ ΠΈ Ρ‚Π΅ΡˆΠΊΠΎ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΎΠ½Π° ΡˆΡ‚ΠΎ сС Π±Π°Ρ€Π°. Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΌΠΎΠ΅Ρ‚ΠΎ искуство ΠΈ нСпроспиСнитС ноќи Π½Π΅ΠΌΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ Π·Π°Π»ΡƒΠ΄Π½ΠΈ, Π° ΠΎΠ²Π°Π° β€žΠ·Π±ΠΈΡ€ΠΊΠ° Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ΠΈ ΠΏΡ€Π°ΡˆΠ°ΡšΠ°β€œ ќС Π²ΠΈ Π·Π°ΡˆΡ‚Π΅Π΄ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ часа ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π½Π΅Ρ€Π²Π½ΠΈ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ. Π—Π½Π°Ρ‡ΠΈ, Π΄Π° ΠΏΠΎΡ‡Π½Π΅ΠΌΠ΅!

ΠžΠΏΡˆΡ‚ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°

ΠŸΡ€Π²ΠΎ, Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ основни ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΈ ΠΈ процСсот Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° со ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°, Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°ΡšΠ΅ ΡˆΡ‚ΠΎ ќС сС случи слСдно. И, исто Ρ‚Π°ΠΊΠ°, Π·Π°Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π΅ ΠΊΠ°ΠΆΡƒΠ²Π° Π½ΠΈΡˆΡ‚ΠΎ Π·Π° ΠΎΠ²Π° ΠΈΠ»ΠΈ Π΅ ΠΌΠ½ΠΎΠ³Ρƒ распространСта Π²ΠΎ структурата, ΡˆΡ‚ΠΎ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ.

  1. ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π²ΠΎ зависност ΠΎΠ΄ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ поставСното ΠΈΠ·Π±Ρ€Π°Π½ΠΎ Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ (Π·Π±ΠΈΡ€ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°). ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π±Ρ€ΠΎΡ˜ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ поставСни поставки, Π° Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ структуриратС зависи ΠΎΠ΄ спСцификитС Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ процСс. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎ јазик ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ поставСни Π·Π° сСкој ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π‘Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° влијаС Π½Π° Π±Ρ€Π·ΠΈΠ½Π°Ρ‚Π° ΠΈ точноста Π½Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ.

    Како Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Checkmarx Π±Π΅Π· Π΄Π° ΠΏΠΎΠ»ΡƒΠ΄ΠΈΡ‚Π΅ΠŸΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Preset Π²ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΎΡ‚ Checkmarx

  2. ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° сС ΡƒΡ€Π΅Π΄ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½Π° Π°Π»Π°Ρ‚ΠΊΠ° Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° CxAuditor. Ова Π΅ дСсктоп Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° која сС ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π° со сСрвСр со Checkmarx. Оваа Π°Π»Π°Ρ‚ΠΊΠ° ΠΈΠΌΠ° Π΄Π²Π° Π½Π°Ρ‡ΠΈΠ½ΠΈ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°: ΡƒΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ вСќС ΠΈΠ·Π²Ρ€ΡˆΠ΅Π½ΠΎΡ‚ΠΎ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅.

    Како Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Checkmarx Π±Π΅Π· Π΄Π° ΠΏΠΎΠ»ΡƒΠ΄ΠΈΡ‚Π΅CxAudit ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ

  3. ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π²ΠΎ Checkmarx сС ΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎ јазик, односно сСкој јазик ΠΈΠΌΠ° свој сСт Π½Π° ΠΏΡ€Π°ΡˆΠ°ΡšΠ°. Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Π½Π΅ΠΊΠΎΠΈ ΠΎΠΏΡˆΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΊΠΎΠΈ Π²Π°ΠΆΠ°Ρ‚ Π±Π΅Π· Ρ€Π°Π·Π»ΠΈΠΊΠ° Π½Π° Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚, Ρ‚ΠΎΠ° сС Ρ‚Π°ΠΊΠ°Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ‚Π΅ основни ΠΏΡ€Π°ΡˆΠ°ΡšΠ°. Π’ΠΎ најголСм Π΄Π΅Π», основнитС ΠΏΡ€Π°ΡˆΠ°ΡšΠ° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΡˆΡ‚ΠΎ Π³ΠΈ користат Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

    Како Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Checkmarx Π±Π΅Π· Π΄Π° ΠΏΠΎΠ»ΡƒΠ΄ΠΈΡ‚Π΅ΠŸΠΎΠ΄Π΅Π»Π±Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠΎ јазик

  4. ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° сС β€žΠ˜Π·Π²Ρ€ΡˆΠ»ΠΈΠ²ΠΈβ€œ ΠΈ β€žΠΠ΅ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈβ€œ (Π˜Π·Π²Ρ€ΡˆΠ΅Π½ΠΈ ΠΈ Π½Π΅ΠΈΠ·Π²Ρ€ΡˆΠ΅Π½ΠΈ). НС баш Ρ‚ΠΎΡ‡Π½ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅, спорСд ΠΌΠ΅Π½Π΅, Π½ΠΎ Ρ‚ΠΎΠ° Π΅ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅. Π—Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Π΅ Π΄Π΅ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° β€žΠ˜Π·Π²Ρ€ΡˆΠ»ΠΈΠ²ΠΈβ€œ ќС сС ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Ρ‚ Π²ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π²ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΎΡ‚, Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° β€žΠΠ΅ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈβ€œ сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ само Π·Π° Π΄Π° сС користат Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π±Π°Ρ€Π°ΡšΠ° (Π²ΠΎ ΡΡƒΡˆΡ‚ΠΈΠ½Π°, само Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°).

    Како Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Checkmarx Π±Π΅Π· Π΄Π° ΠΏΠΎΠ»ΡƒΠ΄ΠΈΡ‚Π΅ΠžΠ΄Ρ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ‚ΠΈΠΏΠΎΡ‚ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΏΡ€ΠΈ ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅

  5. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Π½ΠΎΠ²ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡƒΠ²Π°Ρ‚Π΅/ΠΏΡ€Π΅ΠΏΠΈΡˆΡƒΠ²Π°Ρ‚Π΅ постоСчкитС. Π—Π° Π΄Π° Π³ΠΎ ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π²ΠΎ Π΄Ρ€Π²ΠΎΡ‚ΠΎ, ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ со дСсното ΠΊΠΎΠΏΡ‡Π΅ ΠΈ ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ β€žOverrideβ€œ ΠΎΠ΄ ΠΏΠ°Ρ“Π°Ρ‡ΠΊΠΎΡ‚ΠΎ ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС Π·Π°ΠΏΠ°ΠΌΠ΅Ρ‚ΠΈ ΠΎΠ²Π΄Π΅ Π΄Π΅ΠΊΠ° Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΡ€Π²ΠΈΡ‡Π½ΠΎ Π½Π΅ сС Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ΠΈ Π²ΠΎ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ поставСнитС поставки ΠΈ Π½Π΅ сС Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ. Π—Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° Π³ΠΈ користитС, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Π²ΠΎ ΠΌΠ΅Π½ΠΈΡ‚ΠΎ β€žPreset Managerβ€œ Π²ΠΎ инструмСнтот. ΠŸΡ€Π΅ΠΏΠΈΡˆΠ°Π½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π³ΠΈ Π·Π°Π΄Ρ€ΠΆΡƒΠ²Π°Π°Ρ‚ своитС поставки, односно Π°ΠΊΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π±ΠΈΠ»ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, Ρ‚ΠΎΠ° ќС останС Ρ‚Π°ΠΊΠ° ΠΈ ќС сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π° вСднаш.

    Како Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Checkmarx Π±Π΅Π· Π΄Π° ΠΏΠΎΠ»ΡƒΠ΄ΠΈΡ‚Π΅ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π½ΠΎΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π²ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΎΡ‚ Π½Π° Preset Manager

  6. Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ, сС Π³Ρ€Π°Π΄ΠΈ β€žΠ΄Ρ€Π²ΠΎβ€œ Π½Π° Π±Π°Ρ€Π°ΡšΠ°, ΡˆΡ‚ΠΎ зависи ΠΎΠ΄ ΡˆΡ‚ΠΎ. ΠŸΡ€Π²ΠΎ сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΊΠΎΠΈ собираат ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π° Π²Ρ‚ΠΎΡ€ΠΎ ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ Π³ΠΈ користат. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π΅ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½, ΠΏΠ° Π°ΠΊΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС користат Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ постоСчкото ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‚ΠΎΠ³Π°Ρˆ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ°, ΠΎΠ²Π° ќС Π³ΠΎ Π½Π°ΠΌΠ°Π»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅.

  7. ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠΌΠ΅Π½Π°Ρ‚ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½ΠΈΠ²ΠΎΠ°:

  • Π—Π° Ρ†Π΅Π»ΠΈΠΎΡ‚ систСм - ќС сС користи Π·Π° сСкоС ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ Π½Π° кој Π±ΠΈΠ»ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

  • На Π½ΠΈΠ²ΠΎ Π½Π° Ρ‚ΠΈΠΌ (Π’ΠΈΠΌ) - ќС сС користи само Π·Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π²ΠΎ ΠΈΠ·Π±Ρ€Π°Π½ΠΈΠΎΡ‚ Ρ‚ΠΈΠΌ.

  • На Π½ΠΈΠ²ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ - ЌС сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π° Π²ΠΎ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

    Како Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Checkmarx Π±Π΅Π· Π΄Π° ΠΏΠΎΠ»ΡƒΠ΄ΠΈΡ‚Π΅ΠžΠ΄Ρ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° ΠΊΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ ќС сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π°

β€žΠ Π΅Ρ‡Π½ΠΈΠΊβ€œ Π·Π° ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΡ†ΠΈ

И ќС Π·Π°ΠΏΠΎΡ‡Π½Π°ΠΌ со Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΡˆΡ‚ΠΎ ΠΌΠΈ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π° ΠΏΡ€Π°ΡˆΠ°ΡšΠ°, Π° исто Ρ‚Π°ΠΊΠ° ќС ΠΏΠΎΠΊΠ°ΠΆΠ°ΠΌ Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΊΠΎΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ќС Π³ΠΎ поСдностават ΠΆΠΈΠ²ΠΎΡ‚ΠΎΡ‚.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со списоци

- Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ (list2 - list1)
* пСрСсСчСниС списков (list1 * list2)
+ слоТСниС списков (list1 + list2)

& (логичСскоС И) - ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ списки ΠΏΠΎ совпадСнию (list1 & list2), Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΡŽ (list1 * list2)
| (логичСскоС Π˜Π›Π˜) - ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ списки ΠΏΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌΡƒ поиску (list1 | list2)

Π‘ΠΎ списками Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:  ^  &&  ||  %  / 

Π‘ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ½Π°Ρ˜Π΄Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ

Π’ΠΎ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° скСнираниот јазик, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ список Π½Π° апсолутно ситС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΡˆΡ‚ΠΎ Π³ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°Π» Checkmarx (ΠΆΠΈΡ†ΠΈ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, класи, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈΡ‚Π½.). Ова Π΅ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ простор Π½Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ Π΄ΠΎ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС пристапи All. Односно Π΄Π° Π±Π°Ρ€Π°Ρ‚Π΅ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ со ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΎ ΠΈΠΌΠ΅ searchMe, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‚Π΅, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ ΠΈΠΌΠ΅ Π½ΠΈΠ· ситС ΠΏΡ€ΠΎΠ½Π°Ρ˜Π΄Π΅Π½ΠΈ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ:

// Π’Π°ΠΊΠΎΠΉ запрос выдаст всС элСмСнты
result = All;

// Π’Π°ΠΊΠΎΠΉ запрос выдаст всС элСмСнты, Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… присутствуСт β€œsearchMeβ€œ
result = All.FindByName("searchMe");

Но, Π°ΠΊΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‚Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ јазик кој ΠΏΠΎΡ€Π°Π΄ΠΈ нСкоја ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π½Π΅ Π±ΠΈΠ» Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ Π²ΠΎ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, groovy Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Android), ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΡˆΠΈΡ€ΠΈΡ‚Π΅ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚Π΅Π½ простор ΠΏΡ€Π΅ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°:

result = AllMembers.All.FindByName("searchMe");

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊ

ОвиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сС користат Π²ΠΎ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ Π΅Π²Π΅ ΠΌΠ°Π» лист Π·Π° ΠΈΠ·ΠΌΠ°ΠΌΠΈ Π·Π° Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‡Π°Ρ‚:

// КакиС Π΄Π°Π½Π½Ρ‹Π΅ second Π²Π»ΠΈΡΡŽΡ‚ Π½Π° first.
// Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами - ВО (second) Ρ‡Ρ‚ΠΎ влияСт Π½Π°  ΠœΠ•ΠΠ― (first).
result = first.DataInfluencedBy(second);

// КакиС Π΄Π°Π½Π½Ρ‹Π΅ first Π²Π»ΠΈΡΡŽΡ‚ Π½Π° second.
// Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами - Π― (first) влияю Π½Π° ВО (second).
result = first.DataInfluencingOn(second);

Π”ΠΎΠ±ΠΈΠ²Π°ΡšΠ΅ ΠΈΠΌΠ΅/ΠΏΠ°Ρ‚ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°

ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄ΠΎΠ±ΠΈΡ˜Π°Ρ‚ ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Π½Π° Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ (ΠΈΠΌΠ΅ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π²ΠΎ која Π΅ ΠΏΡ€ΠΎΠ½Π°Ρ˜Π΄Π΅Π½ записот, Π½ΠΈΠ·Π° ΠΈΡ‚Π½.), Π½ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π΅ ΠΊΠ°ΠΆΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ Π΄Π° сС Π΄ΠΎΠ±ΠΈΡ˜Π°Ρ‚ ΠΈ Π΄Π° сС користат. Π—Π½Π°Ρ‡ΠΈ, Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, Ρ‚Ρ€Π΅Π±Π° Π΄Π° пристапитС Π΄ΠΎ ΡΠ²ΠΎΡ˜ΡΡ‚Π²ΠΎΡ‚ΠΎ LinePragma ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π½ΠΈ сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ќС Π±ΠΈΠ΄Π°Ρ‚ Π»ΠΎΡ†ΠΈΡ€Π°Π½ΠΈ Π²ΠΎ Π½Π΅Π³ΠΎ:

// Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π°ΠΉΠ΄Π΅ΠΌ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
CxList methods = Find_Methods();

// Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Π½Π°ΠΉΠ΄Π΅ΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ scope
CxList scope = methods.FindByName("scope");

// Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ
string current_filename = scope.GetFirstGraph().LinePragma.FileName;

// А Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠΌ - строку, Π³Π΄Π΅ нашлось срабатываниС
int current_line = scope.GetFirstGraph().LinePragma.Line;

// Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΠΌΡƒ
// НапримСр ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅
CxList inFile = All.FindByFileName(current_filename);

// Или Π½Π°ΠΉΡ‚ΠΈ Ρ‡Ρ‚ΠΎ происходит Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ строкС
CxList inLine = inFile.FindByPosition(current_line);

Π’Ρ€Π΅Π΄ΠΈ Π΄Π° сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° FileName Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ ја содрТи ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° Π΄ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, бидСјќи Π³ΠΎ користСвмС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ GetFirstGraph.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΠ΄ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ

Π’ΠΎ CxQL ΠΈΠΌΠ° посСбна ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° result, кој Π³ΠΎ Π²Ρ€Π°ΡœΠ° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ пишано ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ. Вој сС ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·ΠΈΡ€Π° вСднаш ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ срСдни Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π²ΠΎ Π½Π΅Π³ΠΎ, ΠΌΠ΅Π½ΡƒΠ²Π°Ρ˜ΡœΠΈ Π³ΠΈ ΠΈ Ρ€Π°Ρ„ΠΈΠ½ΡƒΠ²Π°Ρ˜ΡœΠΈ Π³ΠΈ Π΄ΠΎΠ΄Π΅ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅. Но, Π°ΠΊΠΎ Π²ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π½Π΅ΠΌΠ° Π΄ΠΎΠ΄Π΅Π»ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΎΠ²Π°Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° returnβ€” Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ сСкогаш ќС Π±ΠΈΠ΄Π΅ Π½ΡƒΠ»Π°.

Π‘Π»Π΅Π΄Π½ΠΎΡ‚ΠΎ Π±Π°Ρ€Π°ΡšΠ΅ Π½Π΅ΠΌΠ° Π΄Π° Π½ΠΈ Π²Ρ€Π°Ρ‚ΠΈ Π½ΠΈΡˆΡ‚ΠΎ ΠΊΠ°ΠΊΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΈ сСкогаш ќС Π±ΠΈΠ΄Π΅ ΠΏΡ€Π°Π·Π½ΠΎ:

// Находим элСмСнты foo
CxList libraries = All.FindByName("foo");

Но, ΠΎΡ‚ΠΊΠ°ΠΊΠΎ Π³ΠΎ Π΄ΠΎΠ΄Π΅Π»ΠΈΠ²ΠΌΠ΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ Π½Π° ΠΌΠ°Π³ΠΈΡ‡Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ќС Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΡˆΡ‚ΠΎ Π½ΠΈ Π²Ρ€Π°ΡœΠ° овој ΠΏΠΎΠ²ΠΈΠΊ:

// Находим элСмСнты foo
CxList libraries = All.FindByName("foo");

// Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€Π°Π²ΠΈΠ»Π°
result = libraries

// Или Π΅Ρ‰Π΅ ΠΊΠΎΡ€ΠΎΡ‡Π΅
result = All.FindByName("foo");

ΠšΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°

ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π²ΠΎ Checkmarx ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Ρ€Π΅Ρ‡Π°Ρ‚ Π°Π½Π°Π»ΠΎΠ³Π½ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π²ΠΎ ΠΎΠ±ΠΈΡ‡Π΅Π½ програмски јазик. Кога ΠΏΠΈΡˆΡƒΠ²Π°Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Ρ€ΠΎ Π΄Π° Π³ΠΈ користитС Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€Π°ΡˆΠ°ΡšΠ°. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±Π° сСкој ΠΏΠ°Ρ‚ Π΄Π° Π³ΠΈ Π±Π°Ρ€Π°Ρ‚Π΅ ситС ΠΏΠΎΠ²ΠΈΡ†ΠΈ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚, само ΠΏΠΎΠ²ΠΈΠΊΠ°Ρ˜Ρ‚Π΅ Π³ΠΎ саканото ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°
CxList methods = Find_Methods();

// Π˜Ρ‰Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ foo. 
// Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ false ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΡ‰Π΅ΠΌ Π±Π΅Π· Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊ рСгистру
result = methods.FindByShortName("foo", false);

Овој пристап Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π³ΠΎ скратитС ΠΊΠΎΠ΄ΠΎΡ‚ ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° Π³ΠΎ Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°.

РСшавањС Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ

Π‘Π΅Ρ‡Π°

Кога Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ со Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π°, понСкогаш Π½Π΅ Π΅ ΠΌΠΎΠΆΠ½ΠΎ вСднаш Π΄Π° Π³ΠΎ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ посакуваното Π±Π°Ρ€Π°ΡšΠ΅ ΠΈ Ρ‚Ρ€Π΅Π±Π° Π΄Π° СкспСримСнтиратС, ΠΏΡ€ΠΎΠ±ΡƒΠ²Π°Ρ˜ΡœΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ. Π—Π° Ρ‚Π°ΠΊΠΎΠ² ΡΠ»ΡƒΡ‡Π°Ρ˜, Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° Π»ΠΎΠ³ΠΈΡ€Π°ΡšΠ΅, ΠΊΠΎΠ΅ сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π° Π½Π° слСдниов Π½Π°Ρ‡ΠΈΠ½:

// Находим Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ
CxList toLog = All.FindByShortName("log");

// Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ строку ΠΈ отправляСм Π² Π»ΠΎΠ³
cxLog.WriteDebugMessage (β€œnumber of DOM elements =” + All.Count);

Но, Π²Ρ€Π΅Π΄ΠΈ Π΄Π° сС Π·Π°ΠΏΠ°ΠΌΠ΅Ρ‚ΠΈ Π΄Π΅ΠΊΠ° овој ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΡ„Π°ΡœΠ° само ΠΊΠ°ΠΊΠΎ Π²Π»Π΅Π· Π½ΠΈΠ·Π°, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Π½Π΅ΠΌΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π½Π° листа Π½Π° ΠΏΡ€ΠΎΠ½Π°Ρ˜Π΄Π΅Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΊΠ°ΠΊΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΏΡ€Π²Π°Ρ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π°. Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΎΠΏΡ†ΠΈΡ˜Π°, која сС користи Π·Π° Π΄Π΅Π±Π°Π³ΠΈΡ€Π°ΡšΠ΅, Π΅ ΠΎΠ΄Π²Ρ€Π΅ΠΌΠ΅-Π½Π°Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° сС Π΄ΠΎΠ΄Π΅Π»ΡƒΠ²Π° Π½Π° ΠΌΠ°Π³ΠΈΡ‡Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° result Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ ΠΈ Π²ΠΈΠ΄Π΅Ρ‚Π΅ ΡˆΡ‚ΠΎ ќС сС случи. Овој пристап Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΡƒΠ΄ΠΎΠ±Π΅Π½; Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅Ρ‚Π΅ сигурни Π΄Π΅ΠΊΠ° Π½Π΅ΠΌΠ° Π·Π°ΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со ΠΎΠ²Π° Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ послС result ΠΈΠ»ΠΈ Сдноставно ΠΊΠΎΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ. Или ΠΌΠΎΠΆΠ΅Ρ‚Π΅, ΠΊΠ°ΠΊΠΎ ΠΌΠ΅Π½Π΅, Π΄Π° Π·Π°Π±ΠΎΡ€Π°Π²ΠΈΡ‚Π΅ Π΄Π° отстранитС Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Ρ‚Π°ΠΊΠ²ΠΈ ΠΏΠΎΠ²ΠΈΡ†ΠΈ ΠΎΠ΄ Π³ΠΎΡ‚ΠΎΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈ Π΄Π° сС Π·Π°ΠΏΡ€Π°ΡˆΠ°Ρ‚Π΅ Π·ΠΎΡˆΡ‚ΠΎ Π½ΠΈΡˆΡ‚ΠΎ Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°.

ПопогодСн Π½Π°Ρ‡ΠΈΠ½ Π΅ Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ°Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ return со ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€. Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ ќС Π·Π°Π²Ρ€ΡˆΠΈ ΠΈ ќС ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΡˆΡ‚ΠΎ сС случило ΠΊΠ°ΠΊΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π³ΠΎ напишавмС:

// Находим Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ
CxList toLog = All.FindByShortName("log");

// Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния
return toLog

//ВсС, Ρ‡Ρ‚ΠΎ написано дальшС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ
result = All.DataInfluencedBy(toLog)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ со Π½Π°Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅

ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ ситуации ΠΊΠΎΠ³Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° пристапитС Π΄ΠΎ Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° CxAudit (која сС користи Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°). МоТС Π΄Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π·Π° ΠΎΠ²Π°, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΏΠ°Π΄ΠΎΠ²ΠΈ, нСнадСјни Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ° Π½Π° Windows, BSOD ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½ΠΈ ситуации ΠΊΠΎΠΈ сС Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ наша ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π°. Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, понСкогаш ΠΈΠΌΠ° Π½Π΅Π΄ΠΎΠ²Ρ€ΡˆΠ΅Π½Π° сСсија Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΡˆΡ‚ΠΎ Π²Π΅ спрСчува Π΄Π° сС Π½Π°Ρ˜Π°Π²ΠΈΡ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ. Π—Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€Π°ΡˆΠ°ΡšΠ°:

Π—Π° Checkmarx ΠΏΡ€Π΅Π΄ 8.6:

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π°Π»ΠΎΠ³ΠΈΠ½Π΅Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² запрос Π² Π‘Π”
SELECT COUNT(*) FROM [CxDB].[dbo].LoggedinUser WHERE [ClientType] = 6;
 
// Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π° Π½Π° самом Π΄Π΅Π»Π΅ Π΄Π°ΠΆΠ΅ Ссли ΠΈ Π½Π΅Ρ‚, ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос
DELETE FROM [CxDB].[dbo].LoggedinUser WHERE [ClientType] = 6;

Π—Π° Checkmarx ΠΏΠΎ 8.6:

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π°Π»ΠΎΠ³ΠΈΠ½Π΅Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² запрос Π² Π‘Π”
SELECT COUNT(*) FROM LoggedinUser WHERE (ClientType = 'Audit');
 
// Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π° Π½Π° самом Π΄Π΅Π»Π΅ Π΄Π°ΠΆΠ΅ Ссли ΠΈ Π½Π΅Ρ‚, ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос
DELETE FROM [CxDB].[dbo].LoggedinUser WHERE (ClientType = 'Audit');

ΠŸΡ€Π°Π²ΠΈΠ»Π° Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅

Π‘Π΅Π³Π° Π΄ΠΎΠ°Ρ“Π°ΠΌΠ΅ Π΄ΠΎ Π½Π°Ρ˜ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΈΠΎΡ‚ Π΄Π΅Π». Кога ќС ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° ΠΏΠΈΡˆΡƒΠ²Π°Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π²ΠΎ CxQL, ΠΎΠ½Π° ΡˆΡ‚ΠΎ чСсто Π²ΠΈ нСдостасува Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΡƒ ΠΌΠ½ΠΎΠ³Ρƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΊΠΎΠ»ΠΊΡƒ ΠΆΠΈΠ²ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ ΠΎΠΏΡˆΡ‚ΠΎ опис Π½Π° процСсот Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π° Π·Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅.

ЌС сС ΠΎΠ±ΠΈΠ΄Π°ΠΌ ΠΌΠ°Π»ΠΊΡƒ Π΄Π° ΠΈΠΌ Π³ΠΎ олСснам ΠΆΠΈΠ²ΠΎΡ‚ΠΎΡ‚ Π½Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ ΠΏΠΎΡ‡Π½ΡƒΠ²Π°Π°Ρ‚ Π΄Π° сС Π½ΡƒΡ€Π½ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ Π½Π° ΠΏΡ€Π°ΡˆΠ°ΡšΠ°Ρ‚Π° ΠΈ ќС Π΄Π°Π΄Π°ΠΌ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ΠΈ ΠΏΡ€Π°ΡˆΠ°ΡšΠ° Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. НСкои ΠΎΠ΄ Π½ΠΈΠ² сС ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ ΠΎΠΏΡˆΡ‚ΠΈ ΠΈ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС користат Π²ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° компанија ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Π΄Ρ€ΡƒΠ³ΠΈ сС поспСцифични, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користат ΠΈ со ΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ Π·Π° Π΄Π° ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Π°Ρ‚ Π½Π° спСцификитС Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

Π—Π½Π°Ρ‡ΠΈ, Π΅Π²Π΅ Π³ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ со ΠΊΠΎΠΈ Π½Π°Ρ˜Ρ‡Π΅ΡΡ‚ΠΎ сС ΡΡ€Π΅ΡœΠ°Π²Π°ΠΌΠ΅:

Π—Π°Π΄Π°Ρ‡Π°: Има Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Ρ‚Π΅ΠΊΠΎΠ²ΠΈ Π²ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ ΠΈ Π΅Π΄Π΅Π½ ΠΎΠ΄ Π½ΠΈΠ² Π΅ гнСздСњС Π½Π° Π΄Ρ€ΡƒΠ³, ΠΌΠΎΡ€Π° Π΄Π° оставитС Π΅Π΄Π΅Π½ ΠΎΠ΄ Π½ΠΈΠ².

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Навистина, понСкогаш Checkmarx ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Ρ‚Π΅ΠΊΠΎΠ²ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅ΠΊΠ»ΠΎΠΏΡƒΠ²Π°Π°Ρ‚ ΠΈ Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ скратСна Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΈ посСбСн ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° Ρ‚Π°ΠΊΠ²ΠΈ случаи ReduceFlow. Π’ΠΎ зависност ΠΎΠ΄ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚, ќС Π³ΠΎ ΠΈΠ·Π±Π΅Ρ€Π΅ Π½Π°Ρ˜ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΎΡ‚ ΠΈΠ»ΠΈ Π½Π°Ρ˜Π΄ΠΎΠ»Π³ΠΈΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊ:

// ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ Flow
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceSmallFlow);

// ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Flow
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceBigFlow);

Π—Π°Π΄Π°Ρ‡Π°: ΠŸΡ€ΠΎΡˆΠΈΡ€Π΅Ρ‚Π΅ ја листата Π½Π° чувствитСлни ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° ΠΊΠΎΠΈ Ρ€Π΅Π°Π³ΠΈΡ€Π° Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π°

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Checkmarx ΠΈΠΌΠ° основни ΠΏΡ€Π°Π²ΠΈΠ»Π°, Ρ‡ΠΈΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ сС користат ΠΎΠ΄ ΠΌΠ½ΠΎΠ³Ρƒ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€Π°ΡˆΠ°ΡšΠ°. Π‘ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° со ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ спСцифични Π·Π° Π²Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вСднаш Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ. ΠŸΠΎΠ΄ΠΎΠ»Ρƒ Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅:

Бписок Π·Π° ΠΎΠΏΡˆΡ‚Π°_приватност_ΠΏΠΎΠ²Ρ€Π΅Π΄Π°

АјдС Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡˆΡ‚ΠΎ сС користат Π²ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° чувствитСлни ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ:

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°
result = base.General_privacy_violation_list();

// Π˜Ρ‰Π΅ΠΌ элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ΄ простыС рСгулярныС выраТСния. МоТно Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΌΠΈ для вас ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ.
CxList personalList = All.FindByShortNames(new List<string> {
	"*securityToken*", "*sessionId*"}, false);

// ДобавляСм ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ
result.Add(personalList);

Π—Π°Π΄Π°Ρ‡Π°: ΠŸΡ€ΠΎΡˆΠΈΡ€Π΅Ρ‚Π΅ ја листата Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ со Π»ΠΎΠ·ΠΈΠ½ΠΊΠΈ

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Π‘ΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡Π°Π» вСднаш Π΄Π° ΠΎΠ±Ρ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° основното ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠΈ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ ΠΈ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π½Π° Π½Π΅Π³ΠΎ листа со имиња Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΊΠΎΠΈ Π½Π°Ρ˜Ρ‡Π΅ΡΡ‚ΠΎ сС користат Π²ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° компанија.

Бписок Π·Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠΈ_приватност_ΠΏΡ€Π΅ΠΊΡ€ΡˆΡƒΠ²Π°ΡšΠ΅

CxList allStrings = All.FindByType("String"); 
allStrings.Add(All.FindByType(typeof(StringLiteral))); 
allStrings.Add(Find_UnknownReference());
allStrings.Add(All.FindByType(typeof (Declarator)));
allStrings.Add(All.FindByType(typeof (MemberAccess)));
allStrings.Add(All.FindByType(typeof(EnumMemberDecl))); 
allStrings.Add(Find_Methods().FindByShortName("get*"));

// ДополняСм Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΉ список ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
List < string > pswdIncludeList = new List<string>{"*password*", "*psw", "psw*", "pwd*", "*pwd", "*authKey*", "pass*", "cipher*", "*cipher", "pass", "adgangskode", "benutzerkennwort", "chiffre", "clave", "codewort", "contrasena", "contrasenya", "geheimcode", "geslo", "heslo", "jelszo", "kennwort", "losenord", "losung", "losungswort", "lozinka", "modpas", "motdepasse", "parol", "parola", "parole", "pasahitza", "pasfhocal", "passe", "passord", "passwort", "pasvorto", "paswoord", "salasana", "schluessel", "schluesselwort", "senha", "sifre", "wachtwoord", "wagwoord", "watchword", "zugangswort", "PAROLACHIAVE", "PAROLA CHIAVE", "PAROLECHIAVI", "PAROLE CHIAVI", "paroladordine", "verschluesselt", "sisma",
                "pincode",
								"pin"};
								
List < string > pswdExcludeList = new List<string>{"*pass", "*passable*", "*passage*", "*passenger*", "*passer*", "*passing*", "*passion*", "*passive*", "*passover*", "*passport*", "*passed*", "*compass*", "*bypass*", "pass-through", "passthru", "passthrough", "passbytes", "passcount", "passratio"};

CxList tempResult = allStrings.FindByShortNames(pswdIncludeList, false);
CxList toRemove = tempResult.FindByShortNames(pswdExcludeList, false);
tempResult -= toRemove;
tempResult.Add(allStrings.FindByShortName("pass", false));

foreach (CxList r in tempResult)
{
	CSharpGraph g = r.data.GetByIndex(0) as CSharpGraph;
	if(g != null && g.ShortName != null && g.ShortName.Length < 50)
	{
		result.Add(r);
	}
}

Π—Π°Π΄Π°Ρ‡Π°: Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ користСни Ρ€Π°ΠΌΠΊΠΈ ΠΊΠΎΠΈ Π½Π΅ сС ΠΏΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½ΠΈ ΠΎΠ΄ Checkmarx

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Π‘ΠΈΡ‚Π΅ ΠΏΡ€Π°ΡˆΠ°ΡšΠ° Π²ΠΎ Checkmarx сС ΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎ јазик, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° сСкој јазик. ΠŸΠΎΠ΄ΠΎΠ»Ρƒ сС Π΄Π°Π΄Π΅Π½ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° Ρ‚Π°ΠΊΠ²ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

Ако сС користат Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠΈ ја Π½Π°Π΄ΠΎΠΏΠΎΠ»Π½ΡƒΠ²Π°Π°Ρ‚ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚ стандардната функционалност, Ρ‚ΠΈΠ΅ лСсно ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄ΠΎΠ΄Π°Π΄Π°Ρ‚ Π½Π° основното ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ. Вогаш сСкој ΡˆΡ‚ΠΎ Π³ΠΎ користи вСднаш ќС Π΄ΠΎΠ·Π½Π°Π΅ Π·Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ Π²ΠΎΠ²Π΅Π΄ΠΈ. Како ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π·Π° Π½Π°Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ Android сС Timber ΠΈ Loggi. Π’ΠΎ основниот ΠΏΠ°ΠΊΠ΅Ρ‚, Π½Π΅ΠΌΠ° ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°ΡšΠ΅ нСсистСмски ΠΏΠΎΠ²ΠΈΡ†ΠΈ, ΠΏΠ° Π°ΠΊΠΎ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° сСсија Π²Π»Π΅Π·Π΅ Π²ΠΎ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ‚, Π½Π΅ΠΌΠ° Π΄Π° Π·Π½Π°Π΅ΠΌΠ΅ Π·Π° Ρ‚ΠΎΠ°. АјдС Π΄Π° сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ Π·Π° Ρ‚Π°ΠΊΠ²ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π²ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π½Π° Checkmarx.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ΄ ΡˆΡ‚ΠΎ ја користи Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Timber Π·Π° Π»ΠΎΠ³ΠΈΡ€Π°ΡšΠ΅:

package com.death.timberdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import timber.log.Timber;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Timber.e("Error Message");
        Timber.d("Debug Message");

        Timber.tag("Some Different tag").e("And error message");
    }
}

И Π΅Π²Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π±Π°Ρ€Π°ΡšΠ΅ Π·Π° Checkmarx, ΡˆΡ‚ΠΎ ќС Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π° Π·Π° ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π½Π° Timber ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π»Π΅Π·Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°:

FindAndroidOutputs

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°
result = base.Find_Android_Outputs();

// ДополняСм Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приходят ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Timber
CxList timber = All.FindByExactMemberAccess("Timber.*") +
    All.FindByShortName("Timber").GetMembersOfTarget();

// ДобавляСм ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ
result.Add(timber);

И ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΈ Π½Π° сосСдното ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½ΠΎ ΠΎΠ²Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ сС однСсува Π½Π° Π½Π°Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Android:

FindAndroidLog_Outputs

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°
result = base.Find_Android_Log_Outputs();

// ДополняСм Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приходят ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Timber
result.Add(
  All.FindByExactMemberAccess("Timber.*") +
  All.FindByShortName("Timber").GetMembersOfTarget()
);

Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, Π°ΠΊΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° Android користат ΠœΠ΅Π½Π°ΡŸΠ΅Ρ€ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π·Π° асинхрона Ρ€Π°Π±ΠΎΡ‚Π°, Π΄ΠΎΠ±Ρ€ΠΎ Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° Π³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Ρ‚Π΅ Checkmarx Π·Π° ΠΎΠ²Π° со додавањС ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° добивањС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° getInputData:

FindAndroidRead

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°
result = base.Find_Android_Read();

// ДополняСм Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getInputData, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² WorkManager
CxList getInputData = All.FindByShortName("getInputData");

// ДобавляСм ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ
result.Add(getInputData.GetMembersOfTarget());

Π—Π°Π΄Π°Ρ‡Π°: ΠŸΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ чувствитСлни ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ plist Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° iOS

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: iOS чСсто користи ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со наставката .plist Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ врСдности. НС сС ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π° Ρ‡ΡƒΠ²Π°ΡšΠ΅ Π»ΠΎΠ·ΠΈΠ½ΠΊΠΈ, Ρ‚ΠΎΠΊΠ΅Π½ΠΈ, ΠΊΠ»ΡƒΡ‡Π΅Π²ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ чувствитСлни ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ ΠΎΠ²ΠΈΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, бидСјќи Ρ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²Π»Π΅Ρ‡Π°Ρ‚ ΠΎΠ΄ ΡƒΡ€Π΅Π΄ΠΎΡ‚ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Plist ΠΈΠΌΠ°Π°Ρ‚ карактСристики ΠΊΠΎΠΈ Π½Π΅ сС ΠΎΡ‡ΠΈΠ³Π»Π΅Π΄Π½ΠΈ со Π³ΠΎΠ»ΠΎ ΠΎΠΊΠΎ, Π½ΠΎ сС Π²Π°ΠΆΠ½ΠΈ Π·Π° Checkmarx. АјдС Π΄Π° напишСмС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΊΠΎΠ΅ ќС Π³ΠΈ Π±Π°Ρ€Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π½ΠΈ сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΈ ќС Π½ΠΈ ΠΊΠ°ΠΆΠ΅ Π΄Π°Π»ΠΈ Π½Π΅ΠΊΠ°Π΄Π΅ сС спомСнати Π»ΠΎΠ·ΠΈΠ½ΠΊΠΈ ΠΈΠ»ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚Π°ΠΊΠ²Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, која содрТи Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° со заднинската услуга:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>DeviceDictionary</key>
	<dict>
		<key>phone</key>
		<string>iPhone 6s</string>
	</dict>
	<key>privatekey</key>
	<string>MIICXAIBAAKBgQCqGKukO1De7zhZj6+</string>
</dict>
</plist>

И ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° Checkmarx, ΠΊΠΎΠ΅ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ нијанси ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Π·Π΅ΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΏΡ€ΠΈ ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ:

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠΎ поиску Ρ„Π°ΠΉΠ»ΠΎΠ² plist, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ 
CxList plist = Find_Plist_Elements();

// Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ
CxList dictionarySettings = All.NewCxList();

// Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ поиск всСх ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ… нас Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ дальнСйшСм ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ этот список.
// Для поиска Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ Π½ΠΈ странно, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ FindByMemberAccess - поиск ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, false, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ поиск нСчувствитСлСн ΠΊ рСгистру
dictionarySettings.Add(plist.FindByMemberAccess("privatekey", false));
dictionarySettings.Add(plist.FindByMemberAccess("privatetoken", false));

// Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ поиска ΠΈΠ·-Π·Π° особСнностСй структуры plist - Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ "If statement"
CxList ifStatements = plist.FindByType(typeof(IfStmt));

// ДобавляСм Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΏΠ΅Ρ€Π΅Π΄ этим ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΠ·Π΅Π» - для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ отобраТСния
result = dictionarySettings.FindByFathers(ifStatements);

Π—Π°Π΄Π°Ρ‡Π°: ΠΠ°ΠΎΡ“Π°ΡšΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²ΠΎ XML

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Checkmarx ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρƒ ΡƒΠ΄ΠΎΠ±Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со XML ΠΈ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° врСдности, ΠΎΠ·Π½Π°ΠΊΠΈ, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ повСќС. Но, Π·Π° ΠΆΠ°Π», дошло Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ° Π²ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΏΠΎΡ€Π°Π΄ΠΈ која Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Π½ΠΈΡ‚Ρƒ Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. И ΠΏΠΎΠΊΡ€Π°Ρ˜ Ρ„Π°ΠΊΡ‚ΠΎΡ‚ Π΄Π΅ΠΊΠ° овој Π΄Π΅Ρ„Π΅ΠΊΡ‚ Π΅ отстранСт Π²ΠΎ Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π±ΠΈΠ΄Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΈ Π°ΠΊΠΎ користитС ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ.

Π•Π²Π΅ Π΅Π΄Π΅Π½ Π½Π΅Ρ‚ΠΎΡ‡Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ΄ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°:

// Код Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚
result = All.FindXmlAttributesByNameAndValue("*.app", 8, β€œid”, "error- section", false, true);

Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΎΠ±ΠΈΠ΄ΠΎΡ‚ Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅, ќС Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ Π³Ρ€Π΅ΡˆΠΊΠ° ΡˆΡ‚ΠΎ All Π½Π΅ постои Ρ‚Π°ΠΊΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄... И ΠΎΠ²Π° Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ, бидСјќи ΠΈΠΌΠ° посСбСн, посСбСн простор Π·Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со XML - cxXPath. Π’Π°ΠΊΠ° ΠΈΠ·Π³Π»Π΅Π΄Π° Ρ‚ΠΎΡ‡Π½ΠΎΡ‚ΠΎ Π±Π°Ρ€Π°ΡšΠ΅ Π·Π° Π΄Π° сС најдС поставка Π²ΠΎ Android ΡˆΡ‚ΠΎ Π΄ΠΎΠ·Π²ΠΎΠ»ΡƒΠ²Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° HTTP ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜:

// ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с использованиСм cxXPath
result = cxXPath.FindXmlAttributesByNameAndValue("*.xml", 8, "cleartextTrafficPermitted", "true", false, true);

АјдС Π΄Π° Π³ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΌΠ°Π»ΠΊΡƒ ΠΏΠΎΠ΄Π΅Ρ‚Π°Π»Π½ΠΎ, бидСјќи синтаксата Π·Π° ситС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅ слична, ΠΎΡ‚ΠΊΠ°ΠΊΠΎ ќС сфатитС Π΅Π΄Π½Π°, Ρ‚ΠΎΠ³Π°Ρˆ само Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΎΠ½Π°Π° ΡˆΡ‚ΠΎ Π²ΠΈ Ρ‚Ρ€Π΅Π±Π°. Π—Π½Π°Ρ‡ΠΈ, послСдоватСлно спорСд ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅:

  • "*.xml"β€” маска Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Π°Ρ‚

  • 8 β€” ID Π½Π° Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ Π·Π° кој сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ

  • "cleartextTrafficPermitted"β€” ΠΈΠΌΠ΅ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π²ΠΎ xml

  • "true" - врСдноста Π½Π° овој Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚

  • false β€” ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° Ρ€Π΅Π³ΡƒΠ»Π°Ρ€Π΅Π½ ΠΈΠ·Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅

  • true β€” Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ќС сС ΠΈΠ·Π²Ρ€ΡˆΠΈ со ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π±ΡƒΠΊΠ²ΠΈ, односно нСчувствитСлни Π½Π° Π±ΡƒΠΊΠ²ΠΈ

Како ΠΏΡ€ΠΈΠΌΠ΅Ρ€, користСвмС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΊΠΎΠ΅ Π³ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π° Π½Π΅Ρ‚ΠΎΡ‡Π½ΠΈΡ‚Π΅, ΠΎΠ΄ бСзбСдносна Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°, поставкитС Π·Π° ΠΌΡ€Π΅ΠΆΠ½Π° ΠΊΠΎΠ½Π΅ΠΊΡ†ΠΈΡ˜Π° Π²ΠΎ Android ΡˆΡ‚ΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°Π°Ρ‚ ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° со сСрвСрот ΠΏΡ€Π΅ΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΡ‚ HTTP. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° поставка ΡˆΡ‚ΠΎ содрТи Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ cleartextTrafficPermitted со Π·Π½Π°Ρ‡Π΅ΡšΠ΅ true:

<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <trust-anchors>
            <certificates src="@raw/my_ca"/>
        </trust-anchors>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">secure.example.com</domain>
        </domain-config>
    </domain-config>
</network-security-config>

Π—Π°Π΄Π°Ρ‡Π°: ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Ρ‚Π΅ Π³ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΏΠΎ ΠΈΠΌΠ΅/ΠΏΠ°Ρ‚ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Π’ΠΎ Π΅Π΄Π΅Π½ ΠΎΠ΄ Π³ΠΎΠ»Π΅ΠΌΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° ΠΌΠΎΠ±ΠΈΠ»Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° Андроид, Π½Π°ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ Π½Π° Π»Π°ΠΆΠ½ΠΈ ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²ΠΈ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ ΡˆΡ‚ΠΎ ја ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π° поставката Π·Π° Π·Π°ΠΌΠ°Π³Π»ΡƒΠ²Π°ΡšΠ΅. Π€Π°ΠΊΡ‚ Π΅ Π΄Π΅ΠΊΠ° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ ΠΊΡƒΡ‚ΠΈΡ˜Π°Ρ‚Π° Π±Π°Ρ€Π° Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° build.gradle поставка ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½Π° Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Π·Π°ΠΌΠ°Π³Π»ΡƒΠ²Π°ΡšΠ΅ Π·Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° Π·Π° издавањС Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°.

Но, Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ понСкогаш ΠΈΠΌΠ° дСтски Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ build.gradle, ΠΊΠΎΠΈ сС однСсуваат Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ΠΈ Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚. ΠžΡΠΎΠ±Π΅Π½ΠΎΡΡ‚Π° Π΅ ΡˆΡ‚ΠΎ Π΄ΡƒΡ€ΠΈ ΠΈ Π°ΠΊΠΎ ΠΎΠ²ΠΈΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ ΡƒΠΊΠ°ΠΆΡƒΠ²Π°Π°Ρ‚ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π·Π° Π·Π°ΠΌΠ°Π³Π»ΡƒΠ²Π°ΡšΠ΅, поставкитС Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° родитСлско собраниС ќС сС ΠΏΡ€ΠΈΠΌΠ΅Π½Π°Ρ‚ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°.

Π’Π°ΠΊΠ°, Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π΅ Π΄Π° сС отсСчат ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΡƒΠ²Π°Ρ‡ΠΈΡ‚Π΅ Π²ΠΎ дСтскитС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΡˆΡ‚ΠΎ ΠΏΡ€ΠΈΠΏΠ°Ρ“Π°Π°Ρ‚ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅. Π’ΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°Π°Ρ‚ со присуството Π½Π° Π»ΠΈΠ½ΠΈΡ˜Π°Ρ‚Π° apply 'com.android.library'.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄ ΠΎΠ΄ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° build.gradle, ΡˆΡ‚ΠΎ ја ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π·Π° Π·Π°ΠΌΠ°Π³Π»ΡƒΠ²Π°ΡšΠ΅:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"
    defaultConfig {
        ...
    }

    buildTypes {
        release {
            minifyEnabled true
            ...
        }
    }
}

dependencies {
  ...
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° build.gradle Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²ΠΊΠ»ΡƒΡ‡Π΅Π½Π° Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ ΡˆΡ‚ΠΎ ја Π½Π΅ΠΌΠ° ΠΎΠ²Π°Π° поставка:

apply plugin: 'android-library'

dependencies {
  compile 'com.android.support:support-v4:18.0.+'
}

android {
  compileSdkVersion 14
  buildToolsVersion '17.0.0'
  ...
}

И ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π·Π° Checkmarx:

ProGuardObfuscationNotInUse

// Поиск ΠΌΠ΅Ρ‚ΠΎΠ΄Π° release срСди всСх ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Gradle Ρ„Π°ΠΉΠ»Π°Ρ…
CxList releaseMethod = Find_Gradle_Method("release");

// ВсС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² build.gradle
CxList gradleBuildObjects = Find_Gradle_Build_Objects();

// Поиск Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° "release" срСди всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² build.gradle
CxList methodInvokesUnderRelease = gradleBuildObjects.FindByType(typeof(MethodInvokeExpr)).GetByAncs(releaseMethod);

// Π˜Ρ‰Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ gradle-Ρ„Π°ΠΉΠ»ΠΎΠ² строку "com.android.library" - это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» относится ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΈ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· ΠΏΡ€Π°Π²ΠΈΠ»Π°
CxList android_library = gradleBuildObjects.FindByName("com.android.library");

// Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ пустого массива
List<string> libraries_path = new List<string> {};

// ΠŸΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ Ρ‡Π΅Ρ€Π΅Π· всС Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ "Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅" Ρ„Π°ΠΉΠ»Ρ‹
foreach(CxList library in android_library)
{
    // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ
	string file_name_library = library.GetFirstGraph().LinePragma.FileName;
    
    // ДобавляСм Π΅Π³ΠΎ Π² наш массив
	libraries_path.Add(file_name_library);
}

// Π˜Ρ‰Π΅ΠΌ всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ обфускации Π² Ρ€Π΅Π»ΠΈΠ·Π½Ρ‹Ρ… настройках
CxList minifyEnabled = methodInvokesUnderRelease.FindByShortName("minifyEnabled");

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ этих Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²
CxList minifyValue = gradleBuildObjects.GetParameters(minifyEnabled, 0);

// Π˜Ρ‰Π΅ΠΌ срСди Π½ΠΈΡ… Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅
CxList minifyValueTrue = minifyValue.FindByShortName("true");

// НСмного ΠΌΠ°Π³ΠΈΠΈ, Ссли Π½Π΅ нашли стандартным способом :D
if (minifyValueTrue.Count == 0) {
	minifyValue = minifyValue.FindByAbstractValue(abstractValue => abstractValue is TrueAbstractValue);
} else {
    // А Ссли всё-Ρ‚Π°ΠΊΠΈ нашли, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ оставляСм
	minifyValue = minifyValueTrue;	
}

// Если Π½Π΅ нашлось Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²
if (minifyValue.Count == 0)
{
    // Для Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ отобраТСния мСста срабатывания Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΡ‰Π΅ΠΌ ΠΈΠ»ΠΈ buildTypes ΠΈΠ»ΠΈ android
	CxList tempResult = All.NewCxList();
	CxList buildTypes = Find_Gradle_Method("buildTypes");
	if (buildTypes.Count > 0) {
		tempResult = buildTypes;
	} else {
		tempResult = Find_Gradle_Method("android");
	}
	
	// Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… мСст срабатывания ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ ΠΈ опрСдСляСм, Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΈΠ»ΠΈ основной Ρ„Π°ΠΉΠ»Ρ‹ сборки
	foreach(CxList res in tempResult)
	{
        // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½ buildType ΠΈΠ»ΠΈ android ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
		string file_name_result = res.GetFirstGraph().LinePragma.FileName;
        
        // Если Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅Ρ‚ Π² нашСм спискС "Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ…" Ρ„Π°ΠΉΠ»ΠΎΠ² - Π·Π½Π°Ρ‡ΠΈΡ‚ это основной Ρ„Π°ΠΉΠ» ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
		if (libraries_path.Contains(file_name_result) == false){
			result.Add(res);
		}
	}
}

Овој пристап ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ доста ΡƒΠ½ΠΈΠ²Π΅Ρ€Π·Π°Π»Π΅Π½ ΠΈ корисСн Π½Π΅ само Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Android, Ρ‚ΡƒΠΊΡƒ ΠΈ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ случаи ΠΊΠΎΠ³Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΎΠ΄Ρ€Π΅Π΄ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΏΠ°Ρ“Π° Π½Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°.

Π—Π°Π΄Π°Ρ‡Π°: Π”ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΠ΄ Ρ‚Ρ€Π΅Ρ‚Π° страна Π°ΠΊΠΎ синтаксата Π½Π΅ Π΅ цСлосно ΠΏΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½Π°

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Π‘Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π°ΠΌΠΊΠΈ ΡˆΡ‚ΠΎ сС користат Π²ΠΎ процСсот Π½Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΊΠΎΠ΄ Π΅ Сдноставно Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ½ΠΈΡ‚Π΅. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, Checkmarx Π½Π΅ сСкогаш Π·Π½Π°Π΅ Π·Π° Π½ΠΈΠ²Π½ΠΎΡ‚ΠΎ ΠΏΠΎΡΡ‚ΠΎΠ΅ΡšΠ΅, Π° Π½Π°ΡˆΠ°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π΅ Π΄Π° Π³ΠΎ Π½Π°ΡƒΡ‡ΠΈΠΌΠ΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ Π΄Π΅ΠΊΠ° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΏΡ€ΠΈΠΏΠ°Ρ“Π°Π°Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½Π° ΠΎΠ²Π°Π° Ρ€Π°ΠΌΠΊΠ°. ПонСкогаш ΠΎΠ²Π° Π΅ ΠΊΠΎΠΌΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π½ΠΎ ΠΎΠ΄ Ρ„Π°ΠΊΡ‚ΠΎΡ‚ ΡˆΡ‚ΠΎ Ρ€Π°ΠΌΠΊΠΈ користат имиња Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠΈ сС ΠΌΠ½ΠΎΠ³Ρƒ чСсти ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ нСдвосмислСно Π΄Π° сС ΠΎΠ΄Ρ€Π΅Π΄ΠΈ односот Π½Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ ΠΏΠΎΠ²ΠΈΠΊ со ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°.

Π’Π΅ΡˆΠΊΠΎΡ‚ΠΈΡ˜Π°Ρ‚Π° Π΅ ΡˆΡ‚ΠΎ синтаксата Π½Π° Ρ‚Π°ΠΊΠ²ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ сС ΠΏΡ€Π΅ΠΏΠΎΠ·Π½Π°Π²Π° сСкогаш ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈ Ρ‚Ρ€Π΅Π±Π° Π΄Π° СкспСримСнтиратС Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ Π»Π°ΠΆΠ½ΠΈ ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²ΠΈ. ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° точноста Π½Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ ΠΈ Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚:

  • ΠŸΡ€Π²Π°Ρ‚Π° ΠΎΠΏΡ†ΠΈΡ˜Π°, сигурно Π·Π½Π°Π΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° сС користи Π²ΠΎ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π½Π° тимско Π½ΠΈΠ²ΠΎ. Но, Π°ΠΊΠΎ Ρ‚ΠΈΠΌΠΎΡ‚ ΠΎΠ΄Π»ΡƒΡ‡ΠΈ Π΄Π° Π·Π°Π·Π΅ΠΌΠ΅ ΠΏΠΎΠΈΠ½Π°ΠΊΠΎΠ² пристап ΠΈΠ»ΠΈ користи Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ ΠΊΠΎΠΈ ΠΈΠΌΠΈΡšΠ°Ρ‚Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ сС ΠΏΡ€Π΅ΠΊΠ»ΠΎΠΏΡƒΠ²Π°Π°Ρ‚, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ Π½Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΡ€ΠΈΡ˜Π°Ρ‚Π½Π° слика Π·Π° Π±Ρ€ΠΎΡ˜Π½ΠΈ Π»Π°ΠΆΠ½ΠΈ ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²ΠΈ.

  • Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΎΠΏΡ†ΠΈΡ˜Π° Π΅ Π΄Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ ΠΊΠΎΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΅ јасно ΡƒΠ²Π΅Π·Π΅Π½Π°. Π‘ΠΎ овој пристап, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ΠΌΠ΅ сигурни Π΄Π΅ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΡˆΡ‚ΠΎ Π½ΠΈ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ искористСна Π²ΠΎ ΠΎΠ²Π°Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°.

  • И Ρ‚Ρ€Π΅Ρ‚Π°Ρ‚Π° ΠΎΠΏΡ†ΠΈΡ˜Π° Π΅ Π΄Π° сС користат Π΄Π²Π°Ρ‚Π° Π³ΠΎΡ€Π΅Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ пристапи Π·Π°Π΅Π΄Π½ΠΎ.

Како ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° ја ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠ·Π½Π°Ρ‚Π° Π²ΠΎ тСсни ΠΊΡ€ΡƒΠ³ΠΎΠ²ΠΈ масна Π·Π° програмскиот јазик Scala, ΠΈΠΌΠ΅Π½ΠΎ, функционалноста Π‘ΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±ΡƒΠΊΠ²Π°Π»Π½ΠΈ врСдности. Π’ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π·Π° Π΄Π° Π³ΠΈ прСнСсСтС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ SQL, ΠΌΠΎΡ€Π° Π΄Π° Π³ΠΎ користитС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΡ‚ $, кој Π³ΠΈ Π·Π°ΠΌΠ΅Π½ΡƒΠ²Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π²ΠΎ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½ΠΎ SQL Π±Π°Ρ€Π°ΡšΠ΅. Π’ΠΎΠ° Π΅, Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚, Ρ‚ΠΎΠ° Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ Π°Π½Π°Π»ΠΎΠ³ Π½Π° ΠŸΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½Π°Ρ‚Π° изјава Π²ΠΎ Јава. Но, Π°ΠΊΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΠΈ Π΄Π° конструиратС SQL Π±Π°Ρ€Π°ΡšΠ΅, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° прСнСсСтС имиња Π½Π° Ρ‚Π°Π±Π΅Π»ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ користитС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΡ‚ #$, ΡˆΡ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ќС Π³ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π²ΠΎ Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ (рСчиси ΠΊΠ°ΠΊΠΎ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡ˜Π° Π½Π° Π½ΠΈΠ·ΠΈ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΊ ΠΊΠΎΠ΄:

// Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС - значСния, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ
val table = "coffees"
sql"select * from #$table where name = $name".as[Coffee].headOption

Checkmarx сè ΡƒΡˆΡ‚Π΅ Π½Π΅ Π·Π½Π°Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ја ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° Splicing Literal Values ​​и Π³ΠΈ прСскокнува ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ #$, ΠΏΠ° ајдС Π΄Π° сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΡƒΡ‡ΠΈΠΌΠ΅ Π΄Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½ΠΈ SQL ΠΈΠ½Ρ˜Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Π΄Π° Π³ΠΈ истакнС вистинскитС мСста Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚:

// Находим всС ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹
CxList imports = All.FindByType(typeof(Import));

// Π˜Ρ‰Π΅ΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°Ρ… slick
CxList slick = imports.FindByShortName("slick");

// НСкоторый Ρ„Π»Π°Π³, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅ присутствуСт
// Для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ опрСдСлСния - ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°
bool not_empty_list = false;
foreach (CxList r in slick)
{
    // Если встрСтили ΠΈΠΌΠΏΠΎΡ€Ρ‚, считаСм, Ρ‡Ρ‚ΠΎ slick ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ
	not_empty_list = true;
}

if (not_empty_list) {
    // Π˜Ρ‰Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пСрСдаСтся SQL-строка
	CxList sql = All.FindByShortName("sql");
	sql.Add(All.FindByShortName("sqlu"));
	
	// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² эти Π²Ρ‹Π·ΠΎΠ²Ρ‹
	CxList data_sql = All.DataInfluencingOn(sql);
	
	// Π’Π°ΠΊ ΠΊΠ°ΠΊ синтакис Π½Π΅ поддСрТиваСтся, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с рСгулярными выраТСниями
	// RegExp стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ€Π°ΠΉΠ½Π΅ остороТно ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° большом количСствС Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ сильно ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
	CxList find_possible_inj = data_sql.FindByRegex(@"#$", true, true, true);

    // ИзбавляСмся ΠΎΡ‚ Π»ΠΈΡˆΠ½ΠΈΡ… срабатываний, Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
	result = find_possible_inj.FindByType(typeof(BinaryExpr));
}

Π—Π°Π΄Π°Ρ‡Π°: ΠŸΡ€Π΅Π±Π°Ρ€Π°Ρ˜Ρ‚Π΅ користСни Ρ€Π°Π½Π»ΠΈΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: ΠœΠ½ΠΎΠ³Ρƒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ користат Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° слСдСњС со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ (ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π½Π° OSA) Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°ΡšΠ΅ Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° Ρ€Π°Π½Π»ΠΈΠ²ΠΈ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ Ρ€Π°Π·Π²ΠΈΠ΅Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. ПонСкогаш Π½Π΅ Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС Π°ΠΆΡƒΡ€ΠΈΡ€Π° Ρ‚Π°ΠΊΠ²Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° Π±Π΅Π·Π±Π΅Π΄Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°. Π’ΠΎ Π½Π΅ΠΊΠΎΠΈ случаи ΠΈΠΌΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π°ΡšΠ°, Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ Π½Π΅ΠΌΠ° Π±Π΅Π·Π±Π΅Π΄Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°. Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° SAST ΠΈ OSA ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ќС ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° сС ΡƒΡ‚Π²Ρ€Π΄ΠΈ Π΄Π΅ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π²ΠΎΠ΄Π°Ρ‚ Π΄ΠΎ ΠΈΡΠΊΠΎΡ€ΠΈΡΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° ранливоста Π½Π΅ сС користат Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚.

Но, понСкогаш, особСно ΠΊΠΎΠ³Π° сС размислува Π·Π° JavaScript, ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ Π΅ сосСма Ρ‚Ρ€ΠΈΠ²ΠΈΡ˜Π°Π»Π½Π° Π·Π°Π΄Π°Ρ‡Π°. ΠŸΠΎΠ΄ΠΎΠ»Ρƒ Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ Π΅ ΠΈΠ΄Π΅Π°Π»Π½ΠΎ, Π½ΠΎ сСпак Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ Π½Π° ранливости Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ‚Π° lodash Π²ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ template ΠΈ *set.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½ΠΎ Ρ€Π°Π½Π»ΠΈΠ² ΠΊΠΎΠ΄ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° JS:

/**
 * Template example
 */

'use strict';
var _ = require("./node_modules/lodash.js");


// Use the "interpolate" delimiter to create a compiled template.
var compiled = _.template('hello <%= js %>!');
console.log(compiled({ 'js': 'lodash' }));
// => 'hello lodash!'

// Use the internal `print` function in "evaluate" delimiters.

var compiled = _.template('<% print("hello " + js); %>!');
console.log(compiled({ 'js': 'lodash' }));
// => 'hello lodash!'

И ΠΊΠΎΠ³Π° сС ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°Ρ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΎ html:

<!DOCTYPE html>
<html>
<head>
    <title>Lodash Tutorial</title>
    <script src="./node_modules/lodash.js"></script>
    <script type="text/javascript">
  // Lodash chunking array
        nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];

        let c1 = _.template('<% print("hello " + js); %>!');
        console.log(c1);

        let c2 = _.template('<% print("hello " + js); %>!');
        console.log(c2);
    </script>
</head>
<body></body>
</html>

Π“ΠΈ Π±Π°Ρ€Π°ΠΌΠ΅ ситС наши Ρ€Π°Π½Π»ΠΈΠ²ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈ сС Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ Π²ΠΎ ранливости:

// Π˜Ρ‰Π΅ΠΌ всС строки: Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… встрСчаСтся строка lodash (ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ это объявлСниС ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
CxList lodash_strings = Find_String_Literal().FindByShortName("*lodash*");

// Π˜Ρ‰Π΅ΠΌ всС Π΄Π°Π½Π½Ρ‹Π΅: ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с этими строками
CxList data_on_lodash = All.InfluencedBy(lodash_strings);


// Π—Π°Π΄Π°Π΅ΠΌ список уязвимых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²
List<string> vulnerable_methods = new List<string> {"template", "*set"};

// Π˜Ρ‰Π΅ΠΌ всС наши уязвимыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пСрСчислСнны Π² уязвимостях ΠΈ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈΡΡŒ
CxList vulnerableMethods = All.FindByShortNames(vulnerable_methods).FindByType(typeof(MethodInvokeExpr));

//Находим всС Π΄Π°Π½Π½Ρ‹Π΅: ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ
CxList vulnFlow = All.InfluencedBy(vulnerableMethods);

// Если Π΅ΡΡ‚ΡŒ пСрСсСчСниС ΠΏΠΎ этим Π΄Π°Π½Π½Ρ‹ΠΌ - ΠΊΠ»Π°Π΄Π΅ΠΌ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
result = vulnFlow * data_on_lodash;

// Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ список ΠΏΡƒΡ‚Π΅ΠΉ ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π² дальнСйшСм Π΄ΡƒΠ±Π»ΠΈ
List<string> lodash_result_path = new List<string> {};

foreach(CxList lodash_result in result)
{
    // ΠžΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ€Π°Π· ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ
	string file_name = lodash_result.GetFirstGraph().LinePragma.FileName;
	lodash_result_path.Add(file_name);
}

// Π”Π°Π»ΡŒΡˆΠ΅ ΠΈΠ΄Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ относящаяся ΠΊ html Ρ„Π°ΠΉΠ»Π°ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½ΠΈΡ… ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ΄Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²
// Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ массив ΠΏΡƒΡ‚Π΅ΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ срабатывания уязвимых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±Ρ‹Π»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚Π΅Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… объявлСн lodash
List<string> lodash_path = new List<string> {};
foreach(CxList string_lodash in lodash_strings)
{
	string file_name = string_lodash.GetFirstGraph().LinePragma.FileName;
	lodash_path.Add(file_name);
}

// ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС уязвимыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ убСТдаСмся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π² Ρ‚Π΅Ρ… ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π°Ρ…, Ρ‡Ρ‚ΠΎ ΠΈ объявлСниС/Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ lodash
foreach(CxList method in vulnerableMethods)
{
	string file_name_method = method.GetFirstGraph().LinePragma.FileName;
	if (lodash_path.Contains(file_name_method) == true && lodash_result_path.Contains(file_name_method) == false){
		result.Add(method);
	}
}

// Π£Π±ΠΈΡ€Π°Π΅ΠΌ всС UknownReferences ΠΈ оставляСм самый "Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ" ΠΈΠ· ΠΏΡƒΡ‚Π΅ΠΉ, Ссли Ρ‚Π°ΠΊΠΈΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceSmallFlow) - result.FindByType(typeof(UnknownReference));

Π—Π°Π΄Π°Ρ‡Π°: ΠŸΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ сСртификати Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: НС Π΅ Π½Π΅Π²ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅, особСно ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈΡ‚Π΅, Π΄Π° користат сСртификати ΠΈΠ»ΠΈ ΠΊΠ»ΡƒΡ‡Π΅Π²ΠΈ Π·Π° Π΄Π° пристапат Π΄ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ сСрвСри ΠΈΠ»ΠΈ Π΄Π° ΠΏΠΎΡ‚Π²Ρ€Π΄Π°Ρ‚ SSL-Pinning. Од бСзбСдносна пСрспСктива, ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΠ²ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΠΎ ΠΊΠΎΠ΄ Π½Π΅ Π΅ Π½Π°Ρ˜Π΄ΠΎΠ±Ρ€Π°Ρ‚Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. АјдС Π΄Π° сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° напишСмС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΊΠΎΠ΅ ќС Π±Π°Ρ€Π° слични Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ:

// НайдСм всС сСртификаты ΠΏΠΎ маскС Ρ„Π°ΠΉΠ»Π°
CxList find_certs = All.FindByShortNames(new List<string> {"*.der", "*.cer", "*.pem", "*.key"}, false);

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Π³Π΄Π΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ
CxList data_used_certs = All.DataInfluencedBy(find_certs);

// И для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ - ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π³Π΄Π΅ вызываСтся Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ сСртификатов
// Для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
CxList methods = All.FindByMemberAccess("*.getAssets");

// ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ мноТСств даст Π½Π°ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎ использованию Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… сСртификатов Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
result = methods * data_used_certs;

Π—Π°Π΄Π°Ρ‡Π°: ΠΠ°ΠΎΡ“Π°ΡšΠ΅ ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡ‚ΠΈΡ€Π°Π½ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: ЧСсто Π΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π΄Π° сС ΠΎΡ‚ΠΏΠΎΠ²ΠΈΠΊΠ°Π°Ρ‚ ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡ‚ΠΈΡ€Π°Π½ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π²Π°ΠΆΠ½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΡˆΡ‚ΠΎ сС присутни Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, Π½ΠΈΠ²Π½ΠΎΡ‚ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π²ΠΎ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ Π½Π΅ Π΅ Π΄ΠΎΠ±Ρ€Π° идСја, Π½ΠΎ ситуациитС Π²Π°Ρ€ΠΈΡ€Π°Π°Ρ‚. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π°ΡˆΠ°ΡšΠ°Ρ‚Π° Π·Π° CxQL, Π½Π°ΠΎΡ“Π°ΡšΠ΅Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°ΠΊΠΎ ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ лСсно:

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТатся Π² ΠΊΠΎΠ΄Π΅
CxList strings = base.Find_Strings();

// Π˜Ρ‰Π΅ΠΌ срСди всСх строк Π½ΡƒΠΆΠ½ΠΎΠ΅ Π½Π°ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠΊΠ΅Π½ Π² Π²ΠΈΠ΄Π΅ строки "qwerty12345"
result = strings.FindByShortName("qwerty12345");

Π—Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ

Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС Π±ΠΈΠ΄Π΅ корисна Π·Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ Π³ΠΎ Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π°Π°Ρ‚ своСто запознавањС со Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° Checkmarx. МоТСби ΠΈ ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ Π΄ΠΎΠ»Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π³ΠΈ ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ сопствСнитС ΠΏΡ€Π°Π²ΠΈΠ»Π° ќС Π½Π°Ρ˜Π΄Π°Ρ‚ Π½Π΅ΡˆΡ‚ΠΎ корисно Π²ΠΎ овој Π²ΠΎΠ΄ΠΈΡ‡.

Π—Π° ΠΆΠ°Π», Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠΌΠ° нСдостаток Π½Π° рСсурс ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ Π±ΠΈ ΠΌΠΎΠΆΠ΅Π»Π΅ Π΄Π° сС собСрат Π½ΠΎΠ²ΠΈ ΠΈΠ΄Π΅ΠΈ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜ΠΎΡ‚ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° Checkmarx. Π—Π°Ρ‚ΠΎΠ° создадовмС ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ Π½Π° Github, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ќС ја објавимС Π½Π°ΡˆΠ°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° Π·Π° сСкој ΡˆΡ‚ΠΎ користи CxQL Π΄Π° најдС Π½Π΅ΡˆΡ‚ΠΎ корисно Π²ΠΎ Π½Π΅Π³ΠΎ, Π° исто Ρ‚Π°ΠΊΠ° Π΄Π° ΠΈΠΌΠ° моТност Π΄Π° ја сподСли ΡΠ²ΠΎΡ˜Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° со Π·Π°Π΅Π΄Π½ΠΈΡ†Π°Ρ‚Π°. Π‘ΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ Π΅ Π²ΠΎ процСс Π½Π° ΠΏΠΎΠΏΠΎΠ»Π½ΡƒΠ²Π°ΡšΠ΅ ΠΈ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΠΈΡ€Π°ΡšΠ΅ Π½Π° содрТината, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ соработницитС сС Π΄ΠΎΠ±Ρ€Π΅Π΄ΠΎΡ˜Π΄Π΅Π½ΠΈ!

Π’ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌΠ΅!

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€