ΠΡ Π₯Π°Π±Ρ!
ΠΠΎ Π½Π°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ°, Π½Π°ΡΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ° ΠΌΠ½ΠΎΠ³Ρ ΡΠ΅ΡΡΠΎ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π° ΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π°Π»Π°ΡΠΊΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΡΡΠ°ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ (SAST). ΠΠ°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΊΡΡΠΈΡΠ°ΡΠ° ΡΠΈΡΠ΅ ΡΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΠ½ΠΎ. Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, ΡΠ΅ Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ Π½Π΅Π³ΠΎ, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΎΠ΄ ΡΠΎΠ° ΠΊΠΎΠ»ΠΊΡ Π΄ΠΎΠ±ΡΠΎ ΠΎΠ²ΠΈΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡΠ΅ ΠΎΠΏΡΠ°ΡΠ΅Π½ΠΈ ΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° Π°Π½Π°Π»ΠΈΠ·Π°. Π‘ΠΏΠΎΡΠ΅Π΄ ΠΌΠΎΠ΅ ΠΌΠΈΡΠ»Π΅ΡΠ΅, Π΅Π΄Π΅Π½ ΠΎΠ΄ Π½Π°ΡΠ²Π°ΠΆΠ½ΠΈΡΠ΅ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ ΠΏΡΠΈ ΠΈΠ·Π±ΠΎΡΠΎΡ Π½Π° Π°Π»Π°ΡΠΊΠ°ΡΠ° SAST Π΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠ° Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄ΠΈ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° Π²Π°ΡΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ, ΠΈΠΌΠ΅Π½ΠΎ, Π΄Π° ΡΠ΅ ΠΏΠΈΡΡΠ²Π°Π°Ρ ΠΈ ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΠΏΠΎΡΠ΅ΡΡΠΎ ΡΠ΅ Π½Π°ΡΠ΅ΠΊΡΠ²Π°Π°Ρ, Custom Queries.
ΠΠ°ΡΡΠ΅ΡΡΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ Checkmarx - ΠΌΠ½ΠΎΠ³Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ ΠΈ ΠΌΠΎΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΈ. ΠΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π·Π±ΠΎΡΡΠ²Π°ΠΌ Π·Π° ΠΌΠΎΠ΅ΡΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ Π·Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° Π·Π° ΡΠΎΠ°.
Π‘ΠΎΠ΄ΡΠΆΠΈΠ½Π°
ΠΠ»Π΅Π³ΡΠ²Π°ΡΠ΅
ΠΠ° ΠΏΠΎΡΠ΅ΡΠΎΠΊ, Π±ΠΈ ΡΠ°ΠΊΠ°Π» Π΄Π° ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΠ°ΠΌ Π΅Π΄Π½Π° ΠΎΠ΄ ΡΠ΅ΡΠΊΠΈΡΠ΅ Π½Π°ΠΏΠΈΡΠΈ Π½Π° ΡΡΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ Π·Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΏΡΠ°ΡΠ°ΡΠ° Π·Π° Checkmarx. ΠΠ±ΡΠ°Π²Π΅Π½ΠΎ Π΅ Π½Π° Π₯Π°Π±ΡΠ΅ Π½Π° ΠΊΡΠ°ΡΠΎΡ Π½Π° 2019 Π³ΠΎΠ΄ΠΈΠ½Π° ΠΏΠΎΠ΄ Π½Π°ΡΠ»ΠΎΠ²:
ΠΡΠΏΠΈΡΡΠ²Π° Π΄Π΅ΡΠ°Π»Π½ΠΎ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ ΠΏΡΠ²ΠΈΡΠ΅ ΠΏΡΠ°ΡΠ°ΡΠ° Π²ΠΎ CxQL (Checkmarx Query Language) Π·Π° Π½Π΅ΠΊΠΎΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΠΈ Π³ΠΈ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° Π°Π½Π°Π»ΠΈΠ·Π°.
ΠΠ΅ΠΌΠ° Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΠΌ ΠΎΠ½Π° ΡΡΠΎ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΠΎ Π½Π΅Π³ΠΎ, ΠΈΠ°ΠΊΠΎ Π½Π΅ΠΊΠΎΠΈ ΡΠ°ΡΠΊΡΡΠ½ΠΈΡΠΈ ΡΠ΅ΠΏΠ°ΠΊ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΏΡΠΈΡΡΡΠ½ΠΈ. ΠΠΎ ΠΌΠΎΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π°ΠΌ Π΄Π° ΡΠΎΡΡΠ°Π²Π°ΠΌ Π΅Π΄Π΅Π½ Π²ΠΈΠ΄ βΠ·Π±ΠΈΡΠΊΠ° ΡΠ΅ΡΠ΅ΠΏΡΠΈβ, ΡΠΏΠΈΡΠΎΠΊ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠΎ ΠΊΠΎΠΈ ΡΠ΅ ΡΡΠ΅ΡΠ½Π°Π² Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΌΠΎΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ Checkmarx. ΠΠΎΡΠ°Π² Π΄Π° Π³ΠΎ ΡΡΠ΅Π΄Π°ΠΌ ΠΌΠΎΠ·ΠΎΠΊΠΎΡ Π·Π° ΠΌΠ½ΠΎΠ³Ρ ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. ΠΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ Π½Π΅ΠΌΠ°ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ°, Π° ΠΏΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ Π±Π΅ΡΠ΅ Π΄ΡΡΠΈ ΠΈ ΡΠ΅ΡΠΊΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΎΠ½Π° ΡΡΠΎ ΡΠ΅ Π±Π°ΡΠ°. Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΌΠΎΠ΅ΡΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ ΠΈ Π½Π΅ΠΏΡΠΎΡΠΏΠΈΠ΅Π½ΠΈΡΠ΅ Π½ΠΎΡΠΈ Π½Π΅ΠΌΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ Π·Π°Π»ΡΠ΄Π½ΠΈ, Π° ΠΎΠ²Π°Π° βΠ·Π±ΠΈΡΠΊΠ° ΡΠ΅ΡΠ΅ΠΏΡΠΈ Π·Π° ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ΠΈ ΠΏΡΠ°ΡΠ°ΡΠ°β ΡΠ΅ Π²ΠΈ Π·Π°ΡΡΠ΅Π΄ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ°ΡΠ° ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π½Π΅ΡΠ²Π½ΠΈ ΠΊΠ»Π΅ΡΠΊΠΈ. ΠΠ½Π°ΡΠΈ, Π΄Π° ΠΏΠΎΡΠ½Π΅ΠΌΠ΅!
ΠΠΏΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ°
ΠΡΠ²ΠΎ, Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈ ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ°, Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ ΡΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ ΡΠ»Π΅Π΄Π½ΠΎ. Π, ΠΈΡΡΠΎ ΡΠ°ΠΊΠ°, Π·Π°ΡΠΎΠ° ΡΡΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π΅ ΠΊΠ°ΠΆΡΠ²Π° Π½ΠΈΡΡΠΎ Π·Π° ΠΎΠ²Π° ΠΈΠ»ΠΈ Π΅ ΠΌΠ½ΠΎΠ³Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅ΡΠ° Π²ΠΎ ΡΡΡΡΠΊΡΡΡΠ°ΡΠ°, ΡΡΠΎ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ.
-
ΠΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°Π°Ρ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅ΡΠΎ Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΎΡΠΎ ΠΈΠ·Π±ΡΠ°Π½ΠΎ Π½Π° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ (Π·Π±ΠΈΡ Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°). ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π±ΡΠΎΡ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ, Π° ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°ΡΠ΅ Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° Π²Π°ΡΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ Π³ΡΡΠΏΠΈΡΠ°ΡΠ΅ ΠΏΠΎ ΡΠ°Π·ΠΈΠΊ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ Π·Π° ΡΠ΅ΠΊΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΡΠΎΡΠΎΡ Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²Π»ΠΈΡΠ°Π΅ Π½Π° Π±ΡΠ·ΠΈΠ½Π°ΡΠ° ΠΈ ΡΠΎΡΠ½ΠΎΡΡΠ° Π½Π° ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅ΡΠΎ.
ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Preset Π²ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΎΡ Checkmarx
-
ΠΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΡΠ΅ ΡΡΠ΅Π΄ΡΠ²Π°Π°Ρ Π²ΠΎ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½Π° Π°Π»Π°ΡΠΊΠ° Π½Π°ΡΠ΅ΡΠ΅Π½Π° CxAuditor. ΠΠ²Π° Π΅ Π΄Π΅ΡΠΊΡΠΎΠΏ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠ° ΡΠ΅ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π° ΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎ Checkmarx. ΠΠ²Π°Π° Π°Π»Π°ΡΠΊΠ° ΠΈΠΌΠ° Π΄Π²Π° Π½Π°ΡΠΈΠ½ΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ°: ΡΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ΄ Π²Π΅ΡΠ΅ ΠΈΠ·Π²ΡΡΠ΅Π½ΠΎΡΠΎ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅.
CxAudit ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ
-
ΠΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π²ΠΎ Checkmarx ΡΠ΅ ΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎ ΡΠ°Π·ΠΈΠΊ, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΡ ΡΠ°Π·ΠΈΠΊ ΠΈΠΌΠ° ΡΠ²ΠΎΡ ΡΠ΅Ρ Π½Π° ΠΏΡΠ°ΡΠ°ΡΠ°. ΠΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΏΠΎΡΡΠΎΡΠ°Ρ Π½Π΅ΠΊΠΎΠΈ ΠΎΠΏΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊΠΎΠΈ Π²Π°ΠΆΠ°Ρ Π±Π΅Π· ΡΠ°Π·Π»ΠΈΠΊΠ° Π½Π° ΡΠ°Π·ΠΈΠΊΠΎΡ, ΡΠΎΠ° ΡΠ΅ ΡΠ°ΠΊΠ°Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΡΠ°ΡΠ°ΡΠ°. ΠΠΎ Π½Π°ΡΠ³ΠΎΠ»Π΅ΠΌ Π΄Π΅Π», ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΏΡΠ°ΡΠ°ΡΠ° Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΡΠΎ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°.
ΠΠΎΠ΄Π΅Π»Π±Π° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΠΎ ΡΠ°Π·ΠΈΠΊ
-
ΠΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΡΠ΅ βΠΠ·Π²ΡΡΠ»ΠΈΠ²ΠΈβ ΠΈ βΠΠ΅ΠΈΠ·Π²ΡΡΠ½ΠΈβ (ΠΠ·Π²ΡΡΠ΅Π½ΠΈ ΠΈ Π½Π΅ΠΈΠ·Π²ΡΡΠ΅Π½ΠΈ). ΠΠ΅ Π±Π°Ρ ΡΠΎΡΠ½ΠΎΡΠΎ ΠΈΠΌΠ΅, ΡΠΏΠΎΡΠ΅Π΄ ΠΌΠ΅Π½Π΅, Π½ΠΎ ΡΠΎΠ° Π΅ ΠΎΠ½Π° ΡΡΠΎ Π΅. ΠΠ°ΠΊΠ»ΡΡΠΎΠΊΠΎΡ Π΅ Π΄Π΅ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΎΡ ΠΎΠ΄ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° βΠΠ·Π²ΡΡΠ»ΠΈΠ²ΠΈβ ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΠ°Ρ Π²ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ΄ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅ΡΠΎ Π²ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΎΡ, Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° βΠΠ΅ΠΈΠ·Π²ΡΡΠ½ΠΈβ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΡΠ°ΠΌΠΎ Π·Π° Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π²ΠΎ Π΄ΡΡΠ³ΠΈ Π±Π°ΡΠ°ΡΠ° (Π²ΠΎ ΡΡΡΡΠΈΠ½Π°, ΡΠ°ΠΌΠΎ ΡΡΠ½ΠΊΡΠΈΡΠ°).
ΠΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΈΠΏΠΎΡ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅
-
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½ΠΎΠ²ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ²Π°ΡΠ΅/ΠΏΡΠ΅ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈΡΠ΅. ΠΠ° Π΄Π° Π³ΠΎ ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ Π½Π°ΡΠ΄Π΅ΡΠ΅ Π²ΠΎ Π΄ΡΠ²ΠΎΡΠΎ, ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ ΡΠΎ Π΄Π΅ΡΠ½ΠΎΡΠΎ ΠΊΠΎΠΏΡΠ΅ ΠΈ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ βOverrideβ ΠΎΠ΄ ΠΏΠ°ΡΠ°ΡΠΊΠΎΡΠΎ ΠΌΠ΅Π½ΠΈ. ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠ°ΠΌΠ΅ΡΠΈ ΠΎΠ²Π΄Π΅ Π΄Π΅ΠΊΠ° Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠ²ΠΈΡΠ½ΠΎ Π½Π΅ ΡΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π²ΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈ Π½Π΅ ΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΈ. ΠΠ° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ Π²ΠΎ ΠΌΠ΅Π½ΠΈΡΠΎ βPreset Managerβ Π²ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΡ. ΠΡΠ΅ΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π³ΠΈ Π·Π°Π΄ΡΠΆΡΠ²Π°Π°Ρ ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ Π°ΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ Π±ΠΈΠ»ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎ, ΡΠΎΠ° ΡΠ΅ ΠΎΡΡΠ°Π½Π΅ ΡΠ°ΠΊΠ° ΠΈ ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π° Π²Π΅Π΄Π½Π°Ρ.
ΠΡΠΈΠΌΠ΅Ρ Π·Π° Π½ΠΎΠ²ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π²ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΎΡ Π½Π° Preset Manager
-
ΠΠ° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ, ΡΠ΅ Π³ΡΠ°Π΄ΠΈ βΠ΄ΡΠ²ΠΎβ Π½Π° Π±Π°ΡΠ°ΡΠ°, ΡΡΠΎ Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΡΡΠΎ. ΠΡΠ²ΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΊΠΎΠΈ ΡΠΎΠ±ΠΈΡΠ°Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π° Π²ΡΠΎΡΠΎ ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠ°Ρ. Π Π΅Π·ΡΠ»ΡΠ°ΡΠΎΡ ΠΎΠ΄ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π΅ ΠΊΠ΅ΡΠΈΡΠ°Π½, ΠΏΠ° Π°ΠΊΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ΄ ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΎΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠΎΠ³Π°Ρ Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ°, ΠΎΠ²Π° ΡΠ΅ Π³ΠΎ Π½Π°ΠΌΠ°Π»ΠΈ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅.
-
ΠΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π°Ρ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½ΠΈΠ²ΠΎΠ°:
-
ΠΠ° ΡΠ΅Π»ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ - ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΡΠ΅ΠΊΠΎΠ΅ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ ΠΏΡΠΎΠ΅ΠΊΡ
-
ΠΠ° Π½ΠΈΠ²ΠΎ Π½Π° ΡΠΈΠΌ (Π’ΠΈΠΌ) - ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π²ΠΎ ΠΈΠ·Π±ΡΠ°Π½ΠΈΠΎΡ ΡΠΈΠΌ.
-
ΠΠ° Π½ΠΈΠ²ΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡ - ΠΠ΅ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π° Π²ΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ
ΠΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°
βΠ Π΅ΡΠ½ΠΈΠΊβ Π·Π° ΠΏΠΎΡΠ΅ΡΠ½ΠΈΡΠΈ
Π ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π°ΠΌ ΡΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ°Π±ΠΎΡΠΈ ΡΡΠΎ ΠΌΠΈ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π° ΠΏΡΠ°ΡΠ°ΡΠ°, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ°ΠΌ Π³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ ΠΊΠΎΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ Π³ΠΎ ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π°Ρ ΠΆΠΈΠ²ΠΎΡΠΎΡ.
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎ ΡΠΏΠΈΡΠΎΡΠΈ
- Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ (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 ΠΊΠΎΡΠΈΡΡΠ°Ρ 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 Π½Π΅ ΡΠ΅ΠΊΠΎΠ³Π°Ρ Π·Π½Π°Π΅ Π·Π° Π½ΠΈΠ²Π½ΠΎΡΠΎ ΠΏΠΎΡΡΠΎΠ΅ΡΠ΅, Π° Π½Π°ΡΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΅ Π΄Π° Π³ΠΎ Π½Π°ΡΡΠΈΠΌΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ Π΄Π΅ΠΊΠ° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΏΡΠΈΠΏΠ°ΡΠ°Π°Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π½Π° ΠΎΠ²Π°Π° ΡΠ°ΠΌΠΊΠ°. ΠΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ ΠΎΠ²Π° Π΅ ΠΊΠΎΠΌΠΏΠ»ΠΈΡΠΈΡΠ°Π½ΠΎ ΠΎΠ΄ ΡΠ°ΠΊΡΠΎΡ ΡΡΠΎ ΡΠ°ΠΌΠΊΠΈ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΈΠΌΠΈΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΡΠ΅ΡΡΠΈ ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π½Π΅Π΄Π²ΠΎΡΠΌΠΈΡΠ»Π΅Π½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄ΠΈ ΠΎΠ΄Π½ΠΎΡΠΎΡ Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΠΏΠΎΠ²ΠΈΠΊ ΡΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°.
Π’Π΅ΡΠΊΠΎΡΠΈΡΠ°ΡΠ° Π΅ ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠ°ΡΠ° Π½Π° ΡΠ°ΠΊΠ²ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π²Π° ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΈ ΡΡΠ΅Π±Π° Π΄Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ Π³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ Π»Π°ΠΆΠ½ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ²ΠΈ. ΠΠΎΡΡΠΎΡΠ°Ρ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΎΡΠ½ΠΎΡΡΠ° Π½Π° ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΈ ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ:
-
ΠΡΠ²Π°ΡΠ° ΠΎΠΏΡΠΈΡΠ°, ΡΠΈΠ³ΡΡΠ½ΠΎ Π·Π½Π°Π΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ Π½Π° ΡΠΈΠΌΡΠΊΠΎ Π½ΠΈΠ²ΠΎ. ΠΠΎ, Π°ΠΊΠΎ ΡΠΈΠΌΠΎΡ ΠΎΠ΄Π»ΡΡΠΈ Π΄Π° Π·Π°Π·Π΅ΠΌΠ΅ ΠΏΠΎΠΈΠ½Π°ΠΊΠΎΠ² ΠΏΡΠΈΡΡΠ°ΠΏ ΠΈΠ»ΠΈ ΠΊΠΎΡΠΈΡΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ ΠΊΠΎΠΈ ΠΈΠΌΠΈΡΠ°ΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΊΠ»ΠΎΠΏΡΠ²Π°Π°Ρ, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ Π½Π΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΡΠΈΡΠ°ΡΠ½Π° ΡΠ»ΠΈΠΊΠ° Π·Π° Π±ΡΠΎΡΠ½ΠΈ Π»Π°ΠΆΠ½ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ²ΠΈ.
-
ΠΡΠΎΡΠ°ΡΠ° ΠΎΠΏΡΠΈΡΠ° Π΅ Π΄Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ ΠΊΠΎΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΅ ΡΠ°ΡΠ½ΠΎ ΡΠ²Π΅Π·Π΅Π½Π°. Π‘ΠΎ ΠΎΠ²ΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏ, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ΠΌΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ Π΄Π΅ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΡΠΎ Π½ΠΈ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½Π° Π΅ ΡΠΎΡΠ½ΠΎ ΠΈΡΠΊΠΎΡΠΈΡΡΠ΅Π½Π° Π²ΠΎ ΠΎΠ²Π°Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°.
-
Π ΡΡΠ΅ΡΠ°ΡΠ° ΠΎΠΏΡΠΈΡΠ° Π΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π΄Π²Π°ΡΠ° Π³ΠΎΡΠ΅Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ ΠΏΡΠΈΡΡΠ°ΠΏΠΈ Π·Π°Π΅Π΄Π½ΠΎ.
ΠΠ°ΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΡΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠ·Π½Π°ΡΠ° Π²ΠΎ ΡΠ΅ΡΠ½ΠΈ ΠΊΡΡΠ³ΠΎΠ²ΠΈ $
, ΠΊΠΎΡ Π³ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ²Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π²ΠΎ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ ΡΠΎΡΠΌΠΈΡΠ°Π½ΠΎ 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. ΠΠ°ΡΠΎΠ° ΡΠΎΠ·Π΄Π°Π΄ΠΎΠ²ΠΌΠ΅
ΠΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌΠ΅!
ΠΠ·Π²ΠΎΡ: www.habr.com