Java IAST引擎能力评价体系
graph LR
L1H1["IAST引擎能力评估体系(JAVA)"]==>L2H1["完整度"]
L2H1["完整度"]==>L3H1["基础跟踪能力"]
L3H1["基础跟踪能力"]==>L4H1["污点对象完整度"]
L4H1["污点对象完整度"]==>L5H1["字符串对象"]
L5H1["字符串对象"]==>aTaintCase00901["String"]
L4H1["污点对象完整度"]==>L5H2["基本数据类型及其封装类型"]
L5H2["基本数据类型及其封装类型"]==>aTaintCase001["int"]
L5H2["基本数据类型及其封装类型"]==>aTaintCase002["char"]
L5H2["基本数据类型及其封装类型"]==>aTaintCase003["byte"]
L5H2["基本数据类型及其封装类型"]==>aTaintCase004["long"]
L5H2["基本数据类型及其封装类型"]==>aTaintCase009["Byte"]
L5H2["基本数据类型及其封装类型"]==>aTaintCase0010["Integer"]
L5H2["基本数据类型及其封装类型"]==>aTaintCase0011["Long"]
L5H2["基本数据类型及其封装类型"]==>aTaintCase0012["Character"]
L4H1["污点对象完整度"]==>L5H6["集合(集合对象全为污点)"]
L5H6["集合(集合对象全为污点)"]==>aTaintCase005["Map元素"]
L5H6["集合(集合对象全为污点)"]==>aTaintCase006["List元素"]
L5H6["集合(集合对象全为污点)"]==>aTaintCase007["Queue元素"]
L5H6["集合(集合对象全为污点)"]==>aTaintCase008["Set元素"]
L4H1["污点对象完整度"]==>L5H14["数组(数组对象全为污点)"]
L5H14["数组(数组对象全为污点)"]==>aTaintCase0013["数组对象String[]"]
L5H14["数组(数组对象全为污点)"]==>aTaintCase0014["数组对象char[]"]
L5H14["数组(数组对象全为污点)"]==>aTaintCase0015["数组对象byte[]"]
L5H14["数组(数组对象全为污点)"]==>aTaintCase0016["单维数组对象的元素"]
L5H14["数组(数组对象全为污点)"]==>aTaintCase00926["多维数组对象的元素"]
L4H1["污点对象完整度"]==>L5H19["自定义对象"]
L5H19["自定义对象"]==>L6H19["对象字段"]
L6H19["对象字段"]==>L7H19["单层字段"]
L7H19["单层字段"]==>aTaintCase00921["10"]
L7H19["单层字段"]==>aTaintCase00922["100"]
L6H19["对象字段"]==>L7H21["多层字段"]
L7H21["多层字段"]==>aTaintCase00923["3层"]
L7H21["多层字段"]==>aTaintCase00924["10层"]
L6H19["对象字段"]==>aTaintCase00925["污点为父类字段"]
L3H1["基础跟踪能力"]==>L4H24["污点链路完整度"]
L4H24["污点链路完整度"]==>L5H24["特殊链路跟踪能力"]
L5H24["特殊链路跟踪能力"]==>aTaintCase0022["三方包方法跟踪"]
L5H24["特殊链路跟踪能力"]==>L6H25["超长链路追踪"]
L6H25["超长链路追踪"]==>aTaintCase0023["100层"]
L6H25["超长链路追踪"]==>aTaintCase00931["1000层"]
L5H24["特殊链路跟踪能力"]==>aTaintCase0024["反射调用方法跟踪"]
L5H24["特殊链路跟踪能力"]==>aTaintCase0025["调用native方法"]
L4H24["污点链路完整度"]==>L5H29["污点来源识别能力(source)"]
L5H29["污点来源识别能力(source)"]==>aTaintCase0027["污点来自http getQueryString"]
L5H29["污点来源识别能力(source)"]==>L6H30["污点来自http body"]
L6H30["污点来自http body"]==>aTaintCase0033["json/RequestBody"]
L6H30["污点来自http body"]==>aTaintCase0034["xml/getInputStream"]
L6H30["污点来自http body"]==>L7H32["multipart/form-data"]
L7H32["multipart/form-data"]==>aTaintCase0035["getPart"]
L7H32["multipart/form-data"]==>aTaintCase0036["getParts"]
L6H30["污点来自http body"]==>L7H34["form/url-encode"]
L7H34["form/url-encode"]==>aTaintCase0037["getParameter"]
L7H34["form/url-encode"]==>aTaintCase0038["getParameterMap"]
L7H34["form/url-encode"]==>aTaintCase0039["getParameterValues"]
L7H34["form/url-encode"]==>aTaintCase0040["getParameterNames"]
L6H30["污点来自http body"]==>aTaintCase0041["getReader"]
L5H29["污点来源识别能力(source)"]==>aTaintCase0044["污点来自http pathVarlables"]
L5H29["污点来源识别能力(source)"]==>L6H40["污点来自http header"]
L6H40["污点来自http header"]==>aTaintCase0045["getCookies"]
L6H40["污点来自http header"]==>aTaintCase0046["getHeader"]
L6H40["污点来自http header"]==>aTaintCase00139["getHeaderNames"]
L6H40["污点来自http header"]==>aTaintCase0047["getHeaders"]
L4H24["污点链路完整度"]==>L5H44["污点传播跟踪能力"]
L5H44["污点传播跟踪能力"]==>L6H45["--"]
L6H45["--"]==>L6H46["--"]
L6H46["--"]==>L6H44["传播场景"]
L6H44["传播场景"]==>L7H44["String操作"]
L7H44["String操作"]==>L8H44["构造方法"]
L8H44["构造方法"]==>aTaintCase0062["String(String original)"]
L8H44["构造方法"]==>aTaintCase00143["String(char value[])"]
L8H44["构造方法"]==>aTaintCase00144["String(char value[], int offset, int count)"]
L8H44["构造方法"]==>aTaintCase00145["String(int[] codePoints, int offset, int count)"]
L8H44["构造方法"]==>aTaintCase00146["String(byte bytes[], int offset, int length, String charsetName)"]
L8H44["构造方法"]==>aTaintCase00147["String(byte bytes[], int offset, int length, Charset charset)"]
L8H44["构造方法"]==>aTaintCase00148["String(StringBuffer buffer)"]
L8H44["构造方法"]==>aTaintCase00149["String(StringBuilder builder)"]
L7H44["String操作"]==>aTaintCase0063["conact"]
L7H44["String操作"]==>aTaintCase0064["copyValueOf"]
L7H44["String操作"]==>aTaintCase0065["format"]
L7H44["String操作"]==>aTaintCase0066["getBytes"]
L7H44["String操作"]==>aTaintCase0067["getChars"]
L7H44["String操作"]==>aTaintCase0068["intern"]
L7H44["String操作"]==>aTaintCase0069["join"]
L7H44["String操作"]==>aTaintCase0071["replace"]
L7H44["String操作"]==>aTaintCase00140["replaceAll"]
L7H44["String操作"]==>aTaintCase0072["split"]
L7H44["String操作"]==>aTaintCase0074["subSequence"]
L7H44["String操作"]==>aTaintCase0075["substring"]
L7H44["String操作"]==>aTaintCase0076["toCharArray"]
L7H44["String操作"]==>aTaintCase0078["toString"]
L7H44["String操作"]==>aTaintCase0077["toLowerCase"]
L7H44["String操作"]==>aTaintCase0079["toUpperCase"]
L7H44["String操作"]==>aTaintCase0080["trim"]
L7H44["String操作"]==>aTaintCase0081["valueOf"]
L6H44["传播场景"]==>L7H70["StringBuilder操作"]
L7H70["StringBuilder操作"]==>aTaintCase0082["构造方法"]
L7H70["StringBuilder操作"]==>aTaintCase0083["append"]
L7H70["StringBuilder操作"]==>aTaintCase0086["deleteCharAt"]
L7H70["StringBuilder操作"]==>aTaintCase0085["delete"]
L7H70["StringBuilder操作"]==>aTaintCase0087["getChars"]
L7H70["StringBuilder操作"]==>aTaintCase0088["insert"]
L7H70["StringBuilder操作"]==>aTaintCase0089["replace"]
L7H70["StringBuilder操作"]==>aTaintCase0090["subSequence"]
L7H70["StringBuilder操作"]==>aTaintCase0091["subString"]
L7H70["StringBuilder操作"]==>aTaintCase0092["toString"]
L6H44["传播场景"]==>L7H80["char[],byte[]操作"]
L7H80["char[],byte[]操作"]==>aTaintCase0093["copyOf"]
L7H80["char[],byte[]操作"]==>aTaintCase0094["copyOfRange"]
L7H80["char[],byte[]操作"]==>aTaintCase0095["deepToString"]
L7H80["char[],byte[]操作"]==>aTaintCase0096["toString"]
L6H44["传播场景"]==>aTaintCase00932["JDK序列化与反序列化"]
L4H24["污点链路完整度"]==>L5H85["污点无害化处理能力(sanitizer)"]
L5H85["污点无害化处理能力(sanitizer)"]==>aTaintCase00141["污点直接赋值为硬编码值"]
L5H85["污点无害化处理能力(sanitizer)"]==>aTaintCase00103["sanitizer支持区分类型"]
L5H85["污点无害化处理能力(sanitizer)"]==>aTaintCase00104["触发sink后再执行sanitizer"]
L5H85["污点无害化处理能力(sanitizer)"]==>aTaintCase00105["支持自定义unSanitizer(再次污点化)"]
L4H24["污点链路完整度"]==>L5H89["触发污点跟踪能力(sink)"]
L5H89["触发污点跟踪能力(sink)"]==>aTaintCase00109["单污点来源传播至多sink点"]
L5H89["触发污点跟踪能力(sink)"]==>aTaintCase00110["多污点来源传播至单sink点"]
L5H89["触发污点跟踪能力(sink)"]==>aTaintCase00112["无污点传播过程,污点直接传入sink"]
L2H1["完整度"]==>L3H92["异步跟踪能力"]
L3H92["异步跟踪能力"]==>L4H92["存储型异步"]
L4H92["存储型异步"]==>aTaintCase00113["污点通过db存储后触发"]
L4H92["存储型异步"]==>aTaintCase00114["污点通过session存储后触发"]
L4H92["存储型异步"]==>L5H94["污点通过缓存存储后触发"]
L5H94["污点通过缓存存储后触发"]==>aTaintCase00115["本地缓存"]
L5H94["污点通过缓存存储后触发"]==>aTaintCase00138["非本地缓存"]
L4H92["存储型异步"]==>L5H96["污点通过文件存储后触发"]
L5H96["污点通过文件存储后触发"]==>aTaintCase00116["本地文件"]
L3H92["异步跟踪能力"]==>L4H97["多线程异步"]
L4H97["多线程异步"]==>aTaintCase00119["污点的来源和触发在不同线程"]
L4H97["多线程异步"]==>aTaintCase00120["污点的来源和触发在不同线程,sink的触发由线程池中的线程触发"]
L2H1["完整度"]==>L3H99["跨进程跟踪能力"]
L3H99["跨进程跟踪能力"]==>L4H99["调用方式"]
L4H99["调用方式"]==>L5H99["http"]
L5H99["http"]==>aTaintCase00123["跨一层进程调用"]
L5H99["http"]==>aTaintCase00124["跨多层进程调用"]
L4H99["调用方式"]==>L5H101["rpc(至少支持一种框架:Sofa/SpringCloud/Dubbo/gRpc/HSF)"]
L5H101["rpc(至少支持一种框架:Sofa/SpringCloud/Dubbo/gRpc/HSF)"]==>aTaintCase001241["跨一层进程间调用(暂无实现)"]
L5H101["rpc(至少支持一种框架:Sofa/SpringCloud/Dubbo/gRpc/HSF)"]==>aTaintCase001242["跨多层进程间调用(暂无实现)"]
L1H1["IAST引擎能力评估体系(JAVA)"]==>L2H103["准确度"]
L2H103["准确度"]==>L3H103["污点对象跟踪粒度"]
L3H103["污点对象跟踪粒度"]==>L4H103["变量级别"]
L4H103["变量级别"]==>aTaintCase00125["sink点的值非外部可控,但与某个参数值相同"]
L3H103["污点对象跟踪粒度"]==>L4H104["字段/元素级别"]
L4H104["字段/元素级别"]==>L5H104["部分字段对象为污点"]
L5H104["部分字段对象为污点"]==>aTaintCase00126["单层简单对象部分字段为污点"]
L5H104["部分字段对象为污点"]==>L6H105["多层复杂对象部分字段为污点"]
L6H105["多层复杂对象部分字段为污点"]==>aTaintCase00127["污点来自父类"]
L6H105["多层复杂对象部分字段为污点"]==>aTaintCase00128["污点来当前类字段"]
L5H104["部分字段对象为污点"]==>aTaintCase00142["对象部分字段为污点,经过JDK序列化后再反序列化"]
L4H104["字段/元素级别"]==>L5H107["部分数据元素为污点"]
L5H107["部分数据元素为污点"]==>aTaintCase00129["单维数组中的部分元素为污点"]
L5H107["部分数据元素为污点"]==>aTaintCase00130["多维数组中的部分元素为污点"]
L5H107["部分数据元素为污点"]==>aTaintCase00131["部分元素为污点,经过JDK序列化后再反序列化"]
L4H104["字段/元素级别"]==>L5H110["部分集合元素为污点"]
L5H110["部分集合元素为污点"]==>aTaintCase00132["List中部分元素为污点"]
L5H110["部分集合元素为污点"]==>aTaintCase00133["Map中部分元素为污点"]
L5H110["部分集合元素为污点"]==>aTaintCase00134["Set中部分元素为污点"]
L5H110["部分集合元素为污点"]==>aTaintCase00135["Queue中部分元素为污点"]
L5H110["部分集合元素为污点"]==>aTaintCase00136["集合中部分元素为污点,经过JDK序列化后再反序列化"]
L3H103["污点对象跟踪粒度"]==>L4H115["字符串级别"]
L4H115["字符串级别"]==>L5H115["字符串部分存在污点"]
L5H115["字符串部分存在污点"]==>L6H115["截取非污点部分"]
L6H115["截取非污点部分"]==>L7H115["String操作"]
L7H115["String操作"]==>aTaintCase00940["replcace"]
L7H115["String操作"]==>aTaintCase00941["replcaceAll"]
L7H115["String操作"]==>aTaintCase00942["split"]
L7H115["String操作"]==>aTaintCase00943["subSequence"]
L7H115["String操作"]==>aTaintCase00944["substring"]
L7H115["String操作"]==>aTaintCase00945["trim"]
L6H115["截取非污点部分"]==>L7H121["StringBuilder操作"]
L7H121["StringBuilder操作"]==>aTaintCase00946["delete"]
L7H121["StringBuilder操作"]==>aTaintCase00947["deleteCharAt"]
L7H121["StringBuilder操作"]==>aTaintCase00948["getChars"]
L7H121["StringBuilder操作"]==>aTaintCase00949["replace"]
L7H121["StringBuilder操作"]==>aTaintCase00950["subSequence"]
L7H121["StringBuilder操作"]==>aTaintCase00951["substring"]
L6H115["截取非污点部分"]==>L7H127["char[]/byte[]操作"]
L7H127["char[]/byte[]操作"]==>aTaintCase00952["copyOfRange"]
L5H115["字符串部分存在污点"]==>L6H128["截取非污点部分后再拼接污点"]
L6H128["截取非污点部分后再拼接污点"]==>L7H128["String操作"]
L7H128["String操作"]==>aTaintCase00953["concat"]
L7H128["String操作"]==>aTaintCase00954["join"]
L7H128["String操作"]==>aTaintCase00955["replace"]
L7H128["String操作"]==>aTaintCase00956["replaceAll"]
L7H128["String操作"]==>aTaintCase00957["trim"]
L6H128["截取非污点部分后再拼接污点"]==>L7H133["StringBuilder操作"]
L7H133["StringBuilder操作"]==>aTaintCase00958["append"]
L7H133["StringBuilder操作"]==>aTaintCase00959["replace"]
L6H128["截取非污点部分后再拼接污点"]==>L7H135["char[]/byte[]操作"]
L7H135["char[]/byte[]操作"]==>aTaintCase00960["copyOfRange"]
L1H1["IAST引擎能力评估体系(JAVA)"]==>L2H137["兼容性/JDK兼容性"]
L2H137["兼容性/JDK兼容性"]==>L3H138["Oracle JDK"]
L3H138["Oracle JDK"]==>L4H139["JDK 1.4 以下"]
L3H138["Oracle JDK"]==>L4H141["JDK 1.5"]
L3H138["Oracle JDK"]==>L4H142["JDK 1.6 以上"]
L2H137["兼容性/JDK兼容性"]==>L3H143["OpenJDK"]
L3H143["OpenJDK"]==>L3H144["JDK 1.4 以下"]
L3H143["OpenJDK"]==>L3H145["JDK 1.5"]
L3H143["OpenJDK"]==>L3H146["JDK 1.6 以上"]
L2H137["兼容性/JDK兼容性"]==>L3H147["JRocket"]
L2H137["兼容性/JDK兼容性"]==>L3H148["IBM J9"]
L2H137["兼容性/JDK兼容性"]==>L3H149["AdoptOpen JDK"]
L2H137["兼容性/JDK兼容性"]==>L3H150["Amazon Corretto"]
L2H137["兼容性/JDK兼容性"]==>L3H151["Eclipse OpenJ9"]
L2H137["兼容性/JDK兼容性"]==>L3H152["Red Hat Open JDK"]
L1H1["IAST引擎能力评估体系(JAVA)"]==>L2H153["性能"]
L2H153["性能"]==>L3H154["无漏洞场景"]
L3H154["无漏洞场景"]==>L3H155["内存占用"]
L3H154["无漏洞场景"]==>L3H156["CPU占用"]
L3H154["无漏洞场景"]==>L3H157["RT时长增幅"]
L3H154["无漏洞场景"]==>L3H158["load"]
L2H153["性能"]==>L3H159["有漏洞场景"]
L2H153["性能"]==>L3H160["超长调用链路有漏洞场景"]
L2H153["性能"]==>L3H161["超长调用链路无漏洞场景"]
L2H153["性能"]==>L3H162["大污点对象场景"]
L1H1["IAST引擎能力评估体系(JAVA)"]==>L2H163["接入成本"]
L2H163["接入成本"]==>L3H164["离线插桩-需被测程序使用插桩后的jdk"]
L2H163["接入成本"]==>L3H165["离线插桩-被测程序全部字节码静态插桩后使用"]
L2H163["接入成本"]==>L3H166["动态运行时插桩-需被测程序修改配置"]