××× ××ך!
××¢××××ª× ×, ××××š× ×©×× × ×¢×סקת ××¢×ת×× ×§×š×××ת ××××× ×©×× ×× ×× ×ת×× ×§×× ×¡××× (SAST). ××××¥ ×ק××€×¡× ×××× ×¢××××× ××××׊ע. ×××××, ××× ×ª××× ×׀ך×××§× ××××× ××××××ת ××ש×ש×ת ××, ××× ×× ×¢× ××× ××× ××××××ת ××× ×××ס×ת ×¢× ××× ×××× ×× ×ת××. ××עת×, ××× ×קך××ך××× ×× ××ש×××× ×××תך ××××ךת ××× SAST ××× ×××××ת ××ת××× ×××ª× ×׀ך×× ×××ש×××× ×©××, ××××ך ××ת×× ×××©× ×ת ×××× × ×ת×× ××, ××€× ×©×× × ×§×š××× ×עת×× ×§×š×××ת ××תך, ש×××ת×ת ××ת×××ת ××ש×ת.
×ך×× ×× × ×שת×ש×× ×-Checkmarx - ×× ×ª× ×§×× ××¢× ××× ×××ק ××××. ××××ך ×× ×××ך ×¢× ×× ×ס××× ×©×× ××ת××ת ×××× × ×ת×× ×¢××ך×.
ת××× ××¢× ××× ××
×× ×ס×
ך×ש×ת, ×ך׊×× × ××××××¥ ââ×¢× ××× ×××××ך×× ××××××× ×ך×ס×ת ×¢× ×ת××× ×ת ×©× ×ת××ת ש×××ת×ת ×¢××ך ׊'ק××ךקס. ××× ×€××š×¡× ××תך Habré ×ס××£ 2019 ת×ת ×××תךת:
××× ×××× ××€×ך×× ×××Š× ××ת×× ×ת ×ש×××ת×ת ×ך×ש×× ×ת ×-CxQL (ש׀ת ש×××ת×ת ×©× ×Š'ק××ךקס) ×¢××ך ××ש×× ×××× ××ש×× ××׊×× ×ת ×עקך×× ×ת ××ס×ס××× ×©× ×××€× ××€×¢××× ×©× ×××× × ×ת××.
×× ××××ך ×¢× ××ת××ך ××, ×× ×× ××× ×Š×ת×× ×¢×××× ×××× ×§×××××. ××××ך ש×× ×× ×¡× ××ך××× ××¢×× "××סף ×ת××× ××", ךש××ת ׀תך×× ×ת ×××¢××ת ס׀׊××€××ת ×©× ×ª×§××ª× ××× ××××× ×¢××××ª× ×¢× ×Š'ק××ךקס. × ×××Š×ª× ×××€×ק ×ת ×××× ×©×× ×¢× ×ך×× ××××¢××ת ××××. ××€×¢××× ×× ××× ×ס׀×ק ××××¢ ×ת××¢××, ×××€×¢××× ××€××× ××× ×§×©× ××××× ××× ×¢×ש×× ×ת ×× ×©× ×ךש. ×× × ×ק××× ×©×× ×ס××× ×©×× ××××××ת ××× ×©×× × ×× ×××× ×ש×××, ×"××סף ×ת××× × ×©×××ת×ת ××ת×××ת ××ש×ת" ××ס×× ×× ××× ×©×¢×ת ×× ××× ×ª×× ×¢×Š×. ×× ×××× × ×ª×××!
××××¢ ×××× ×¢× ××××××
ך×ש×ת, ×××× × ×¡×ª×× ×¢× ××× ××ש××× ×ס×ס××× ×ת×××× ××¢×××× ×¢× ××××××, ×××× × ×××× ××תך ×©× ×× ×©××§×š× ××ך ××. ××× ×××× ×©×ת××¢×× ×× ×××ך ×××× ×¢× ×× ×× ×©××× ×××× ×€×š×ש ×××× ×, ××× ×× ×××× × ××.
-
×××××× ×××ש××× ××××× ×סך××§× ××ת×× ×××××š× ×©× ×××š× ××ת××× (×עך×ת ×©× ××××× ×€×¢××××). ××ª× ×××× ××׊×ך ×ס׀ך ×××ª× ××××× ×©× ×××ך×ת ק×××¢×ת ×ך×ש, ×××××€× ×©×× ××××ק ××× ×ת ×××ª× ×ª××× ×׀ך××× ×ס׀׊××€××× ×©× ×ת×××× ×©××. ××ª× ×××× ×ק××¥ ×××ª× ××€× ×©×€× ×× ××××ך ×××ך×ת ק×××¢×ת ×ך×ש ×¢××ך ×× ×€×š××ק×. ×ס׀ך ×××××× ××€×¢×××× ×ש׀××¢ ×¢× ×××ך×ת ××××ק ×סך×ק×.
×××ךת Preset ×××שק Checkmarx
-
×××××× × ×¢×š××× ×××× ××××× ××©× CxAuditor. ××× ××ש×× ×©×××× ×¢×××× ×©×ת××ך ×שךת ××ך××¥ ×ת Checkmarx. ×××× ×× ×©× × ×׊×× ×€×¢×××: עך××ת ××××× ×× ×ת×× ×ª×׊××ת ×©× ×¡×š××§× ×©××ך ××׊ע×.
××שק CxAudit
-
×××××× ×-Checkmarx ××××ק×× ××€× ×©×€×, ××××ך ××× ×©×€× ×ש ×¡× ×©×××ת×ת ×ש××. ××©× × ×× ××× ××××× ×××××× ××××× ××× ×§×©×š ×ש׀×, ××× ×× ×× ×©× ×§×š× ×©×××ת×ת ×ס×ס××ת. ×¢× ×€× ×š××, ש×××ת×ת ×ס×ס××ת ×××××ת ×××€×ש ××××¢ ש×× ×שת×ש×× ××××× ××ך××.
×××קת ××ק×× ××€× ×©×€×
-
×××××× ×× "× ××ª× ×× ×××׊××¢" ×"×× × ××ª× ×× ×××׊××¢" (×××€×¢× ××× ××׊ע). ×× ××ש ××©× ×× ×××, ××עת×, ××× ×× ×× ×©××. ×ש××š× ×ת×ת×× × ××× ×©×ת×׊×× ×©× ××׊××¢ ×××× "× ××ª× ×××€×¢××" ת××Š× ×ת×׊××ת ×סך××§× ×××שק ××שת×ש, ××××× "×× × ××ª× ×× ×××€×¢××" × ××׊×× ×š×§ ××× ××שת×ש ×ת×׊××ת ש××× ××קש×ת ××ך×ת (×ע׊×, ךק ×€×× ×§×Š××).
ק××עת ס×× ×××× ×עת ×׊×ך×
-
× ××ª× ××׊×ך ××××× ××ש×× ×× ××ש×××/××ת×× ××××× ×§×××××. ×¢× ×× ×ª ×ש××ª× ×××, ×¢××× ××׊×× ×××ª× ××¢×¥, ×××××¥ ××××Š× ××× ×ת ×××××ך "עק××£" ××ת׀ך×× ×× ×€×ª×. ×ש×× ××××ך ××× ×©×××××× ×××ש×× ××× × ×××××× ×ת×××× ××××ך×ת ×ק×××¢×ת ×ך×ש ×××× × ×€×¢××××. ××× ××ת××× ××שת×ש ×××, ×¢××× ×××€×¢×× ×××ª× ×ת׀ך×× "×× ×× ××××ך ×ך×ש" ×××ש×ך. ××××× ×©× ×ת×× ×××ש ש××ך×× ×¢× ××××ך×ת ש×××, ××××ך ×× ×××× ××× ×€×¢××, ××× ××ש×ך ×× ××××× ××××€× ×××××.
××××× ×××× ××ש ×××שק 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");
×××, ×× ××ª× ×Š×š×× ××׀ש ××©×€× ××ךת ש×ש×× ×× ×× × ×××× ×סך××§× (××ש×, ×ך××× ×׀ך×××§× ×× ×ך××××), ת××× ××ך××× ×ת ×ך×× ××××××ק××× ×©×× × ×××׊ע×ת ××©×ª× ×:
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 ××׊××× ×××ª× ×Š×€×××× ××ך×× ×©××× × ×ש××××ª× ×. ×××§×š× ××, ××€×¢××× ×ש ×¡×©× ×× ×××ך ×××¡× ×× ×ª×× ××, ש××× ×¢ ××× ××××× ×¡ ש××. ××× ××ª×§× ×ת ××, ×¢××× ×××€×¢×× ×ס׀ך ש×××ת×ת:
×¢××ך ׊'ק×ךקס ××€× × 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, ×× ×©×סך ×× ×עת×× ×§×š×××ת ××× ×× ×× ×× ×ך×× ×ª××¢××, ××× ××× ××××××ת ×××ת ×©× ×€×ª×š×× ××¢××ת ×ס××××ת ×ת×××ך ×ת×××× ×©× ×××€× ××€×¢××× ×©× ×©×××ת×ת ××××€× ××××.
×× ×¡× ×עש×ת ×ת ××××× ×§×Š×ª ××תך ק××× ××× ×©×ת××× ×׊××× ×ת×× ×©×€×ª ×ש×××ת×ת ×××ª× ×ס׀ך ××××××ת ×ש×××ש ×ש×××ת×ת ××ת×××ת ××ש×ת ××× ×׀ת×ך ××¢××ת ×ס××××ת. ×××§× ×××××× ×××× ×× ××ª× ××שת×ש ××× ××××š× ×©×× ×××¢× ××× ×©×× ××××, ××ך×× ×¡×€×Š××€××× ××תך, ×× × ××ª× ××שת×ש ××× ×× ×¢× ××× ×©×× ×× ×ק×× ×× ×©×ת××× ×׀ך×× ×××ש×××× ×©××.
×× ×× × ×××¢××ת ×©× ×ª×§×× × ××× ×ך××:
×ש×××: ×ש ××× ×ך×××ת ×ת×׊××ת ×©× ××׊××¢ ×××× ×××ת ××× ××× ×§×× ×× ×©× ××ך, ×¢××× ××¢××× ××ת ×××.
׀תך××: ××××, ××€×¢××× ×Š'ק××ךקס ×׊××× ×ס׀ך ×ך×××ת × ×ª×× ×× ×©×¢×©×××ת ×××€××£ ×××××ת ××š×¡× ×ק×׊ךת ×©× ××ך××. ×ש ש××× ×××××ת ××קך×× ×××× 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);
×ש×××: ×ך×× ×ת ךש××ת ×××©×ª× ×× ×¢× ×¡×ס×××ת
׀תך××: ××××ª× ×××××¥ ×ש×× ×× ××× ×××× ××ס××¡× ××××ךת ס×ס×××ת ×ק×× ××××ס××£ ×× ×š×©××× ×©× ×©××ת ××©×ª× ×× ×× ××××× ××××š× ×©××.
Password_privacy_violation_list
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 ××××ק×ת ××€× ×©×€×, ××× ×¢××× ×××ס××£ ××××× ××× ×©×€×. ×××× ××× ××××××ת ×××××× ××××.
×× × ×¢×©× ×©×××ש ×ס׀ך××ת ××ש××××ת ×× ×××××€×ת ×€×× ×§×Š××× ×××ת ס×× ×ך××ת, × ××ª× ×××ס××£ ×××ª× ×ק××ת ×××× ××ס×ס×. ×× ×× ×× ×©×שת×ש ×× ×××× ××× ×¢× ××ק××× ×××ש×. ××××××, ס׀ך××ת ××× ××¡× ××× ×ך×××× ×× Timber ×-Logi. ×××××× ××ס×ס×ת, ××× ××××× ×××××× ×©×××ת ש××× × ×עך×ת××ת, ×× ×©×× ×¡×ס×× ×× ×××× ××€×¢×× × ×× ×¡×× ×××××, ×× × ××¢ ×¢× ××. ×××× × × ×¡× ×××ס××£ ×××ך×ת ×©× ×©×××ת ×××× ××××× ×Š'ק××ךקס.
××××× ×ק×× ××××§× ××שת×שת ×ס׀ך××ת 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");
}
}
××× × ××××× ××קשת ׊'ק××ךקס, שת×׀שך ×× ×××ס××£ ××××š× ×©× ×§×š××× ×ש×××ת Timber ×× ×§××ת ×׊××× ×× ×ª×× ×× ××××€××ק׊××:
FindAndroidOutputs
// ÐПлÑÑаеЌ ÑезÑлÑÑÐ°Ñ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ Ð±Ð°Ð·ÐŸÐ²ÐŸÐ³ÐŸ пÑавОла
result = base.Find_Android_Outputs();
// ÐПпПлМÑеЌ вÑзПваЌО, кПÑПÑÑе пÑОÑ
ПЎÑÑ ÐžÐ· бОблОПÑекО Timber
CxList timber = All.FindByExactMemberAccess("Timber.*") +
All.FindByShortName("Timber").GetMembersOfTarget();
// ÐПбавлÑеЌ к кПМеÑÐœÐŸÐŒÑ ÑезÑлÑÑаÑÑ
result.Add(timber);
×××ª× ×××× ×× ×××ס××£ ×××× ×ש××, ××× ×× ×ת×××ס ×ש×ך×ת ××× ××¡× ××× ×ך××××:
FindAndroidLog_Outputs
// ÐПлÑÑаеЌ ÑезÑлÑÑÐ°Ñ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ Ð±Ð°Ð·ÐŸÐ²ÐŸÐ³ÐŸ пÑавОла
result = base.Find_Android_Log_Outputs();
// ÐПпПлМÑеЌ вÑзПваЌО, кПÑПÑÑе пÑОÑ
ПЎÑÑ ÐžÐ· бОблОПÑекО Timber
result.Add(
All.FindByExactMemberAccess("Timber.*") +
All.FindByShortName("Timber").GetMembersOfTarget()
);
××× ××, ×× ××ש××× ×× ×ך×××× ×שת×ש×× 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
. ×× × ×š××ת ×ש××××ª× ×× ××× × ××× ××׊×× ××××š× ××× ×ך×××× ×××׀שךת ש×××ש ×תע××ךת HTTP:
// ÐÑавОлÑÐœÑй ваÑÐžÐ°ÐœÑ Ñ ÐžÑпПлÑзПваМОеЌ cxXPath
result = cxXPath.FindXmlAttributesByNameAndValue("*.xml", 8, "cleartextTrafficPermitted", "true", false, true);
×××× × ×¡×ª×× ×¢× ×× ×§×Š×ª ××תך ××€×ך××, ×××××× ×©×ת×××ך ×¢××ך ×× ××€×× ×§×Š××ת ××××, ×××ך ש××× ×ª× ××ת, ×× ××ª× ×š×§ ׊ך×× ××××ך ×ת ××€×× ×§×Š×× ×©××ª× ×Š×š××. ××, ×ך׊ף ××€× ×׀ך××ך××:
-
"*.xml"
- ×ס×ת ק×׊×× ××××€×ש -
8
- ×××× ××©×€× ×©×¢×××š× ×× ×××× -
"cleartextTrafficPermitted"
- ×©× ×ª××× × ×-xml -
"true"
- ××¢×š× ×©× ×ª××× × ×× -
false
- ש×××ש ×××××× ×š××××š× ×עת ×××€×ש -
true
- ×€×ך××©× ×©××××€×ש ×ת×׊ע ת×× ×תע×××ת ×ך×ש××ת, ××××ך, ×× ×ª××× ×š×ש××ת
××××××, ×שת××©× × ×××× ×©××××, ××××× × ×××××, ×××ך×ת ××××ך ךשת ×× × ××× ×ת ××× ×ך×××× ×××׀שך×ת תקש×ךת ×¢× ×שךת ×××׊ע×ת ׀ך×××ק×× 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'
...
}
××××× ×¢××ך ׊'ק×ךקס:
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);
}
}
}
×××©× ×× ××××× ××××ת ×× ××× ××ךס××ת ×ש×××ש×ת ×× ×š×§ ×¢××ך ××ש××× ×× ×ך××××, ××× ×× ×¢××ך ×קך×× ××ך×× ××שך ××ª× ×Š×š×× ×ק×××¢ ×× ×ת×׊×× ×©×××ת ×ק×××¥ ×ס×××.
×ש×××: ××סף ת×××× ×ס׀ך××ת ×Š× ×©×××©× ×× ×ת×××ך ××× × × ×ª×× ××××××
׀תך××: ×ס׀ך ××ס×ך×ת ×ש×× ×ת ××ש×ש×ת ×ת×××× ×ת××ת ×ק×× ×€×©×× ×× ××תךש××××. ×××××, ׊'ק×ךקס ×× ×ª××× ××××¢ ×¢× ×§××××, ××ש×××ª× × ××× ×××× ×××ª× ××××× ×©×©×××ת ×ס××××ת ש××××ת ס׀׊××€×ת ××ס×ךת ××. ××€×¢××× ×× ×ס××× ×××× ××¢×××× ×©×ס×ך×ת ×שת×ש×ת ×ש××ת ×€×× ×§×Š××ת ש××××× ×××× ××× ×׀שך ×ק×××¢ ××××€× ×× ×ש××¢× ×ת ×קשך ×©× ×§×š××× ×ס×××ת ×ס׀ך××× ×¡×€×Š××€×ת.
×ק××©× ××× ×©×ת×××ך ×©× ×¡×€×š××ת ×××× ×× ×ª××× ××××× ×ך××× ×××ª× ×Š×š×× ×××ª× ×¡×ת ××× ××××× ×¢ ×ק××ת ×ס׀ך ×š× ×©× ×ª×׊××ת ש××××ת. ××©× × ×ס׀ך ×׀שך×××ת ×ש××€×ך ×××ק ×סך××§× ××׀תך×× ×××¢××:
-
××׀שך×ת ×ך×ש×× ×, ×× × ××××¢×× ××××××ת ש×ס׀ך××× ×ש×שת ×׀ך×××§× ×¡×€×Š××€× ×××××× ××××©× ×ת ×××× ×ך×ת ×׊××ת. ××× ×× ×׊××ת ××××× ×× ×§×× ××××©× ××ךת ×× ×שת×ש ××ס׀ך ס׀ך××ת ש××× ×©××ת ×€×× ×§×Š××ת ×××€×€××, × ××× ×ק×× ×ª××× × ×× × ×¢××× ×××××× ×©× ×ס׀ך ××××××ת ×××××ת
-
××׀שך×ת ××©× ××× ××× ××׀ש ק×׊×× ×©××× ×ס׀ך××× ×××××ת ×××ך×ך. ×¢× ×××©× ××, ×× × ×××××× ××××ת ×××××× ×©×ס׀ך××× ×©×× × ×Š×š×××× ×ש×שת ××××ק ×ק×××¥ ×××.
-
×××׀שך×ת ×ש××ש×ת ××× ××שת×ש ××©×ª× ×××ש×ת ××¢×× ××××.
××××××, ×××× × ×¡×ª×× ×¢× ×¡×€×š××× ××××¢× ×××¢×××× ×Š×š×× $
, ××××××£ × ×ª×× ×× ×ש×××תת SQL ×©× ××Š×š× ×ך×ש. ××××ך, ××עש×, ××× ×× ×××× ×ש×ך ×©× Prepared Statement ××'××××. ×××, ×× ××ª× ×Š×š×× ××× ×ת ××××€× ××× ×× ×©×××תת SQL, ××ש×, ×× ××ª× ×Š×š×× ×××¢××ך ש××ת ×××××ת, ××ª× ×××× ××שת×ש ×××׀ך××ך #$
, ×שך ×××××£ ×ש×ך×ת ×ת ×× ×ª×× ×× ×ת×× ×ש××××ª× (×××¢× ××× ×©×š×©×ך ××ך××ת).
ק×× ××××××:
// РПбÑеЌ ÑлÑÑае - зМаÑеМОÑ, кПМÑÑПлОÑÑеЌÑе пПлÑзПваÑелеЌ
val table = "coffees"
sql"select * from #$table where name = $name".as[Coffee].headOption
׊'ק××ךקס ×¢×××× ×× ××××¢ ××× ××××ת ×ת ×ש×××ש ×- 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");
××¡×§× ×
×× × ×ק××× ×©×××ך ×× ×××× ×©××××©× ××× ×©×ת××× ×ת ××××ך×ת ×¢× ×××× ×Š'ק××ךקס. ×××× ×× ×©×××ª× ××ק×× ×ש×× ××ך ×ך×× ××× ×××Š× ×× ×ש×× ×©××××©× ×××ך×× ×××.
××ך×× ×׊עך, ק××× ×××× ××סך ××ש×× ×©×× × ××ª× ×××§× ×š×¢××× ×ת ××ש×× ××××× ×€×ת×× ××××× ×¢××ך ׊'ק××ךקס. ×××× ×× ××Š×š× ×
ת××× ××!
×ק×ך: www.habr.com