แฐแแ แฐแแแ !
แฉแแแแก แกแแฅแแแแแแแแจแ, แฉแแแแ แแแแแแแแ แซแแแแแ แฎแจแแ แแ แแฎแแแ แกแฎแแแแแกแฎแแ แกแขแแขแแแฃแ แ แแแแแก แแแแแแแแก แฎแแแกแแฌแงแแแแก (SAST). แงแฃแแแแแ แแกแแแ แงแแแแ แกแแจแฃแแแแ แแฃแจแแแแแ. แ แ แแฅแแ แฃแแแ, แแก แงแแแแแคแแ แ แแแแแแแแแแฃแแแ แแ แแแฅแขแแ แแ แแแกแจแ แแแแแงแแแแแฃแ แขแแฅแแแแแแแแแแ, แแกแแแ แ แแแแแแแ แแแ แแแ แแ แแก แแแคแแ แฃแแ แแก แขแแฅแแแแแแแแแ แแแแแแแแก แฌแแกแแแแ. แฉแแแ แแแ แแ, แแ แ-แแ แแ แงแแแแแแ แแแแจแแแแแแแแแ แแ แแขแแ แแฃแแ SAST แแแกแขแ แฃแแแแขแแก แแ แฉแแแแกแแก แแ แแก แแฅแแแแ แแแแแแแชแแแแแก แกแแแชแแคแแแแแ แแแกแ แแแ แแแแแก แจแแกแแซแแแแแแแ, แแแ แซแแ, แฉแแฌแแ แแ แแ แจแแชแแแแแ แแแแแแแแก แฌแแกแแแ แแ, แ แแแแ แช แแแ แฃแคแ แ แฎแจแแ แแ แฃแฌแแแแแแ, Custom Queries.
แฉแแแ แงแแแแแแ แฎแจแแ แแ แแแงแแแแแ Checkmarx - แซแแแแแ แกแแแแขแแ แแกแ แแ แแซแแแแ แ แแแแแก แแแแแแแแขแแ แก. แแ แกแขแแขแแแจแ แแ แแแกแแฃแแ แแ แแแกแแ แแแแแแแแก แฌแแกแแแแก แแแฌแแ แแก แฉแแแก แแแแแชแแแแแแแแ.
แกแแ แฉแแแ
-
แแแแแแ แแแคแแ แแแชแแ แฌแแกแแแแก แจแแกแแฎแแ -
"แแแฅแกแแแแแ" แแแแฌแงแแแแแแแแก -
แแ แแแแแแแแแก แแแแแแ แแแ
Entry
แแแกแแฌแงแแกแแกแแแแก, แแแแแ แแแ แฉแแแ แ แแแแแแแแ แกแขแแขแแแแแ แแ แ-แแ แแ แ แฃแกแฃแ แแแแแ Checkmarx-แแกแแแแก แแแแฎแแแแแแแก แแแฌแแ แแก แแแฎแแกแแแแแแแแแแก แจแแกแแฎแแ. แแแ แแแแแฅแแแงแแแ Habrรฉ-แแ 2019 แฌแแแก แแแแแก แกแแแแฃแ แแ:
แแแ แแแขแแแฃแ แแ แแแแแฎแแแแแก, แแฃ แ แแแแ แฃแแแ แแแฌแแ แแ แแแ แแแแ แแแแฎแแแแแแ CxQL-แจแ (Checkmarx Query Language) แแแแแแ แแ แขแแกแขแแก แแแแแแแชแแแกแแแแก แแ แแฉแแแแแแก แแแแแแแแก แฌแแกแแแแก แแฃแจแแแแแก แซแแ แแแแ แแ แแแชแแแแแก.
แแ แแแแแแแแ แแ, แ แแช แแแกแจแแ แแฆแฌแแ แแแ, แแฃแแชแ แแแแแแ แแ แแแแแ แแแแแช แแฅแแแแ. แฉแแแก แกแขแแขแแแจแ แจแแแแชแแแแ แจแแแแแแแแ แแ แแแแแ แ โแ แแชแแแขแแแแก แแ แแแฃแแโ, แแ แแแแแ แแขแฃแแ แแ แแแแแแแแแก แแแแแญแ แแก แฉแแแแแแแแแแ, แ แแแแแแแช แจแแแฎแแแ Checkmarx-แแแ แแฃแจแแแแแก แแ แแก. แแ แแแแแฌแแ แญแแฃแแก แจแแแแแแแ แแ แแ แแแแแ แแ แแแแแแแก แแแแ. แฎแแแแแฎแแ แแแแฃแแแแขแแชแแแจแ แแ แแงแ แกแแแแแ แแกแ แแแคแแ แแแชแแ แแ แแแแฏแแ แซแแแแ แแงแ แแแแก แแแแแแ, แแฃ แ แแแแ แฃแแแ แแแแแแแแแแแ แแก, แ แแช แแงแ แกแแญแแ แ. แแแแแแแแแแ, แ แแ แฉแแแ แแแแแชแแแแแแ แแ แฃแซแแแ แฆแแแแแแ แแ แแฅแแแแ แฃแจแแแแแ แแ แแก "แแแแฎแแแ แแแแฃแ แ แจแแแแแฎแแแก แ แแชแแแขแแแแก แแแแแฅแชแแ" แแแแแแแแก แแฅแแแ แ แแแแแแแแ แกแแแแก แแ แ แแแแแแแแ แแแ แแฃแ แฃแฏแ แแแก. แแแจ แแกแ, แแแแแฌแงแแ!
แแแแแแ แแแคแแ แแแชแแ แฌแแกแแแแก แจแแกแแฎแแ
แแแ แแแ แ แแแจแ, แแแแแ แแแแแแฎแแแแ แ แแแแแแแแ แซแแ แแแแ แแแแชแแคแชแแแก แแ แฌแแกแแแแแ แแฃแจแแแแแก แแ แแชแแกแก, แ แแแ แฃแแแ แแแแแแแ แ แ แแแฎแแแแ แจแแแแแ. แแ แแกแแแ แแแแก แแแแ, แ แแ แแแแฃแแแแขแแชแแ แแ แแคแแ แก แแแแแแก แแแแก แจแแกแแฎแแ แแ แซแแแแแ แแแแ แชแแแแแฃแแแ แกแขแ แฃแฅแขแฃแ แแจแ, แ แแช แแ แช แแฃ แแกแ แแแกแแฎแแ แฎแแแแแแ.
-
แฌแแกแแแ แแแแแแงแแแแแ แกแแแแแ แแแแก แแ แแก, แแแฌแงแแแแกแแก แแ แฉแแฃแแ แฌแแแแกแฌแแ แแแงแแแแแแก แแแฎแแแแแ (แแฅแขแแฃแ แ แฌแแกแแแแก แแแแ แแแ). แแฅแแแ แจแแแแซแแแแ แจแแฅแแแแ แฌแแแแกแฌแแ แแแงแแแแแแก แจแแฃแแฆแฃแแแแ แ แแแแแแแแ, แแ แแฃแกแขแแ แ แแแแ แแแฌแงแแ แแกแแแ, แแแแแแแแแแฃแแแ แแฅแแแแ แแ แแชแแกแแก แกแแแชแแคแแแแแ. แแฅแแแ แจแแแแซแแแแ แแแแฏแแฃแคแแ แแกแแแ แแแแก แแแฎแแแแแ แแ แแแ แฉแแแ แฌแแแแกแฌแแ แแแงแแแแแฃแแ แแแแแแฃแแ แแ แแแฅแขแแกแแแแก. แแฅแขแแฃแ แ แฌแแกแแแแก แ แแแแแแแแ แแแแแแแแก แแฎแแแแก แกแแแแแ แแแแก แกแแฉแฅแแ แแแ แแ แกแแแฃแกแขแแแ.
Preset-แแก แแแงแแแแแ Checkmarx-แแก แแแขแแ แคแแแกแจแ
-
แฌแแกแแแ แ แแแแฅแขแแ แแแฃแแแ แกแแแชแแแแฃแ แแแกแขแ แฃแแแแขแจแ, แกแแฎแแแฌแแแแแแ CxAuditor. แแก แแ แแก แแแกแแขแแแแก แแ แแแ แแแ, แ แแแแแแช แฃแแแแจแแ แแแแ แกแแ แแแ แก, แ แแแแแแช แแฃแจแแแแก Checkmarx-แแ. แแ แฎแแแกแแฌแงแแก แแฅแแก แแฃแจแแแแแก แแ แ แ แแแแแ: แฌแแกแแแแก แ แแแแฅแขแแ แแแ แแ แฃแแแ แจแแกแ แฃแแแแฃแแ แกแแแแแ แแแแก แจแแแแแแแแก แแแแแแแ.
CxAudit แแแขแแ แคแแแกแ
-
Checkmarx-แแก แฌแแกแแแ แแแงแแคแแแแ แแแแก แแแฎแแแแแ, แแแฃ แแแแแแฃแ แแแแก แแฅแแก แแแแฎแแแแแแแก แกแแแฃแแแ แ แแแแ แแแ. แแกแแแ แแ แกแแแแแก แแแแแแ แฌแแกแแแ, แ แแแแแแแช แแแแแแงแแแแแ แแแแก แแแฃแฎแแแแแแ, แแก แแ แแก แแแ แแ แฌแแแแแฃแแ แซแแ แแแแแ แแแแฎแแแแแแ. แฃแแแขแแกแฌแแแแ, แซแแ แแแแแ แแแแฎแแแแแแ แแแแชแแแก แแแคแแ แแแชแแแก แซแแแแแก, แ แแแแแกแแช แกแฎแแ แฌแแกแแแ แแงแแแแแก.
แฌแแกแแแแก แแแงแแคแ แแแแก แแแฎแแแแแ
-
แฌแแกแแแ แแ แแก โแจแแกแแกแ แฃแแแแแแโ แแ โแแ แแจแแกแแกแ แฃแแแแแแโ (แจแแกแ แฃแแแแฃแแแ แแ แแ แแ แแก แจแแกแ แฃแแแแฃแแ). แแ แช แแกแ แกแฌแแ แ แกแแฎแแแแ, แฉแแแ แแแ แแ, แแแแ แแ แแก แแกแแ. แแแกแแแแ แแก แแ แแก, แ แแ "แจแแกแแกแ แฃแแแแแแ" แฌแแกแแแแก แจแแกแ แฃแแแแแก แจแแแแแ แแแแแฉแแแแแ แกแแแแแ แแแแก แจแแแแแแแจแ UI-แจแ, แฎแแแ "แแ แแจแแแกแ แฃแแแแแแ" แฌแแกแแแ แกแแญแแ แแ แแฎแแแแ แแแแ แจแแแแแแแแก แกแฎแแ แแแแฎแแแแแแจแ แแแแแกแแงแแแแแแแ (แแ แกแแแแแแ, แแฎแแแแ แคแฃแแฅแชแแ).
แฌแแกแแก แขแแแแก แแแแกแแแฆแแ แ แจแแฅแแแแกแแก
-
แแฅแแแ แจแแแแซแแแแ แจแแฅแแแแ แแฎแแแ แฌแแกแแแ แแ แจแแแแกแแ/แแแแแฌแแ แแ แแ แกแแแฃแแ. แฌแแกแแก แแแแแกแแฌแแ แแ, แแฅแแแ แฃแแแ แแแแแแ แแก แฎแแจแ, แแแแฌแแแแฃแแแ แแแฃแกแแก แแแ แฏแแแแ แฆแแแแแแ แแ แฉแแแแกแแจแแแแ แแแแแฃแแแ แแแ แฉแแแ โOverrideโ. แแฅ แแแแจแแแแแแแแแแ แแแแฎแกแแแแแก, แ แแ แแฎแแแ แฌแแกแแแ แแแแแแแแแ แแ แจแแแแก แฌแแแแกแฌแแ แแแงแแแแแฃแ แแ แแ แแ แแก แแฅแขแแฃแ แ. แแแแ แแแแแงแแแแแแก แแแกแแฌแงแแแแ, แแฅแแแ แฃแแแ แแแแแฅแขแแฃแ แแ แแกแแแ แแแกแขแ แฃแแแแขแจแ "Preset Manager" แแแแแฃแจแ. แฎแแแแฎแแ แแแฌแแ แแแ แฌแแกแแแ แแแแ แฉแฃแแแแก แแแแแก แแแ แแแแขแ แแแก, แแแฃ แแฃ แฌแแกแ แแฅแขแแฃแ แ แแงแ, แแก แแกแ แแแ แฉแแแ แแ แแแฃแงแแแแแแแแ แแแแแแงแแแแแก.
แแฎแแแ แฌแแกแแก แแแแแแแแ Preset Manager แแแขแแ แคแแแกแจแ
-
แจแแกแ แฃแแแแแก แแ แแก แจแแแแแแ แแแแฎแแแแแแแก โแฎแโ, แ แแช แแแแแแแแแแฃแแแ แแแแแ, แแฃ แ แ. แฌแแกแแแ, แ แแแแแแแช แแแ แแแแแก แแแคแแ แแแชแแแก, แจแแกแ แฃแแแแฃแแแ แฏแแ , แฎแแแ แแแแช แแงแแแแแก แแแก. แจแแกแ แฃแแแแแก แจแแแแแ แฅแแจแแ แแแฃแแแ, แแกแ แ แแ, แแฃ แจแแกแแซแแแแแแแ แแ แกแแแฃแแ แฌแแกแแก แจแแแแแแแแก แแแแแงแแแแแ, แแแจแแ แฃแแฏแแแแกแแ แแแแก แแแแแแแแ, แแก แจแแแแชแแ แแแก แกแแแแแ แแแแก แแ แแก.
-
แฌแแกแแแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แกแฎแแแแแกแฎแแ แแแแแแ:
-
แแแแแ แกแแกแขแแแแกแแแแก - แแแแแงแแแแแฃแแ แแฅแแแแ แแแแแกแแแแ แ แแ แแแฅแขแแก แกแแแแแ แแแแกแแแแก
-
แแฃแแแแก แแแแแแ (Team) - แแแแแงแแแแแฃแแ แแฅแแแแ แแฎแแแแ แจแแ แฉแแฃแ แแฃแแแจแ แแ แแแฅแขแแแแก แกแแแแแ แแแแกแแแแก.
-
แแ แแแฅแขแแก แแแแแแ - แแแแแงแแแแแฃแแ แแฅแแแแ แแแแแ แแขแฃแ แแ แแแฅแขแจแ
แแแแก แแแแกแแแฆแแ แ, แแฃ แ แ แแแแแแ แแฅแแแแ แแแแแงแแแแแฃแแ แฌแแกแ
"แแแฅแกแแแแแ" แแแแฌแงแแแแแแแแก
แแ แแแแแฌแงแแ แ แแแแแแแแ แ แแแแ, แ แแแแช แแแแแแฌแแแ แแแแฎแแแแ แแ แแกแแแ แแแฉแแแแแแ แฃแแแ แแ แขแแฅแแแแแก, แ แแแแแแช แแแแจแแแแแแแแแ แแแแแแ แขแแแแแก แชแฎแแแ แแแแก.
แแแแ แแชแแแแ แกแแแแแ
- ะฒััะธัะฐะฝะธะต ะพะดะฝะพะณะพ ะธะท ะดััะณะพะณะพ (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-แจแ, แแก, แ แแช แฎแจแแ แแ แแแแแแแ, แแ แแก แแ แ แแแแแแแ แแแแฃแแแแขแแชแแ, แ แแแแ แช แแแแแแ แแ แแ แแแแแแแก แแแแแญแ แแก แชแแชแฎแแแ แแแแแแแแ แแ แแแแแแแ แจแแแแแฎแแแก แแแแ แแชแแแก แแ แแชแแกแแก แแฆแฌแแ แ.
แแแชแแแแ แชแแขแแแ แแแแฃแแแแแแ แชแฎแแแ แแแ แแแแแแแก, แแแแช แแฌแงแแแก แจแแแแแฎแแแก แแแแจแ แฉแแซแแ แแแก แแ แแแแแงแแแ แ แแแแแแแแ แแแแแแแแ Custom Queries-แแก แแแแแงแแแแแแกแแก แแแ แแแแฃแแ แแ แแแแแแแแแก แแแแแกแแญแ แแแแ. แแแแแแ แแ แแแแแแแ แกแแแแแแ แแแแแแแ แแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแฅแแแแก แแแแแแแแแจแ แแ แแฅแขแแแฃแแแ แชแแแแแแแแแแก แแแ แแจแ, แกแฎแแแแ แฃแคแ แ แกแแแชแแคแแแฃแ แแ, แแแแ แแ แแแแ แแแแแงแแแแแ แแกแแแ แจแแกแแซแแแแแแแ แแฅแแแแ แแแแแแแชแแแก แกแแแชแแคแแแแก แจแแกแแแแแแกแแ แแแแแก แจแแชแแแแ.
แแกแ แ แแ, แแฅ แแ แแก แแก แแ แแแแแแแแ, แ แแแแแแกแแช แงแแแแแแ แฎแจแแ แแ แแแฌแงแแแแแ:
แฒแแแแแแแ: แฌแแกแแแแก แจแแกแ แฃแแแแแก แจแแแแแแแจแ แแ แแก แ แแแแแแแแ แแแแแแ แแ แแ แแ แแแแแแแ แแแแ แแก แแฃแแแ, แแฅแแแ แฃแแแ แแแขแแแแ แแ แแ แแแแแแแ.
แแแแแกแแแแแ: แแแ แแแแช, แแแแฏแแ 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-แแก แฌแแกแแแก.
แกแแขแแกแขแ แแแแแก แแแแแแแแ, แ แแแแแแช แแงแแแแแก แขแแแแแ แแแแแแแแแแแก แจแแกแแแแกแแแแก:
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-แแกแแแแก. แแแแฌแแ แแ แฌแแกแ, แ แแแแแแช แแแแซแแแแก แฉแแแแแแแก แกแแญแแ แ แแแแแชแแแแแก แแ แแแแขแงแแแก แแ แแก แแฃ แแ แ แกแแแแ แแแฎแกแแแแแ แแแ แแแแแ แแ แแแขแแแแแ.
แแกแแแ แคแแแแแก แแแแแแแแ, แ แแแแแแช แจแแแชแแแก backend แกแแ แแแกแแแ แแแแฃแแแแแชแแแก แแแจแแแก:
<?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>
แฒแแแแแแแ: แจแแแแแแแแก แจแแแฆแฃแแแ แคแแแแแก แกแแฎแแแแก/แแแแก แแแฎแแแแแ
แแแแแกแแแแแ: แแ แ-แแ แ แแกแฎแแแ แแ แแแฅแขแจแ, แ แแแแแแช แแแแแแจแแ แแแฃแแแ Android-แแกแแแแก แแแแแแฃแ แ แแแแแแแชแแแก แจแแแฃแจแแแแแแกแแแ, แจแแแแฎแแแ แฌแแกแแก แชแ แฃ แแแแแขแแแ, แ แแแแแแช แแแแกแแแฆแแ แแแก แแฃแแแแแแ แแแ แแแแขแ แก. แคแแฅแขแแ, แ แแ แคแแแแจแ แซแแแแแก แแแแแ แแชแฎแแแก แฌแแกแ 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 แแแแฎแแแแแจแ. แแก แแ แแก, แคแแฅแขแแแ แแแแ, แแก แแ แแก แแแแแแแแแฃแแ แแแแชแฎแแแแแแก แแแ แแแแแ แ แแแแแแแ Java-แจแ. แแแแ แแ, แแฃ แแฅแแแ แแญแแ แแแแแ 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