<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>代码审计SDL</title>
    <link>https://wechat2rss.xlab.app/feed/bec4267fed1028fa85c18e1281f7a358d6c8c706.xml</link>
    <description>佛系更新源代码审计，SDL，DevSecOps，渗透测试，应急响应等安全相关内容及行业最佳实践，随缘订阅。不接广告，不接培训，不接无关推广，总之非技术相关免开尊口，多谢体谅。&#xA;(wechat feed made by @ttttmr https://wechat2rss.xlab.app)</description>
    <managingEditor> (代码审计SDL)</managingEditor>
    <image>
      <url>https://wx.qlogo.cn/mmhead/Q3auHgzwzM6jL27E6aQW1Pcr9ticZ0jVs15PR2zabOoxXwo6QicLfAPQ/0</url>
      <title>代码审计SDL</title>
      <link>https://wechat2rss.xlab.app/feed/bec4267fed1028fa85c18e1281f7a358d6c8c706.xml</link>
    </image>
    <item>
      <title>API BOM - ASPM数据关联分析纽带</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484361&amp;idx=1&amp;sn=8e472a7a51b24dacdf95759c0a58c4a8</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2025-01-18 22:56</span> <span style="display: inline-block;">北京</span>
</p>

<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=dbf5b03e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo5w6G3Qx05qUF3m73reT8PM0pvGic8Rh7ErvnRN176iamyJ1edXDO2bavmhic2svf4QwwvvA7D2XbdKg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section data-tool="markdown编辑器" data-website="https://markdown.com.cn/editor" style="font-size: 16px;color: black;padding: 25px 30px;line-height: 1.6;word-spacing: 0px;letter-spacing: 0px;word-break: break-word;word-wrap: break-word;text-align: justify;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#39;PingFang SC&#39;, Cambria, Cochin, Georgia, Times, &#39;Times New Roman&#39;, serif;margin-top: -10px;"><h1 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;color: black;font-size: 24px;"><span style="display: none;"></span><span leaf="">API BOM</span></h1><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">API物料清单(API BOM)，这个概念是之前调研ASPM厂商OX Security提出的一个概念，目前没有统一的定义，可以参考软件物料清单(SBOM)。</span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">笔者在做ASPM数据分析调研的时候，主要的目的是需要寻求一种合理的方式对多个安全平台收集的数据进行去重分析，早期可以通过制定统一的漏洞分类分级标准，使用CWE编号或者支持统一的漏洞编号，比如：CVE，CNNVD，CNVD等，进行统一划分或者去重分析，但是实际实践效果就会差很多，主要原因有很多，最主要的原因是xAST产品种类繁杂，检出的结果标准不一，中间关联关系较弱，检出的风险无法进行有效的关联分析和漏洞优先级排序(VPT)。这次调研发现OX Security提出API BOM的理念和落地实践，为漏洞数据关联分析和漏洞优先级排序方面增加了新的可能。</span></p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;color: black;font-size: 22px;"><span style="display: none;"></span><span leaf="">API BOM 获取方式</span></h2><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">获取应用程序公开的所有 API 端点的详细列表，将检测到的安全风险映射到公开的 API（受支持的语言编写的 API）。API BOM，为用户提供应用程序代码中定义的 API 端点（内部和外部）的详细清单，相关的平台可以识别以下来源的API信息：</span></p><ul style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;color: black;list-style-type: disc;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf="">由用户的代码直接声明定义的。</span></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf="">由存储库中的 OpenAPI 规范文件定义的。</span></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf="">通过API管理平台(比如：ApiPost，Postman)等获取。</span></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf="">通过前置的WAF、RASP、API网关获取。</span></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf="">使用EBPF或者流量镜像设备获取。</span></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf="">使用IAST等Agent插桩的方式获取。</span></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf="">可以通过日志或者其他可以获取API信息的平台获取。</span></section></li><li style="color:#000;"><p><span style="color: #cccccc;"><span leaf=""><span textstyle="" style="color: rgb(0, 0, 0);">利用被动代理平台或者工具来收集(burpsuite、API Parrot等)。</span></span></span></p></li></ul><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">其中前两点是目前OX Security已经实现的，后面几点是笔者的观点，如果有欠缺可以一起讨论。</span></p></section><section style="text-align: center;" nodeleaf=""><img data-imgfileid="100000706" class="rich_pages wxw-img" data-ratio="0.3592592592592593" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=812537be&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo5w6G3Qx05qUF3m73reT8PMDYkmtsnwDwV6zk4mmEhSOgGgsF2fnwMl4c8ibocRkjGHPPiaveciaA60A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><section data-tool="markdown编辑器" data-website="https://markdown.com.cn/editor" style="font-size: 16px;color: black;padding: 25px 30px;line-height: 1.6;word-spacing: 0px;letter-spacing: 0px;word-break: break-word;word-wrap: break-word;text-align: justify;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#39;PingFang SC&#39;, Cambria, Cochin, Georgia, Times, &#39;Times New Roman&#39;, serif;margin-top: -10px;"><figure data-tool="markdown.com.cn编辑器" style="margin: 0;margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;"><span leaf="">ox security api bom</span></figcaption></figure><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;color: black;font-size: 22px;"><span style="display: none;"></span><span leaf="">API BOM重要性</span></h2><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">API BOM让用户能够更好地了解用户的应用对外暴露情况，进而更轻松地：</span></p><ul style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;color: black;list-style-type: disc;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf="">确保用户的所有 API 都经过适当的安全审查程序。这对于管理新添加的 API 的审核特别有帮助。</span></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf="">管理 API 中危险的请求方式，即使它们是合法且有意包含在代码中的。比如：一个包含 </span><code style="font-size: 14px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #1e6bb8;background-color: rgba(27,31,35,.05);font-family: Operator Mono, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">DELETE</span></code><span leaf=""> 方法可能会改变用户的应用程序配置或用户数据。安全人员要意识到代码中存在此方法，这可能存在潜在的风险。</span></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf="">方便安全运营人员优先考虑 </span><code style="font-size: 14px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;color: #1e6bb8;background-color: rgba(27,31,35,.05);font-family: Operator Mono, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">API</span></code><span leaf=""> 暴露的风险（攻击者可以利用暴露的API，优先进行利用）。</span></section></li></ul><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;color: black;font-size: 22px;"><span style="display: none;"></span><span leaf="">API BOM 数据分析实践</span></h2><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">将源代码、开源组件、漏洞、情报等信息关联映射到API上，通常从以下两个维度将API和源代码进行关联 • API 是通过源代码检测发现的。 • API 是用支持此功能的语言或者框架编写的。 当 API 处理程序函数和包含问题的函数之间存在函数调用路径时，就可以认为该 API 的暴露进一步增加检出风险的威胁等级。</span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">此处说的可能有些模糊，我举个例子来说明：</span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">1、通过分析源代码，发现对外暴露的接口，此处目前有部分Jetbrians插件(Apipost-Helper、Cool Request)可以支持，目前这两个插件都是闭源产品，忍不住分析了一下，重新逆向实现后发现都是利用Jetbrians psiClass来解析api接口，效果如下：</span></p><section style="text-align: center;" nodeleaf=""><img data-imgfileid="100000707" class="rich_pages wxw-img" data-ratio="0.5056526207605344" data-s="300,640" data-type="png" data-w="973" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=31e68cfb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo5w6G3Qx05qUF3m73reT8PMXKbCsvCzTwtOicoSrLsZicaIxVVYzRicCLkICFlibmianlbofWhlHicdrNxw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;"><span leaf="">Api Post效果</span></figcaption><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">也可以使用JavaParser来实现，实现效果如下：</span></p><section style="text-align: center;" nodeleaf=""><img data-imgfileid="100000708" class="rich_pages wxw-img" data-ratio="0.39080459770114945" data-s="300,640" data-type="png" data-w="957" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=ac586e3a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo5w6G3Qx05qUF3m73reT8PMHfLmnjCDTGfWOmqiaBq49xZQoJLQibxP2Os6VIwxj4moq19Jhs6Yl92A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">以上两种API解析，对于参数声明复杂参数，暂时解析不准，可以和API管理平台或者声明文件进行关联和补全。</span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">2、将所有的数据存储到数据库或者数据湖当中，然后进行关联分析，利用API进行汇总分析，可以关联xAST分析结果，如果SCA支持漏洞可达性分析，可以将组件漏洞通过代码和API进行关联。当安全事件发生时，可以通过API迅速定位漏洞位置，及时止损。</span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">3、利用漏洞优先级排序(VPT)模型或者平台，对所有检出结果进行排序，根据排序结果分配工单依次进行修复。其中，对外暴露的API在VPT计算模型的权重较高，修复优先级也越高。</span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">注意：以上笔者目前只预研完成了第一步，后续关联分析都只是设想，如果哪位同学成功运营实现，请不吝赐教。</span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">OX API BOM信息汇总效果如下：</span></p><section style="text-align: center;" nodeleaf=""><img data-imgfileid="100000710" class="rich_pages wxw-img" data-ratio="0.45555555555555555" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=9788c6db&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo5w6G3Qx05qUF3m73reT8PMqvytuMlUWLZwsD5uW2IYh55PZld64icmVQVpY7M8BicjUWicetiatShz0A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">目前OX Security 攻击路径实现效果如下：</span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf=""><img data-imgfileid="100000709" class="rich_pages wxw-img" data-ratio="0.7777777777777778" data-s="300,640" data-type="png" data-w="1566" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=cedc3440&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo5w6G3Qx05qUF3m73reT8PMEibvLWLWC23VMcHy1ibCIIJdGejBA4ma9PKLC5W0HkOrNlfJg26L9gbg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">可以直观分析受影响的应用、请求API、源代码提交信息、源代码路径、漏洞信息、情报等信息，提高安全运营人员的效率。此处使用的是理想的测试数据，但是在日常的安全运营工作当中，可以尽可能的关联有效信息，减少海量告警信息，优化工单分配，这就极大的提升运营效率。</span></p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;color: black;font-size: 22px;"><span style="display: none;"></span><span leaf="">总结</span></h2><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">1、API BOM可以将代码和xAST工具的检测结果进行关联，拉通API和 Source Code之间关联，进而拉通所有数据之间的关系。 </span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">2、丰富ASPM管理的维度。 </span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf="">3、丰富VPT计算因素，如：暴露的API，URL请求路径可达等</span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf=""> 4、可以进行漏洞去重，并不局限于必须有漏洞编号、必须有统一的漏洞评价标准，可以通过API及关联的漏洞类型进行去重</span></p><p data-tool="markdown.com.cn编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;margin: 0;line-height: 26px;color: black;"><span leaf=""> 5、降低运营人员排查难度，通过API关联数据，一个统一的平台可以检测所有受影响的系统、代码、组件，利用AI或者人工研判灵活处置分析漏洞，根据实际情况进行漏洞修复。</span></p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;color: black;font-size: 22px;"><span style="display: none;"></span><span leaf="">参考</span></h2><ul style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;color: black;list-style-type: disc;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf=""><a href="https://docs.ox.security/a-tour-of-ox/api-bom" target="_blank">https://docs.ox.security/a-tour-of-ox/api-bom</a></span></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf=""><a href="https://www.apipost.cn/" target="_blank">https://www.apipost.cn/</a></span></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf=""><a href="https://coolrequest.dev/" target="_blank">https://coolrequest.dev/</a></span></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1,1,1);font-weight: 500;"><span leaf=""><a href="https://apiparrot.com/" target="_blank">https://apiparrot.com/</a></span></section></li></ul></section><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484361">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=f9b37199&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484361%26idx%3D1%26sn%3D8e472a7a51b24dacdf95759c0a58c4a8%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 18 Jan 2025 22:56:00 +0800</pubDate>
    </item>
    <item>
      <title>今年的冬天真冷</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484353&amp;idx=1&amp;sn=3e6d5f200ec6a2e80162f4145e8be7b1</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-12-27 21:18</span> <span style="display: inline-block;">北京</span>
</p>

<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=90e38b49&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo5aZkw7khclxrzqiazNdBqp1njUiaW6icDic0wQRVV6A42MicomHteDC2t2rY8QPaCu09JHgInzH82azOw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="box-sizing: border-box;margin: 0px 0px 15px;padding: 0px;font-size: 15px;white-space: pre-line;line-height: 30px;color: rgb(74, 74, 74);font-family: mp-quote, -apple-system-font, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">真心不清楚这篇博文该以什么样的形式开头，写了删，删了写，也无法抒发内心种种不甘，直到今天拿到离职证明，一切尘埃落定，四年时光如白驹过隙，一晃而过，百感交集。以下都是自己的碎碎念，也没啥逻辑，将就看吧。</span></p><p style="box-sizing: border-box;margin: 15px 0px;padding: 0px;font-size: 15px;white-space: pre-line;line-height: 30px;color: rgb(74, 74, 74);font-family: mp-quote, -apple-system-font, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">21年从nsfocus离职的时候，当时也是受了委屈，看着前辈们意气风发，指点江山，激昂澎湃，自己却被蛀虫掣肘，由于直系领导都离职了，蛀虫看人下菜碟，欺负年轻人没背景，好好的项目拱手让人，当时还被蛀虫倒打一耙，说我这边项目报价有问题，项目规划有问题，我TMD，后来我才知道，当时蛀虫是收了好处费的，活生生把POC第一变成了陪标的。后面碰巧遇到现在的老板成立新公司招人，当时和老板在苏帮袁喝了一顿酒，聊得也挺开心的，也没聊薪资待遇，只想着大家一起做些事，等安排好原团队的其他成员后，加入到现在的公司。</span></p><p style="box-sizing: border-box;margin: 15px 0px;padding: 0px;font-size: 15px;white-space: pre-line;line-height: 30px;color: rgb(74, 74, 74);font-family: mp-quote, -apple-system-font, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">加入新公司后，新公司当时没有核心产品，当时也是基于最早DevSecOps的思路，靠关系接一些客户定制开发订单，帮客户提升自己的开发安全能力，预研团队就两个人，我带着另一个同事去做创新，做交付，先后孵化SCA,VPT,ASOC（ASPM），可达性，TMA，服务可观测等产品和方案。主要的工作内容基本上就是先做DEMO开发或者方案制定，如果效果还可以，将DEMO工程化，后续由研发团队来对接。公司整体以研发的同事居多，安全方向的预研只能由我们这边来完成。这个合作模式的好处就是能降低预研团队和研发团队的投入，预研这边只管输出方案、DEMO，不用关注UI、系统管理等功能设计，研发团队不用刻意关注安全技术原理，只管对接就行，产品统一规划。这套模式可以有效运作，前提是团队间的配合默契，人员分工合理，没有JSG在作妖。这套模式一直有效运作，直到今年年中，不太清楚老板是如何考虑的，收购并引入了一个新的研发合伙人LT，加入后没有实质性的效果，反而开始打压老员工、搞派系斗争、积极向上管理，抢功。这个确实让人猝不及防，小公司这么搞，是要伤筋动骨的，但是现实就是，老板给予新来的研发合伙人绝对信任，认为我们老员工就是在针对新来的研发副总裁（个人看法），老员工不服从管理，老员工能力差，你也不看看LT做的事。老同事订婚时间都确定了，提前和LT请假被拒绝，这TMD是正常人能干出的事，诸如此类的事有很多，LT人品差，但是任何LT认为是挑战他的权威都要被挤兑。刚开始LT以方便管理，要全盘接手SCA，让预研这边交出SCA所有的预研工作，我当时不满意但是无可奈何，只能和老板商量，借此把和LT不对付的W保下来，划分到我的团队。此时SCA刚进行产品立项，大家加班加点开发出一个个人觉得较满意的版本，客户侧交付已经初见效果，本来这块市场很小，做出一个基础产品，技术含量也没那么高深，此时待预研的功能有很多，个人感觉一切都向着好的方向发展，团队可以继续扩张，此时LT以一个蹩脚的理由来交接，明显是来摘果子的。由于老板在中间调解，没办法只能交接了。LT觉得SCA很容易，很自信，后续看着git上交接的几十个相关项目，开始让我们要写详细的交接文档，技术实现逻辑，技术坑点，我也是服了。</span></p><p style="box-sizing: border-box;margin: 15px 0px;padding: 0px;font-size: 15px;white-space: pre-line;line-height: 30px;color: rgb(74, 74, 74);font-family: mp-quote, -apple-system-font, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">一个月后，LT并不能顺利接手，只能边边角角开发一些无关功能，积极向上汇报，张口闭口就是战役、卷、加班，动不动开会复盘甩锅，为了让自己带过来的人尽快熟悉项目，开始重构项目，有问题就甩锅我们这边，虽说已经交接了，TMD，有新进展就是自己功劳，有问题就是之前的锅，明摆的就是说我们不行，你行你倒是上啊，自己嫡系接手后，搞不定，招新人背锅，我第一次发现还可以这么玩，和这种人合作，真心恶心。虽说交接快一个月了，正常来说当初吹下的牛逼该兑现了，然后新的骚操作来了，LT根本搞不定后续的开发，连个直接依赖和间接依赖都区分不清楚的人，他怎么去开发，不太清楚他和老板怎么沟通的，把团队内之前和他不和的W和另一个做数据运营的小伙伴强行划分到LT的团队了，做数据运营的小伙伴被划分过去，我还能自我安慰，是为了项目，但是把W划分过去就是单纯的打击报复了。公司是老板，这里私下也做了一些工作，都是无用功，老板只是通知了一下，就把两个小伙伴划分过去了。划过去一个多月，两个小伙伴先后离职。</span></p><p style="box-sizing: border-box;margin: 15px 0px;padding: 0px;font-size: 15px;white-space: pre-line;line-height: 30px;color: rgb(74, 74, 74);font-family: mp-quote, -apple-system-font, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">内耗，不断内耗，有时候猜测老板可能只是为了降本增效，借LT来挤兑老员工。所有的都是猜测，直到今天我被辞退，我也不清楚原因，老板只说了未来不需要预研团队了，预研的技术方向在未来两年没有资源支持落地推广。然而公司在下半年不断招聘，人员也扩张不少，老员工不断离职，新人短暂停留后也提桶跑路了，其中一个最搞笑，把W挤兑走，之前运维的活都是研发的W和我兼职，现在低价找个新运维，入职第一周就删库跑路了，以前的段子就发生在身边，我也是无语了。我离职其中的原因有一部分来自LT，主要是我反感LT，人品拉胯，我不太愿意逢迎他，另外为了不和他产生冲突，预研的方向和他现在主要开发的业务要区分开，否则后续麻烦，先后做了一个EBPF方向的服务可观测（攻击可视化+自动阻断），API BOM（支撑ASPM的），SAST（利用Neo4j的能力，进行代码漏洞分析）。本以为我苟着，我没必要和LT内耗，我自己做调研，自己做新的方向，和三年前一样，一起从头再来，本月月中还在规划API被动扫描的事情，方案DEMO还在开发过程中，老板来了个消息，要谈一下团队的规划，总之就是要降本增效，开猿节流。收到这个消息，我也不知道该怎么做了，是该继续敲代码还是该做什么，浑浑噩噩到中午，和老板聊完后，无非两个方案，一个就是划到LT部门，另外就是拿着补偿走人。没别的选择，只能收拾东西走人。我并不讨厌老板，如果我在他的位置上，我感觉我承受不了他的压力，但是我单纯只是为他可惜，毕竟疫情三年，公司成长不容易，好不容易走向正轨，LT可能会毁掉它。后来我想了一下，总体原因还是自己太弱了，如果自己可以做出一个吊炸天的产品，全栈一条龙，就不会出现现在的窘迫了。</span></p><p style="box-sizing: border-box;margin: 15px 0px;padding: 0px;font-size: 15px;white-space: pre-line;line-height: 30px;color: rgb(74, 74, 74);font-family: mp-quote, -apple-system-font, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这一切都不是自己该关心的了，从月中到现在，早晚接送媳妇上下班，每天窝在家里，啥都不想做，之前还想着看看书，重拾一下之前的爱好，现在只想颓废，好久没有享受过这么长的假期了，就当给自己放个假了。颓废，很大程度上就是迷茫，之前每日按时上下班，每日压力山大，上班骑车途中，还得考虑技术方向如何实现，当日工作如何安排，现在突然什么都不用做了，有些不适应。第一次被辞退，这TMD都得适应，也是够贱的。</span></p><p style="box-sizing: border-box;margin: 15px 0px;padding: 0px;font-size: 15px;white-space: pre-line;line-height: 30px;color: rgb(74, 74, 74);font-family: mp-quote, -apple-system-font, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">今天上午拿到离职证明，宣告着一切都结束了，后续我可能和公司不会再产生其他交集了，只能祝贺老板恭喜发财，公司业绩蒸蒸日上，就这样吧。</span></p><p style="box-sizing: border-box;margin: 15px 0px;padding: 0px;font-size: 15px;white-space: pre-line;line-height: 30px;color: rgb(74, 74, 74);font-family: mp-quote, -apple-system-font, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">晚上去接媳妇回家，北风呼啸，今年的冬天异常寒冷。上个月还有个朋友和我说，他领导总在挤兑他，目前已经降薪，正在找下家，但是当前就业现状低迷，短时间找不到合适的工作，我当时还拉了个行业招聘交流群，方便抱团取暖，这也没过多长时间，就轮到我了，人生无常。</span></p><p style="box-sizing: border-box;margin: 15px 0px;padding: 0px;font-size: 15px;white-space: pre-line;line-height: 30px;color: rgb(74, 74, 74);font-family: mp-quote, -apple-system-font, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 300;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">想起冬至那天从公司搬运个人物品，发现这四年，为了方便技术研究和学习，自己带了两台电脑、一台自己攒的服务器到公司，至于公司配的笔记本性能太弱，太耽误事。离职的时候真心难受，不光心里难受，搬家也费事，没事别付费上班，为了给公司省钱，自己组装机器，后来才发现，自己纯属智障，瞎操心，公司不做大语言模型相关内容，可以做其他业余，资源不够，等着老板买设备就行，LLM方向落地后，公司商业宣传，你这边也没有啥实质性的奖励，自己还是年轻，以后还是长点儿心吧。</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000698" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5287cc2b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo5aZkw7khclxrzqiazNdBqp1RiaXUd893ssiaKSmkIMdTLZ0ic4e514mSpoAmov5RWI9tjVJhYNx0nfJw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484353">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=d4d06b8a&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484353%26idx%3D1%26sn%3D3e6d5f200ec6a2e80162f4145e8be7b1%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 27 Dec 2024 21:18:00 +0800</pubDate>
    </item>
    <item>
      <title>fortify sca rules 标签分析</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484340&amp;idx=1&amp;sn=f4e4276774ad25887d9f44ca481b83bd</link>
      <description>fortify sca rules 标签分析</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-11-08 10:19</span> <span style="display: inline-block;">北京</span>
</p>

<p>fortify sca rules 标签分析</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=660bf2e3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo6o6jvNXrFPofW8fH3vsXLXDGWptUCskJdIVGxMtlpxq47KPicZ8eiboYOKIPpRMFQy474PqDRKCE1Q%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<h1 style="margin-top: 2rem;margin-bottom: 0.5rem;font-weight: 700;color: rgb(248, 95, 72);line-height: 1.35;font-size: 26px;letter-spacing: normal;text-align: start;font-family: Menlo, Monaco, &#34;Source Code Pro&#34;, Consolas, Inconsolata, &#34;Ubuntu Mono&#34;, &#34;DejaVu Sans Mono&#34;, &#34;Courier New&#34;, &#34;Droid Sans Mono&#34;, &#34;Hiragino Sans GB&#34;, 微软雅黑, monospace !important;">RulePack标签分析</h1><pre style="padding-top: 8px;padding-bottom: 6px;background: rgb(45, 45, 45);border-radius: 0px;overflow-y: auto;color: rgb(80, 97, 109);letter-spacing: normal;text-align: start;font-size: 10px;line-height: 12px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 1px !important;border-style: solid !important;border-color: rgb(226, 226, 226) !important;"><ol class="list-paddingleft-2" style="padding-top: 10px;padding-bottom: 10px;padding-left: 30px;list-style-position: initial;list-style-image: initial;color: transparent;overflow-y: auto;list-style-type: none !important;"><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;?</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">xml version</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(153, 204, 153);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;1.0&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> encoding</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(153, 204, 153);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;UTF-8&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">?&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;RulePack</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">xmlns:mask</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;xmlns://www.fortifysoftware.com/schema/mask&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">xmlns</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;xmlns://www.fortifysoftware.com/schema/rules&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;RulePackID&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">D044EBBB-7081-4451-BDD6-5A163AD639C3</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/RulePackID&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;SKU&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">RUL13040</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/SKU&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Name&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        &lt;![CDATA[Fortify 安全编码规则、核心、Java]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Name&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Activated&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">true</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Activated&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Version&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">2024.2.1.0003</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Version&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Language&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">java</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Language&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Description&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        &lt;![CDATA[为 Java 提供安全相关核心语言 API 范围。此规则包的部分内容来自 Cigital Java Rulepack (c) 2008 Cigital。 Copyright 2004 - 2024 Open Text.]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Description&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Locale&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">zh_CN</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Locale&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Rules</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">version</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;3.2&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">minimumSCA</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;17.10&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    ......</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Rules&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Masks</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">revision</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;0&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    ......</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Masks&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Localization&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    ......</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Localization&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/RulePack&gt;</span></code></span></span></p></li></ol></pre><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;">xml标签属性说明</p><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-2"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">RulePackID：规则包的唯一标识符</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">SKU：全局唯一标识符</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Name：规则包的名称</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Activated：可以使用的(猜测，没找到定义内容)</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Version：规则版本</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Language：规则包适配编程语言</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Description：规则包描述信息</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Locale：规则包语言</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Rules：规则主体，其中version是版本代号，minimumSCA 标识规则最低支持的fortify sca版本</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Masks ：掩码</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Localization：本地化</span></p></li></ul><h1 style="margin-top: 2rem;margin-bottom: 0.5rem;font-weight: 700;color: rgb(248, 95, 72);line-height: 1.35;font-size: 26px;letter-spacing: normal;text-align: start;font-family: Menlo, Monaco, &#34;Source Code Pro&#34;, Consolas, Inconsolata, &#34;Ubuntu Mono&#34;, &#34;DejaVu Sans Mono&#34;, &#34;Courier New&#34;, &#34;Droid Sans Mono&#34;, &#34;Hiragino Sans GB&#34;, 微软雅黑, monospace !important;">Rules标签分析</h1><pre style="padding-top: 8px;padding-bottom: 6px;background: rgb(45, 45, 45);border-radius: 0px;overflow-y: auto;color: rgb(80, 97, 109);letter-spacing: normal;text-align: start;font-size: 10px;line-height: 12px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 1px !important;border-style: solid !important;border-color: rgb(226, 226, 226) !important;"><ol class="list-paddingleft-2" style="padding-top: 10px;padding-bottom: 10px;padding-left: 30px;list-style-position: initial;list-style-image: initial;color: transparent;overflow-y: auto;list-style-type: none !important;"><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Rules</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">version</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;3.2&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">minimumSCA</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;17.10&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Notes&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        ......</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Notes&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;RuleDefinitions&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        ......</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/RuleDefinitions&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;LabelDefinitions&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        ......</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/LabelDefinitions&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Descriptions&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        ......</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Descriptions&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;ControlflowStateStrings&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        ......</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/ControlflowStateStrings&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;TaintFlagDeclarations&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        ......</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/TaintFlagDeclarations&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;TaintFlagDescriptions&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        ......</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/TaintFlagDescriptions&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Coverage&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        ......</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Coverage&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;ScriptDefinitions/&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Rules&gt;</span></code></span></span></p></li></ol></pre><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;">xml标签属性说明</p><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Notes：规则备注信息，许可声明信息</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">RuleDefinitions：规则集合</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">LabelDefinitions：标签定义</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Descriptions：描述信息</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">ControlflowStateStrings：控制流状态字符串</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">TaintFlagDeclarations：污染标志声明</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">TaintFlagDescriptions：污染标志说明</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Coverage：覆盖度</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">ScriptDefinitions：脚本定义</span></p></li></ul><h2 style="margin-top: 2rem;margin-bottom: 0.5rem;font-weight: 700;color: rgb(248, 95, 72);line-height: 1.35;font-size: 22px;letter-spacing: normal;text-align: start;font-family: Menlo, Monaco, &#34;Source Code Pro&#34;, Consolas, Inconsolata, &#34;Ubuntu Mono&#34;, &#34;DejaVu Sans Mono&#34;, &#34;Courier New&#34;, &#34;Droid Sans Mono&#34;, &#34;Hiragino Sans GB&#34;, 微软雅黑, monospace !important;">DataflowSourceRule 标签分析</h2><pre style="padding-top: 8px;padding-bottom: 6px;background: rgb(45, 45, 45);border-radius: 0px;overflow-y: auto;color: rgb(80, 97, 109);letter-spacing: normal;text-align: start;font-size: 10px;line-height: 12px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 1px !important;border-style: solid !important;border-color: rgb(226, 226, 226) !important;"><ol class="list-paddingleft-2" style="padding-top: 10px;padding-bottom: 10px;padding-left: 30px;list-style-position: initial;list-style-image: initial;color: transparent;overflow-y: auto;list-style-type: none !important;"><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;DataflowSourceRule</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">formatVersion</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;3.2&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">language</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;java&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">  </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;MetaInfo&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Group</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">name</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;package&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Java Core Accessibility</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Group&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Group</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">name</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;inputsource&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Web</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Group&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">  </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/MetaInfo&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">  </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;RuleID&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">58B43BC7-05D2-4289-B0CE-BECAFC28A45E</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/RuleID&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">  </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;FunctionIdentifier&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;NamespaceName&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">      </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Value&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">javax.accessibility</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Value&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/NamespaceName&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;ClassName&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">      </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Value&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">AccessibleText</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Value&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/ClassName&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;FunctionName&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">      </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Pattern&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">(get.+Index)|getSelectedText</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Pattern&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/FunctionName&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Parameters&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">      </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;ParamType&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">int</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/ParamType&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">      </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;ParamType&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">int</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/ParamType&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Parameters&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;ApplyTo</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">implements</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;true&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">overrides</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;true&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">extends</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;true&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">/&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">  </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/FunctionIdentifier&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">  </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;OutArguments&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">return</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/OutArguments&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/DataflowSourceRule&gt;</span></code></span></span></p></li></ol></pre><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;">DataflowSourceRule识别受污染的数据进入程序的位置。</p><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">MetaInfo：元信息，规则分类信息</span></p></li><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p>package：包信息， <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;Group</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">name</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">=</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;package&#34;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&gt;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">Java Core Accessibility</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;/Group&gt;</span></code> 表示这条规则属于 &#34;Java Core Accessibility&#34; 包。</p></li><li style="margin-top: 6px !important;"><p>inputsource：输入源， <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;Group</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">name</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">=</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;inputsource&#34;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&gt;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">Web</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;/Group&gt;</span></code> 表示这条规则关注的是来自 Web 的输入源。</p></li></ul><ul style="padding-left: 30px;list-style: circle;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p>Group：组标签</p></li></ul><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">RuleID：唯一的标识符，用于区分不同的规则。</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">FunctionIdentifier：函数标识</span></p></li><ul style="padding-left: 30px;list-style: circle;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p>NamespaceName：<strong style="color: rgb(0, 0, 0);">命名空间，</strong> <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;NamespaceName&gt;&lt;Value&gt;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">javax.accessibility</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;/Value&gt;&lt;/NamespaceName&gt;</span></code> 指定了方法所在的命名空间。</p></li><li style="margin-top: 6px !important;"><p>ClassName：<strong style="color: rgb(0, 0, 0);">类名，</strong> <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;ClassName&gt;&lt;Value&gt;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">AccessibleText</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;/Value&gt;&lt;/ClassName&gt;</span></code> 指定了方法所在的类。</p></li><li style="margin-top: 6px !important;"><p>FunctionName：函数名， <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;FunctionName&gt;&lt;Pattern&gt;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">(get.+Index)|getSelectedText</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;/Pattern&gt;&lt;/FunctionName&gt;</span></code> 使用正则表达式匹配方法名，包括 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">getCharIndex</span></code>, <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">getWordIndex</span></code>, <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">getSentenceIndex</span></code>, 和 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">getSelectedText</span></code>。</p></li><li style="margin-top: 6px !important;"><p>Parameters：参数， <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;Parameters&gt;&lt;ParamType&gt;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">int</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;/ParamType&gt;&lt;ParamType&gt;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">int</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;/ParamType&gt;&lt;/Parameters&gt;</span></code> 指定了方法的参数类型，这里有两个 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">int</span></code> 类型的参数。</p></li></ul><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">OutArguments：输出参数，用于指定方法调用后哪些参数或返回值应被视为污染（tainted）数据， <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;OutArguments&gt;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">return</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;/OutArguments&gt;</span></code> 指定了方法的返回值应被视为污染数据。</span></p></li></ul><h2 style="margin-top: 2rem;margin-bottom: 0.5rem;font-weight: 700;color: rgb(248, 95, 72);line-height: 1.35;font-size: 22px;letter-spacing: normal;text-align: start;font-family: Menlo, Monaco, &#34;Source Code Pro&#34;, Consolas, Inconsolata, &#34;Ubuntu Mono&#34;, &#34;DejaVu Sans Mono&#34;, &#34;Courier New&#34;, &#34;Droid Sans Mono&#34;, &#34;Hiragino Sans GB&#34;, 微软雅黑, monospace !important;">LabelDefinitions标签分析</h2><pre style="padding-top: 8px;padding-bottom: 6px;background: rgb(45, 45, 45);border-radius: 0px;overflow-y: auto;color: rgb(80, 97, 109);letter-spacing: normal;text-align: start;font-size: 10px;line-height: 12px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 1px !important;border-style: solid !important;border-color: rgb(226, 226, 226) !important;"><ol class="list-paddingleft-2" style="padding-top: 10px;padding-bottom: 10px;padding-left: 30px;list-style-position: initial;list-style-image: initial;color: transparent;overflow-y: auto;list-style-type: none !important;"><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;CharacterizationRule</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">formatVersion</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;3.7&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">language</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;java&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;MetaInfo&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Group</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">name</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;package&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Java Core JMX</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Group&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/MetaInfo&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;RuleID&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">04DC0B4B-6AC5-4B93-9B46-486D7B4778A8</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/RuleID&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;StructuralMatch&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        &lt;![CDATA[</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        FunctionCall fc: function is [Function:</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                name == &#34;registerMBean&#34;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                and enclosingClass.supers contains [Class: name == &#34;javax.management.MBeanServer&#34;]</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            ]</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            and arguments[0] is [Expression:</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                reachingTypes contains [Type: definition is [Class jmxbean:]]</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            ]</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    ]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/StructuralMatch&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Definition&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        &lt;![CDATA[</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        foreach jmxbean {</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            Label(jmxbean, &#34;JMXBean&#34;)</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        }</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    ]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Definition&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/CharacterizationRule&gt;</span></code></span></span></p></li></ol></pre><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;">字符化规则（ <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">&lt;CharacterizationRule&gt;</span></code>），用于识别和标记 Java 代码中特定的结构模式。</p><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">CharacterizationRule：</span></p></li><ul style="padding-left: 30px;list-style: circle;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p>formatVersion：<strong style="color: rgb(0, 0, 0);">格式版本，</strong> <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">formatVersion</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">=</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;3.7&#34;</span></code> 指明了规则使用的格式版本。</p></li><li style="margin-top: 6px !important;"><p>language：<strong style="color: rgb(0, 0, 0);">语言，</strong> <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">language</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">=</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;java&#34;</span></code> 指明了这条规则适用于 Java 语言。</p></li></ul><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">MetaInfo：元数据， <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;MetaInfo&gt;</span></code> 元素提供了关于规则的分类信息。</span></p></li><ul style="padding-left: 30px;list-style: circle;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p>Group： <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;Group</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">name</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">=</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;package&#34;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&gt;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">Java Core JMX</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;/Group&gt;</span></code> 表示这条规则属于 &#34;Java Core JMX&#34; 包。</p></li></ul><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">RuleID：规则唯一的标识符</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">StructuralMatch：结构匹配， <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;StructuralMatch&gt;</span></code> 元素定义了要匹配的代码结构。</span></p></li><ul style="padding-left: 30px;list-style: circle;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">FunctionCall</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">fc</span></code> 表示要匹配的函数调用。</p></li><li style="margin-top: 6px !important;"><p><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">function</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">is</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">[</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">Function</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">:</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">name</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">==</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;registerMBean&#34;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">and</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">enclosingClass</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">.</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">supers contains</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">[</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">Class</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">:</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">name</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">==</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;javax.management.MBeanServer&#34;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">]]</span></code> 表示要匹配的函数名为 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">registerMBean</span></code>，并且该函数所在类的超类包含 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">javax</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">.</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">management</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">.</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">MBeanServer</span></code>。</p></li><li style="margin-top: 6px !important;"><p><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">arguments</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">[</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">0</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">]</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">is</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">[</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">Expression</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">:</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">reachingTypes contains</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">[</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">Type</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">:</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">definition</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">is</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">[</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">Class</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">jmxbean</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">:]]]</span></code> 表示第一个参数的类型是某个类 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">jmxbean</span></code>。</p></li></ul><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Definition：<strong style="color: rgb(0, 0, 0);">定义，</strong> <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;Definition&gt;</span></code> 元素定义了在匹配到特定结构时要执行的操作。</span></p></li><ul style="padding-left: 30px;list-style: circle;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">foreach</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">jmxbean</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">{</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">Label</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">(</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">jmxbean</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">,</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;JMXBean&#34;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">)</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">}</span></code> 表示对每一个匹配到的 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">jmxbean</span></code> 类型，为其添加一个标签 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;JMXBean&#34;</span></code>。</p></li></ul></ul><h2 style="margin-top: 2rem;margin-bottom: 0.5rem;font-weight: 700;color: rgb(248, 95, 72);line-height: 1.35;font-size: 22px;letter-spacing: normal;text-align: start;font-family: Menlo, Monaco, &#34;Source Code Pro&#34;, Consolas, Inconsolata, &#34;Ubuntu Mono&#34;, &#34;DejaVu Sans Mono&#34;, &#34;Courier New&#34;, &#34;Droid Sans Mono&#34;, &#34;Hiragino Sans GB&#34;, 微软雅黑, monospace !important;">Descirptions标签分析</h2><pre style="padding-top: 8px;padding-bottom: 6px;background: rgb(45, 45, 45);border-radius: 0px;overflow-y: auto;color: rgb(80, 97, 109);letter-spacing: normal;text-align: start;font-size: 10px;line-height: 12px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 1px !important;border-style: solid !important;border-color: rgb(226, 226, 226) !important;"><ol class="list-paddingleft-2" style="padding-top: 10px;padding-bottom: 10px;padding-left: 30px;list-style-position: initial;list-style-image: initial;color: transparent;overflow-y: auto;list-style-type: none !important;"><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Descriptions&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Description</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">id</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;desc.controlflow.java.intent_manipulation_implicit_internal_intent&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">formatVersion</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;3.4&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Abstract&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    &lt;![CDATA[</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Paragraph&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">在 </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Replace</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">key</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;PrimaryLocation.file&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">/&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> 的第 </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Replace</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">key</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;PrimaryLocation.line&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">/&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> 行检测到隐式内部 </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Intent</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">。隐式的内部意图可能会使系统遭受对内部组件的中间人攻击。</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;AltParagraph&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">检测到隐式内部 </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Intent</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">。隐式的内部意图可能会使系统遭受对内部组件的中间人攻击。</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/AltParagraph&gt;&lt;/Paragraph&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Abstract&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Explanation&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    &lt;![CDATA[内部 </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Intent</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> 使用内部组件定义的自定义操作。隐式意图可以促进从任何给定外部组件调用意图，而无需了解特定组件。将两者结合起来使应用程序能够从所需的应用程序上下文外部访问为特定内部使用指定的意图。</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    通过外部应用程序处理内部 </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Intent</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> 的能力可以实现各种严重程度不等的中间人攻击，从信息泄露、拒绝服务到远程代码执行，具体取决于 </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Intent</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> 指定的内部操作的能力。</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;b&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">示例 1：</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/b&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">以下代码使用隐式内部 </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Intent</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">。</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;pre&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    ...</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    val imp_internal_intent_action = Intent(&#34;INTERNAL_ACTION_HERE&#34;)</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    startActivity(imp_internal_intent_action)</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    ...</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/pre&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Explanation&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Recommendations&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    &lt;![CDATA[仅调用具有明确意图的内部应用程序。显式 </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Intent</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> 是显式设置其组件、类、类名和包的意图。</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;b&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">示例 2：</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/b&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">以下代码使用显式内部 </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Intent</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">。</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;pre&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    ...</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    val exp_internal_intent = Intent(&#34;INTERNAL_ACTION_HERE&#34;, Uri.EMPTY, this, DownloadService::class.java)</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    startActivity(exp_internal_intent)</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    ...</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/pre&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;b&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">示例 3：</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/b&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">以下代码使用隐式内部 </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Intent</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/code&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">，该意图已通过 setter 更新为显式。</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;pre&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    ...</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    val imp_internal_intent_remediate_action = Intent(&#34;INTERNAL_ACTION_HERE&#34;)</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    imp_internal_intent_remediate_action.`package` = &#34;package&#34;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    imp_internal_intent_remediate_action.setClass(this, DownloadService::class.java)</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    imp_internal_intent_remediate_action.component = componentName</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    startActivity(imp_internal_intent_remediate_action)</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    ...</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/pre&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Recommendations&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;References&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[Remediation of Implicit Internal Intent Vulnerability]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Source&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[<a href="https://support.google.com/faqs/answer/10399926]]" target="_blank">https://support.google.com/faqs/answer/10399926]]</a>&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Source&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[CWE ID 99]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[Standards Mapping - Common Weakness Enumeration]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[CCI-001094]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[Standards Mapping - DISA Control Correlation Identifier Version 2]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[Indirect Access to Sensitive Data]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[Standards Mapping - General Data Protection Regulation]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[SC-5 Denial of Service Protection (P1)]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[Standards Mapping - NIST Special Publication 800-53 Revision 4]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[SC-5 Denial of Service Protection]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[Standards Mapping - NIST Special Publication 800-53 Revision 5]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[A9 Application Denial of Service]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[Standards Mapping - OWASP Top 10 2004]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[Requirement 6.5.1]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Title&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                            &lt;![CDATA[Standards Mapping - Payment Card Industry Data Security Standard Version 1.1]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">                        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Author&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Reference&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/References&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Description&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Descriptions&gt;</span></code></span></span></p></li></ol></pre><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Description：规则描述，这里将描述信息单独拎出来，使用的化直接引用就行，类似这种：<description ref="desc.controlflow.java.code_correctness_call_to_sleep_in_lock"></description></span></p></li><ul style="padding-left: 30px;list-style: circle;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><strong style="color: rgb(0, 0, 0);">版本格式</strong>： <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">formatVersion</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">=</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;3.4&#34;</span></code> 指明了规则使用的格式版本。</p></li><li style="margin-top: 6px !important;"><p><strong style="color: rgb(0, 0, 0);">ID</strong>： <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">id</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">=</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;desc.controlflow.java.intent_manipulation_implicit_internal_intent&#34;</span></code> 是一个唯一的标识符，用于区分不同的描述性规则。</p></li></ul><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Abstract： <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;Abstract&gt;</span></code> 元素提供了规则的简要说明。</span></p></li><ul style="padding-left: 30px;list-style: circle;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">Paragraph</span></code>： <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;Paragraph&gt;</span></code> 描述了在特定文件和行号检测到隐式内部 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">Intent</span></code>，并指出隐式内部意图可能会使系统遭受中间人攻击。</p></li><li style="margin-top: 6px !important;"><p><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">AltParagraph</span></code>： <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;AltParagraph&gt;</span></code> 提供了一个简短的备用描述。</p></li></ul><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Explanation：详细解释</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">Recommendations：推荐措施</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">References：参考</span></p></li></ul><h2 style="margin-top: 2rem;margin-bottom: 0.5rem;font-weight: 700;color: rgb(248, 95, 72);line-height: 1.35;font-size: 22px;letter-spacing: normal;text-align: start;font-family: Menlo, Monaco, &#34;Source Code Pro&#34;, Consolas, Inconsolata, &#34;Ubuntu Mono&#34;, &#34;DejaVu Sans Mono&#34;, &#34;Courier New&#34;, &#34;Droid Sans Mono&#34;, &#34;Hiragino Sans GB&#34;, 微软雅黑, monospace !important;">ControlflowStateStrings标签分析</h2><pre style="padding-top: 8px;padding-bottom: 6px;background: rgb(45, 45, 45);border-radius: 0px;overflow-y: auto;color: rgb(80, 97, 109);letter-spacing: normal;text-align: start;font-size: 10px;line-height: 12px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 1px !important;border-style: solid !important;border-color: rgb(226, 226, 226) !important;"><ol class="list-paddingleft-1" style="padding-top: 10px;padding-bottom: 10px;padding-left: 30px;list-style-position: initial;list-style-image: initial;color: transparent;overflow-y: auto;list-style-type: none !important;"><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;ControlflowStateStrings&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;StateStrings</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">id</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;statedesc.java.null_assigned&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Enter&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">%{p} is assigned null</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Enter&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/StateStrings&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/ControlflowStateStrings&gt;</span></code></span></span></p></li></ol></pre><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;">控制流状态字符串概述</p><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">StateStrings：<strong style="color: rgb(0, 0, 0);">状态字符串，</strong><statestrings>元素包含了描述状态变化的字符串。</statestrings></span></p></li><ul style="padding-left: 30px;list-style: circle;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><strong style="color: rgb(0, 0, 0);">Enter：进入状态，</strong> <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;Enter&gt;</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">%{p} is assigned null</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;/Enter&gt;</span></code> 描述了当变量被赋值为 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">null</span></code> 时的状态变化。</p></li><li style="margin-top: 6px !important;"><p>id： <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">id</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">=</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;statedesc.java.null_assigned&#34;</span></code> 是一个唯一的标识符，用于区分不同的控制流状态字符串。</p></li></ul></ul><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;">说明：</p><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">id： <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">statedesc</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">.</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">java</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">.</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">null_assigned</span></code> 这个 id 表示这是一个与 Java 语言相关的状态描述，具体描述了变量被赋值为 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">null</span></code> 的情况。</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;"><strong style="color: rgb(0, 0, 0);">进入状态</strong>： <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">%{</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">p</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">}</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;"></span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">is</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">assigned</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">null</span></code> 这个字符串使用占位符 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">%{</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">p</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">}</span></code> 来表示变量名。当工具检测到某个变量被赋值为 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">null</span></code> 时，会用实际的变量名替换 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">%{</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">p</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">}</span></code>，从而生成具体的描述信息。</span></p></li></ul><h2 style="margin-top: 2rem;margin-bottom: 0.5rem;font-weight: 700;color: rgb(248, 95, 72);line-height: 1.35;font-size: 22px;letter-spacing: normal;text-align: start;font-family: Menlo, Monaco, &#34;Source Code Pro&#34;, Consolas, Inconsolata, &#34;Ubuntu Mono&#34;, &#34;DejaVu Sans Mono&#34;, &#34;Courier New&#34;, &#34;Droid Sans Mono&#34;, &#34;Hiragino Sans GB&#34;, 微软雅黑, monospace !important;">TaintFlagDeclarations标签分析</h2><pre style="padding-top: 8px;padding-bottom: 6px;background: rgb(45, 45, 45);border-radius: 0px;overflow-y: auto;color: rgb(80, 97, 109);letter-spacing: normal;text-align: start;font-size: 10px;line-height: 12px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 1px !important;border-style: solid !important;border-color: rgb(226, 226, 226) !important;"><ol class="list-paddingleft-1" style="padding-top: 10px;padding-bottom: 10px;padding-left: 30px;list-style-position: initial;list-style-image: initial;color: transparent;overflow-y: auto;list-style-type: none !important;"><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;TaintFlagDescriptions&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;FlagDescription</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">name</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;ARGS&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Command Line Arguments</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/FlagDescription&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;FlagDescription</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">name</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;PRIVATE&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Private Information</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/FlagDescription&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/TaintFlagDescriptions&gt;</span></code></span></span></p></li></ol></pre><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;"><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">&lt;TaintFlagDescriptions&gt;</span></code>污点标志描述</p><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">FlagDescription：<strong style="color: rgb(0, 0, 0);">污点标志描述，</strong> <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;FlagDescription&gt;</span></code> 元素定义了每个污点标志的名称和描述。</span></p></li><ul style="padding-left: 30px;list-style: circle;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">name</span></code> 属性指定了污点标志的名称。</p></li><li style="margin-top: 6px !important;"><p>value描述：元素的文本内容提供了污点标志的描述。</p></li></ul></ul><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;">这段 XML 代码定义了两个污点标志描述：</p><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;"><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">ARGS</span></code>：表示数据来源于命令行参数。</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;"><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">PRIVATE</span></code>：表示数据包含私有信息。</span></p></li></ul><h2 style="margin-top: 2rem;margin-bottom: 0.5rem;font-weight: 700;color: rgb(248, 95, 72);line-height: 1.35;font-size: 22px;letter-spacing: normal;text-align: start;font-family: Menlo, Monaco, &#34;Source Code Pro&#34;, Consolas, Inconsolata, &#34;Ubuntu Mono&#34;, &#34;DejaVu Sans Mono&#34;, &#34;Courier New&#34;, &#34;Droid Sans Mono&#34;, &#34;Hiragino Sans GB&#34;, 微软雅黑, monospace !important;">Coverage 标签分析</h2><pre style="padding-top: 8px;padding-bottom: 6px;background: rgb(45, 45, 45);border-radius: 0px;overflow-y: auto;color: rgb(80, 97, 109);letter-spacing: normal;text-align: start;font-size: 10px;line-height: 12px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 1px !important;border-style: solid !important;border-color: rgb(226, 226, 226) !important;"><ol class="list-paddingleft-1" style="padding-top: 10px;padding-bottom: 10px;padding-left: 30px;list-style-position: initial;list-style-image: initial;color: transparent;overflow-y: auto;list-style-type: none !important;"><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Coverage&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;FunctionIdentifier</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">formatVersion</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;3.8&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;MatchExpression&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">java.io/</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            File.{toPath,getPath,getAbsolutePath,getCanonicalPath,getCanonicalFile}()</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/MatchExpression&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/FunctionIdentifier&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;FunctionIdentifier</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">formatVersion</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;6.10&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;MatchExpression&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">java.io / ObjectOutputStream.init^()</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/MatchExpression&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/FunctionIdentifier&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Coverage&gt;</span></code></span></span></p></li></ol></pre><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;"><coverage>覆盖率配置</coverage></p><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">FunctionIdentifier：<strong style="color: rgb(0, 0, 0);">函数标识符，定义了需要覆盖的函数或方法。</strong></span></p></li><ul style="padding-left: 30px;list-style: circle;margin-top: 6px !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p>formatVersion：函数标识符的格式版本。</p></li><li style="margin-top: 6px !important;"><p>MatchExpression：匹配函数或方法的表达式。</p></li></ul></ul><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;">表达式描述：</p><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;"><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">java</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">.</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">io</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">/</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">File</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">.{</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">toPath</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">,</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">getPath</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">,</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">getAbsolutePath</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">,</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">getCanonicalPath</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">,</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">getCanonicalFile</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">}()</span></code></p><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;">匹配表达式指定了 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">java</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">.</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">io</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">.</span><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">File</span></code> 类中的多个方法，包括 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">toPath</span></code>、 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">getPath</span></code>、 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">getAbsolutePath</span></code>、 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">getCanonicalPath</span></code> 和 <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">getCanonicalFile</span></code>。这些方法都与文件路径的获取有关。</p><h1 style="margin-top: 2rem;margin-bottom: 0.5rem;font-weight: 700;color: rgb(248, 95, 72);line-height: 1.35;font-size: 26px;letter-spacing: normal;text-align: start;font-family: Menlo, Monaco, &#34;Source Code Pro&#34;, Consolas, Inconsolata, &#34;Ubuntu Mono&#34;, &#34;DejaVu Sans Mono&#34;, &#34;Courier New&#34;, &#34;Droid Sans Mono&#34;, &#34;Hiragino Sans GB&#34;, 微软雅黑, monospace !important;">Masks标签分析</h1><pre style="padding-top: 8px;padding-bottom: 6px;background: rgb(45, 45, 45);border-radius: 0px;overflow-y: auto;color: rgb(80, 97, 109);letter-spacing: normal;text-align: start;font-size: 10px;line-height: 12px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 1px !important;border-style: solid !important;border-color: rgb(226, 226, 226) !important;"><ol class="list-paddingleft-2" style="padding-top: 10px;padding-bottom: 10px;padding-left: 30px;list-style-position: initial;list-style-image: initial;color: transparent;overflow-y: auto;list-style-type: none !important;"><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Masks</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">revision</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;0&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;mask:Mask</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">builtin</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;true&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">name</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;Targeted&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;mask:Exclusion&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;mask:Attribute</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">name</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;inputsource&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">value</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;Serialized Data&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">/&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/mask:Exclusion&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;mask:Exclusion&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;mask:Attribute</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">name</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;inputsource&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">value</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;Windows Registry&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">/&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/mask:Exclusion&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/mask:Mask&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;mask:Mask</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">builtin</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;true&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">default</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;true&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">name</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;Broad&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;mask:Description&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">            &lt;![CDATA[此设置向源代码分析器提供了一套最全面的规则。通过它的使用可以发现一系列需要审核的安全问题。]]&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">        </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/mask:Description&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/mask:Mask&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;mask:Mask</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">builtin</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;true&#34;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;"> </span><span style="color: rgb(249, 145, 87);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">name</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">=</span><span style="color: rgb(102, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&#34;Medium&#34;</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/mask:Mask&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Masks&gt;</span></code></span></span></p></li></ol></pre><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;">Mask：掩码，用于静态代码分析工具（如 Fortify SCA）来配置不同的分析规则集。</p><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;"><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;mask:Mask&gt;</span></code>： 元素定义了不同的分析规则集。</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;"><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">builtin</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">=</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;true&#34;</span></code>： 表示这是一个预定义的掩码。</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;"><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">name</span></code> ：属性指定了掩码的名称。</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;"><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">default</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">=</span><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&#34;true&#34;</span></code> ：表示这是默认的掩码。</span></p></li></ul><h1 style="margin-top: 2rem;margin-bottom: 0.5rem;font-weight: 700;color: rgb(248, 95, 72);line-height: 1.35;font-size: 26px;letter-spacing: normal;text-align: start;font-family: Menlo, Monaco, &#34;Source Code Pro&#34;, Consolas, Inconsolata, &#34;Ubuntu Mono&#34;, &#34;DejaVu Sans Mono&#34;, &#34;Courier New&#34;, &#34;Droid Sans Mono&#34;, &#34;Hiragino Sans GB&#34;, 微软雅黑, monospace !important;">Localization 标签分析</h1><pre style="padding-top: 8px;padding-bottom: 6px;background: rgb(45, 45, 45);border-radius: 0px;overflow-y: auto;color: rgb(80, 97, 109);letter-spacing: normal;text-align: start;font-size: 10px;line-height: 12px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 1px !important;border-style: solid !important;border-color: rgb(226, 226, 226) !important;"><ol class="list-paddingleft-2" style="padding-top: 10px;padding-bottom: 10px;padding-left: 30px;list-style-position: initial;list-style-image: initial;color: transparent;overflow-y: auto;list-style-type: none !important;"><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Localization&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">  </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Mapping&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;KeyString&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Weak Encryption</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/KeyString&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;LocalString&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">Weak Encryption</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/LocalString&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">  </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Mapping&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">  </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;Mapping&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;KeyString&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">User-Controlled Key Size</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/KeyString&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">    </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;LocalString&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">User-Controlled Key Size</span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/LocalString&gt;</span></code></span></span></p></li><li style="padding-left: 1em;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">  </span><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Mapping&gt;</span></code></span></span></p></li><li style="padding-left: 1em;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;list-style-type: decimal;margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);display: block;font-size: 14px !important;word-break: inherit !important;white-space-collapse: collapse !important;"><span style="display: block;word-break: inherit !important;"><code style="margin-left: -20px;display: flex;overflow: initial;line-height: 12px;overflow-wrap: normal;border-width: 0px;border-style: initial;border-color: initial;font-size: 10px;font-family: inherit !important;white-space-collapse: preserve !important;"><span style="color: rgb(242, 119, 122);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">&lt;/Localization&gt;</span><span style="color: rgb(204, 204, 204);line-height: 20px;font-size: 13px !important;white-space: inherit !important;">;</span></code></span></span></p></li></ol></pre><p style="margin-top: 15px;margin-bottom: 15px;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;">本地化配置，管理和翻译不同的字符串</p><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;"><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;Localization&gt;</span></code> 是根元素，包含多个映射（ <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;Mapping&gt;</span></code>）。</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;"><code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;Mapping&gt;</span></code> 元素定义了键字符串（ <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;KeyString&gt;</span></code>）和本地化字符串（ <code style="background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;font-family: consolas, menlo, courier, &#34;monospace&#34;, &#34;Microsoft Yahei&#34; !important;border-width: 0px !important;border-style: initial !important;border-color: initial !important;"><span style="font-size: 14px;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;">&lt;LocalString&gt;</span></code>）之间的对应关系。</span></p></li></ul><h1 style="margin-top: 2rem;margin-bottom: 0.5rem;font-weight: 700;color: rgb(248, 95, 72);line-height: 1.35;font-size: 26px;letter-spacing: normal;text-align: start;font-family: Menlo, Monaco, &#34;Source Code Pro&#34;, Consolas, Inconsolata, &#34;Ubuntu Mono&#34;, &#34;DejaVu Sans Mono&#34;, &#34;Courier New&#34;, &#34;Droid Sans Mono&#34;, &#34;Hiragino Sans GB&#34;, 微软雅黑, monospace !important;">参考</h1><ul style="padding-left: 30px;list-style-position: initial;list-style-image: initial;color: rgb(80, 97, 109);font-size: 15px;letter-spacing: normal;text-align: start;margin-top: 6px !important;list-style-type: square !important;" class="list-paddingleft-1"><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">SCACustRulesGuide23.2.0.pdf</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">SCA_Cust_Rules_Guide_23.2.0.zip</span></p></li><li style="margin-top: 6px !important;"><p><span style="color: rgb(74, 74, 74);font-size: 14px !important;">2024.2.1.0003-zh_CN.zip</span></p></li></ul><p>参考文件，已托管到知识星球，自取。</p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484340">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=9af62982&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484340%26idx%3D1%26sn%3Df4e4276774ad25887d9f44ca481b83bd%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 08 Nov 2024 10:19:00 +0800</pubDate>
    </item>
    <item>
      <title>fortify sca rules分析</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484336&amp;idx=1&amp;sn=c93f077955f1d5dad18d525ac2a6be2b</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-11-06 10:17</span> <span style="display: inline-block;">北京</span>
</p>

<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=0984b2a2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo7jJzCYtjl3llRy2bXvTY4D0F6yxfj5B8dnORhibqRrEM8orL7ztWLibYcQFKGxpQZgca0QFLRkFJDA%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p>fortify sca rules 一直处于加密状态，只有在扫描的时候才会被加载，网上发现已经有大佬破解了，这里分享给大家，jar包知识星球自取，解密代码如下，自行编译即可：</p><pre style="font-family:&#39;JetBrains Mono&#39;,monospace;font-size:9.8pt;"><span style="color:#cc7832;"></span></pre><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="java"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.io.*;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.nio.file.Files;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.security.*;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.util.Properties;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.util.StringTokenizer;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.util.zip.GZIPInputStream;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">import</span> java.util.zip.GZIPOutputStream;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">public</span> <span class="code-snippet__class"><span class="code-snippet__keyword">class</span> <span class="code-snippet__title">Main</span> </span>{</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 定义常量</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">final</span> String MESSAGE_DIGEST_ALGORITHM = <span class="code-snippet__string">&#34;SHA-1&#34;</span>; <span class="code-snippet__comment">// 消息摘要算法</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">final</span> String CRYPTO_PROVIDER = <span class="code-snippet__string">&#34;SUN&#34;</span>; <span class="code-snippet__comment">// 加密提供者</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">final</span> <span class="code-snippet__keyword">int</span> BUFFER_SIZE = <span class="code-snippet__number">262144</span>; <span class="code-snippet__comment">// 缓冲区大小</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">final</span> String STD = <span class="code-snippet__string">&#34;1fea047f-dee0ac89-b5db25a6-b0c3a4cf&#34;</span>; <span class="code-snippet__comment">// 默认密钥</span></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 构造函数</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__title">Main</span><span class="code-snippet__params">()</span> </span>{</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 获取消息摘要算法实例</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> MessageDigest <span class="code-snippet__title">getMessageDigestAlgorithm</span><span class="code-snippet__params">()</span> </span>{</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">try</span> {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">return</span> MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM, CRYPTO_PROVIDER);</span></code><code><span class="code-snippet_outer">        } <span class="code-snippet__keyword">catch</span> (GeneralSecurityException e) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">throw</span> <span class="code-snippet__keyword">new</span> RuntimeException(e);</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 计算输入流的摘要</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">byte</span>[] makeDigest(InputStream inStream) <span class="code-snippet__keyword">throws</span> IOException {</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> makeDigest(inStream, getMessageDigestAlgorithm());</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 计算输入流的摘要，使用指定的消息摘要算法</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">byte</span>[] makeDigest(InputStream inStream, MessageDigest md) <span class="code-snippet__keyword">throws</span> IOException {</span></code><code><span class="code-snippet_outer">        md.reset();</span></code><code><span class="code-snippet_outer">        DigestInputStream in = <span class="code-snippet__keyword">new</span> DigestInputStream(inStream, md);</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> md.digest(); <span class="code-snippet__comment">// 返回摘要结果</span></span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 加密函数</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">encrypt</span><span class="code-snippet__params">(<span class="code-snippet__keyword">long</span>[] v, <span class="code-snippet__keyword">long</span>[] k)</span> </span>{</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> y = v[<span class="code-snippet__number">0</span>];</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> z = v[<span class="code-snippet__number">1</span>];</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> sum = <span class="code-snippet__number">0L</span>;</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> delta = <span class="code-snippet__number">2654435769L</span>; <span class="code-snippet__comment">// 常量 delta</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> n = <span class="code-snippet__number">32L</span>; <span class="code-snippet__comment">// 迭代次数</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> top = <span class="code-snippet__number">4294967295L</span>; <span class="code-snippet__comment">// 掩码</span></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__comment">// 加密循环</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">for</span> (; n-- &gt; <span class="code-snippet__number">0L</span>; z &amp;= top) {</span></code><code><span class="code-snippet_outer">            sum += delta;</span></code><code><span class="code-snippet_outer">            sum &amp;= top;</span></code><code><span class="code-snippet_outer">            y += (z &lt;&lt; <span class="code-snippet__number">4</span>) + k[<span class="code-snippet__number">0</span>] ^ z + sum ^ (z &gt;&gt; <span class="code-snippet__number">5</span>) + k[<span class="code-snippet__number">1</span>];</span></code><code><span class="code-snippet_outer">            y &amp;= top;</span></code><code><span class="code-snippet_outer">            z += (y &lt;&lt; <span class="code-snippet__number">4</span>) + k[<span class="code-snippet__number">2</span>] ^ y + sum ^ (y &gt;&gt; <span class="code-snippet__number">5</span>) + k[<span class="code-snippet__number">3</span>];</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        v[<span class="code-snippet__number">0</span>] = y;</span></code><code><span class="code-snippet_outer">        v[<span class="code-snippet__number">1</span>] = z;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 解密函数</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">decrypt</span><span class="code-snippet__params">(<span class="code-snippet__keyword">long</span>[] v, <span class="code-snippet__keyword">long</span>[] k)</span> </span>{</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> n = <span class="code-snippet__number">32L</span>; <span class="code-snippet__comment">// 迭代次数</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> y = v[<span class="code-snippet__number">0</span>];</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> z = v[<span class="code-snippet__number">1</span>];</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> delta = <span class="code-snippet__number">2654435769L</span>; <span class="code-snippet__comment">// 常量 delta</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> top = <span class="code-snippet__number">4294967295L</span>; <span class="code-snippet__comment">// 掩码</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> sum = delta &lt;&lt; <span class="code-snippet__number">5</span>;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__comment">// 解密循环</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">for</span> (sum &amp;= top; n-- &gt; <span class="code-snippet__number">0L</span>; sum &amp;= top) {</span></code><code><span class="code-snippet_outer">            z -= (y &lt;&lt; <span class="code-snippet__number">4</span>) + k[<span class="code-snippet__number">2</span>] ^ y + sum ^ (y &gt;&gt; <span class="code-snippet__number">5</span>) + k[<span class="code-snippet__number">3</span>];</span></code><code><span class="code-snippet_outer">            z &amp;= top;</span></code><code><span class="code-snippet_outer">            y -= (z &lt;&lt; <span class="code-snippet__number">4</span>) + k[<span class="code-snippet__number">0</span>] ^ z + sum ^ (z &gt;&gt; <span class="code-snippet__number">5</span>) + k[<span class="code-snippet__number">1</span>];</span></code><code><span class="code-snippet_outer">            y &amp;= top;</span></code><code><span class="code-snippet_outer">            sum -= delta;</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        v[<span class="code-snippet__number">0</span>] = y;</span></code><code><span class="code-snippet_outer">        v[<span class="code-snippet__number">1</span>] = z;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 加密输入流到输出流</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">enc</span><span class="code-snippet__params">(InputStream source, OutputStream dest, <span class="code-snippet__keyword">long</span>[] usrKey)</span> <span class="code-snippet__keyword">throws</span> IOException </span>{</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span>[] k = usrKey.clone(); <span class="code-snippet__comment">// 克隆密钥</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">byte</span>[] byteBuf = <span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">byte</span>[<span class="code-snippet__number">8</span>]; <span class="code-snippet__comment">// 字节缓冲区</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">byte</span>[] tail = <span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">byte</span>[]{<span class="code-snippet__number">32</span>, <span class="code-snippet__number">32</span>, <span class="code-snippet__number">32</span>, <span class="code-snippet__number">32</span>, <span class="code-snippet__number">32</span>, <span class="code-snippet__number">32</span>, <span class="code-snippet__number">32</span>, <span class="code-snippet__number">8</span>}; <span class="code-snippet__comment">// 尾部字节</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span>[] unsigned32Buf = <span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">long</span>[<span class="code-snippet__number">2</span>]; <span class="code-snippet__comment">// 无符号32位缓冲区</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> top = <span class="code-snippet__number">4294967295L</span>; <span class="code-snippet__comment">// 掩码</span></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">int</span> bytesRead;</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__comment">// 读取输入流并加密</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">while</span> ((bytesRead = source.read(byteBuf)) != -<span class="code-snippet__number">1</span>) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (bytesRead &lt; <span class="code-snippet__number">8</span>) {</span></code><code><span class="code-snippet_outer">                tail[<span class="code-snippet__number">7</span>] = (<span class="code-snippet__keyword">byte</span>) bytesRead; <span class="code-snippet__comment">// 设置尾部字节</span></span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            byteArrayToUnsigned32(byteBuf, unsigned32Buf); <span class="code-snippet__comment">// 字节数组转换为无符号32位数组</span></span></code><code><span class="code-snippet_outer">            encrypt(unsigned32Buf, k); <span class="code-snippet__comment">// 加密</span></span></code><code><span class="code-snippet_outer">            k[<span class="code-snippet__number">0</span>] = k[<span class="code-snippet__number">0</span>] + <span class="code-snippet__number">17L</span> &amp; top; <span class="code-snippet__comment">// 更新密钥</span></span></code><code><span class="code-snippet_outer">            k[<span class="code-snippet__number">1</span>] = k[<span class="code-snippet__number">1</span>] + <span class="code-snippet__number">17L</span> &amp; top;</span></code><code><span class="code-snippet_outer">            k[<span class="code-snippet__number">2</span>] = k[<span class="code-snippet__number">2</span>] + <span class="code-snippet__number">17L</span> &amp; top;</span></code><code><span class="code-snippet_outer">            k[<span class="code-snippet__number">3</span>] = k[<span class="code-snippet__number">3</span>] + <span class="code-snippet__number">17L</span> &amp; top;</span></code><code><span class="code-snippet_outer">            unsigned32ToByteArray(unsigned32Buf, byteBuf); <span class="code-snippet__comment">// 无符号32位数组转换为字节数组</span></span></code><code><span class="code-snippet_outer">            dest.write(byteBuf); <span class="code-snippet__comment">// 写入输出流</span></span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        byteArrayToUnsigned32(tail, unsigned32Buf); <span class="code-snippet__comment">// 处理尾部字节</span></span></code><code><span class="code-snippet_outer">        encrypt(unsigned32Buf, k);</span></code><code><span class="code-snippet_outer">        k[<span class="code-snippet__number">0</span>] = k[<span class="code-snippet__number">0</span>] + <span class="code-snippet__number">17L</span> &amp; top;</span></code><code><span class="code-snippet_outer">        k[<span class="code-snippet__number">1</span>] = k[<span class="code-snippet__number">1</span>] + <span class="code-snippet__number">17L</span> &amp; top;</span></code><code><span class="code-snippet_outer">        k[<span class="code-snippet__number">2</span>] = k[<span class="code-snippet__number">2</span>] + <span class="code-snippet__number">17L</span> &amp; top;</span></code><code><span class="code-snippet_outer">        k[<span class="code-snippet__number">3</span>] = k[<span class="code-snippet__number">3</span>] + <span class="code-snippet__number">17L</span> &amp; top;</span></code><code><span class="code-snippet_outer">        unsigned32ToByteArray(unsigned32Buf, tail);</span></code><code><span class="code-snippet_outer">        dest.write(tail); <span class="code-snippet__comment">// 写入尾部字节</span></span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 解密输入流到输出流</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">dec</span><span class="code-snippet__params">(InputStream source, OutputStream dest, <span class="code-snippet__keyword">long</span>[] usrKey)</span> <span class="code-snippet__keyword">throws</span> IOException </span>{</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span>[] k = usrKey.clone(); <span class="code-snippet__comment">// 克隆密钥</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">byte</span>[] byteBuf = <span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">byte</span>[<span class="code-snippet__number">8</span>]; <span class="code-snippet__comment">// 字节缓冲区</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">byte</span>[] byteBufDelay = <span class="code-snippet__keyword">null</span>; <span class="code-snippet__comment">// 延迟字节缓冲区</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span>[] unsigned32Buf = <span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">long</span>[<span class="code-snippet__number">2</span>]; <span class="code-snippet__comment">// 无符号32位缓冲区</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span> top = <span class="code-snippet__number">4294967295L</span>; <span class="code-snippet__comment">// 掩码</span></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">int</span> bytesRead;</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__comment">// 读取输入流并解密</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">while</span> ((bytesRead = source.read(byteBuf)) != -<span class="code-snippet__number">1</span>) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (bytesRead &lt; <span class="code-snippet__number">8</span>) {</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">throw</span> <span class="code-snippet__keyword">new</span> IOException(<span class="code-snippet__string">&#34;invalid encrypted stream&#34;</span>); <span class="code-snippet__comment">// 无效的加密流</span></span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            byteArrayToUnsigned32(byteBuf, unsigned32Buf); <span class="code-snippet__comment">// 字节数组转换为无符号32位数组</span></span></code><code><span class="code-snippet_outer">            decrypt(unsigned32Buf, k); <span class="code-snippet__comment">// 解密</span></span></code><code><span class="code-snippet_outer">            k[<span class="code-snippet__number">0</span>] = k[<span class="code-snippet__number">0</span>] + <span class="code-snippet__number">17L</span> &amp; top; <span class="code-snippet__comment">// 更新密钥</span></span></code><code><span class="code-snippet_outer">            k[<span class="code-snippet__number">1</span>] = k[<span class="code-snippet__number">1</span>] + <span class="code-snippet__number">17L</span> &amp; top;</span></code><code><span class="code-snippet_outer">            k[<span class="code-snippet__number">2</span>] = k[<span class="code-snippet__number">2</span>] + <span class="code-snippet__number">17L</span> &amp; top;</span></code><code><span class="code-snippet_outer">            k[<span class="code-snippet__number">3</span>] = k[<span class="code-snippet__number">3</span>] + <span class="code-snippet__number">17L</span> &amp; top;</span></code><code><span class="code-snippet_outer">            unsigned32ToByteArray(unsigned32Buf, byteBuf); <span class="code-snippet__comment">// 无符号32位数组转换为字节数组</span></span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (source.available() == <span class="code-snippet__number">0</span>) {</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">int</span> bytesToWrite = byteBuf[<span class="code-snippet__number">7</span>];</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">if</span> (bytesToWrite &gt; <span class="code-snippet__number">8</span> || bytesToWrite &lt; <span class="code-snippet__number">0</span> || byteBufDelay == <span class="code-snippet__keyword">null</span>) {</span></code><code><span class="code-snippet_outer">                    <span class="code-snippet__keyword">throw</span> <span class="code-snippet__keyword">new</span> IOException(<span class="code-snippet__string">&#34;invalid encrypted stream&#34;</span>); <span class="code-snippet__comment">// 无效的加密流</span></span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">                dest.write(byteBufDelay, <span class="code-snippet__number">0</span>, bytesToWrite); <span class="code-snippet__comment">// 写入延迟字节</span></span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (byteBufDelay != <span class="code-snippet__keyword">null</span>) {</span></code><code><span class="code-snippet_outer">                dest.write(byteBufDelay, <span class="code-snippet__number">0</span>, <span class="code-snippet__number">8</span>); <span class="code-snippet__comment">// 写入延迟字节</span></span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">byte</span>[] t = byteBufDelay;</span></code><code><span class="code-snippet_outer">                byteBufDelay = byteBuf;</span></code><code><span class="code-snippet_outer">                byteBuf = t;</span></code><code><span class="code-snippet_outer">            } <span class="code-snippet__keyword">else</span> {</span></code><code><span class="code-snippet_outer">                byteBufDelay = byteBuf;</span></code><code><span class="code-snippet_outer">                byteBuf = <span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">byte</span>[<span class="code-snippet__number">8</span>];</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 执行块加密或解密</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">doBlockCipher</span><span class="code-snippet__params">(InputStream source, OutputStream dest, <span class="code-snippet__keyword">boolean</span> encrypt, <span class="code-snippet__keyword">long</span>[] usrKey)</span> <span class="code-snippet__keyword">throws</span> IOException </span>{</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span> (encrypt) {</span></code><code><span class="code-snippet_outer">            enc(source, dest, usrKey); <span class="code-snippet__comment">// 加密</span></span></code><code><span class="code-snippet_outer">        } <span class="code-snippet__keyword">else</span> {</span></code><code><span class="code-snippet_outer">            dec(source, dest, usrKey); <span class="code-snippet__comment">// 解密</span></span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 读取加密流中的头部信息</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">readHeaders</span><span class="code-snippet__params">(InputStream encrypted)</span> <span class="code-snippet__keyword">throws</span> IOException </span>{</span></code><code><span class="code-snippet_outer">        Properties props = <span class="code-snippet__keyword">new</span> Properties();</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">final</span> PushbackInputStream src = <span class="code-snippet__keyword">new</span> PushbackInputStream(encrypted);</span></code><code><span class="code-snippet_outer">        props.load(<span class="code-snippet__keyword">new</span> InputStream() {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">boolean</span> closed = <span class="code-snippet__keyword">false</span>;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            <span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">int</span> <span class="code-snippet__title">read</span><span class="code-snippet__params">()</span> <span class="code-snippet__keyword">throws</span> IOException </span>{</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">if</span> (closed) {</span></code><code><span class="code-snippet_outer">                    <span class="code-snippet__keyword">return</span> -<span class="code-snippet__number">1</span>;</span></code><code><span class="code-snippet_outer">                } <span class="code-snippet__keyword">else</span> {</span></code><code><span class="code-snippet_outer">                    <span class="code-snippet__keyword">int</span> c = src.read();</span></code><code><span class="code-snippet_outer">                    <span class="code-snippet__keyword">if</span> (c == <span class="code-snippet__number">0</span>) {</span></code><code><span class="code-snippet_outer">                        src.unread(c);</span></code><code><span class="code-snippet_outer">                        closed = <span class="code-snippet__keyword">true</span>;</span></code><code><span class="code-snippet_outer">                        <span class="code-snippet__keyword">return</span> -<span class="code-snippet__number">1</span>;</span></code><code><span class="code-snippet_outer">                    } <span class="code-snippet__keyword">else</span> {</span></code><code><span class="code-snippet_outer">                        <span class="code-snippet__keyword">return</span> c;</span></code><code><span class="code-snippet_outer">                    }</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">        });</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">int</span> read = src.read();</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span> (read != <span class="code-snippet__number">0</span>) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">throw</span> <span class="code-snippet__keyword">new</span> IOException(<span class="code-snippet__string">&#34;invalid encrypted stream&#34;</span>); <span class="code-snippet__comment">// 无效的加密流</span></span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 解密并解压缩加密流中的数据</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">byte</span>[] decryptCompressedAfterHeaders(InputStream encrypted, String keyString) <span class="code-snippet__keyword">throws</span> IOException {</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> decryptAfterHeaders(encrypted, keyString, <span class="code-snippet__keyword">true</span>);</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 解密加密流中的数据，可以选择是否解压缩</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">byte</span>[] decryptAfterHeaders(InputStream encrypted, String keyString, <span class="code-snippet__keyword">boolean</span> compressed) <span class="code-snippet__keyword">throws</span> IOException {</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span>[] key = makeKeyFromString(keyString != <span class="code-snippet__keyword">null</span> ? keyString : STD); <span class="code-snippet__comment">// 生成密钥</span></span></code><code><span class="code-snippet_outer">        ByteArrayOutputStream cleartext = <span class="code-snippet__keyword">new</span> ByteArrayOutputStream();</span></code><code><span class="code-snippet_outer">        doBlockCipher(encrypted, cleartext, <span class="code-snippet__keyword">false</span>, key); <span class="code-snippet__comment">// 解密</span></span></code><code><span class="code-snippet_outer">        cleartext.close();</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">byte</span>[] bytes = cleartext.toByteArray();</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span> (compressed) {</span></code><code><span class="code-snippet_outer">            bytes = uncompressString(bytes); <span class="code-snippet__comment">// 解压缩</span></span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> bytes;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 解密并解压缩加密流中的数据</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">byte</span>[] decryptCompressed(InputStream encrypted, String keyString) <span class="code-snippet__keyword">throws</span> IOException {</span></code><code><span class="code-snippet_outer">        readHeaders(encrypted); <span class="code-snippet__comment">// 读取头部信息</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> decryptCompressedAfterHeaders(encrypted, keyString);</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 加密并压缩明文数据</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">encryptAndCompress</span><span class="code-snippet__params">(InputStream cleartext, OutputStream ciphertext, String keyString, Properties properties)</span> <span class="code-snippet__keyword">throws</span> IOException </span>{</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span> (properties != <span class="code-snippet__keyword">null</span>) {</span></code><code><span class="code-snippet_outer">            properties.store(ciphertext, <span class="code-snippet__keyword">null</span>); <span class="code-snippet__comment">// 存储属性</span></span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        ciphertext.write(<span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">byte</span>[]{<span class="code-snippet__number">0</span>}); <span class="code-snippet__comment">// 写入分隔符</span></span></code><code><span class="code-snippet_outer">        encryptAfterHeaders(cleartext, ciphertext, keyString, <span class="code-snippet__keyword">true</span>); <span class="code-snippet__comment">// 加密并压缩</span></span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 加密明文数据，可以选择是否压缩</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">encryptAfterHeaders</span><span class="code-snippet__params">(InputStream stream, OutputStream ciphertext, String keyString, <span class="code-snippet__keyword">boolean</span> compress)</span> <span class="code-snippet__keyword">throws</span> IOException </span>{</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span>[] key = makeKeyFromString(keyString != <span class="code-snippet__keyword">null</span> ? keyString : STD); <span class="code-snippet__comment">// 生成密钥</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span> (compress) {</span></code><code><span class="code-snippet_outer">            stream = compressInputStream(stream); <span class="code-snippet__comment">// 压缩输入流</span></span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        doBlockCipher(stream, ciphertext, <span class="code-snippet__keyword">true</span>, key); <span class="code-snippet__comment">// 加密</span></span></code><code><span class="code-snippet_outer">        stream.close();</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 从字符串生成密钥</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">long</span>[] makeKeyFromString(String keyString) {</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">long</span>[] k = <span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">long</span>[<span class="code-snippet__number">4</span>];</span></code><code><span class="code-snippet_outer">        String[] splitString = <span class="code-snippet__keyword">new</span> String[<span class="code-snippet__number">4</span>];</span></code><code><span class="code-snippet_outer">        StringTokenizer st = <span class="code-snippet__keyword">new</span> StringTokenizer(keyString, <span class="code-snippet__string">&#34;-&#34;</span>);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">int</span> i;</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">for</span> (i = <span class="code-snippet__number">0</span>; i &lt; splitString.length; ++i) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (!st.hasMoreTokens()) {</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">throw</span> <span class="code-snippet__keyword">new</span> Error(<span class="code-snippet__string">&#34;invalid key&#34;</span>); <span class="code-snippet__comment">// 无效的密钥</span></span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            splitString[i] = st.nextToken();</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">for</span> (i = <span class="code-snippet__number">0</span>; i &lt; <span class="code-snippet__number">4</span>; ++i) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">try</span> {</span></code><code><span class="code-snippet_outer">                k[i] = Long.parseLong(splitString[i], <span class="code-snippet__number">16</span>); <span class="code-snippet__comment">// 解析密钥</span></span></code><code><span class="code-snippet_outer">            } <span class="code-snippet__keyword">catch</span> (NumberFormatException e) {</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">throw</span> <span class="code-snippet__keyword">new</span> Error(<span class="code-snippet__string">&#34;invalid key&#34;</span>); <span class="code-snippet__comment">// 无效的密钥</span></span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">return</span> k;</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 解压缩字节数组</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">byte</span>[] uncompressString(<span class="code-snippet__keyword">byte</span>[] in) <span class="code-snippet__keyword">throws</span> IOException {</span></code><code><span class="code-snippet_outer">        GZIPInputStream gis = <span class="code-snippet__keyword">new</span> GZIPInputStream(<span class="code-snippet__keyword">new</span> ByteArrayInputStream(in));</span></code><code><span class="code-snippet_outer">        ByteArrayOutputStream out = <span class="code-snippet__keyword">new</span> ByteArrayOutputStream();</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">int</span> bufferSize = <span class="code-snippet__number">10240</span>;</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">byte</span>[] buffer = <span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">byte</span>[bufferSize];</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">while</span> (<span class="code-snippet__keyword">true</span>) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">int</span> bytesRead = gis.read(buffer, <span class="code-snippet__number">0</span>, bufferSize);</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (bytesRead == -<span class="code-snippet__number">1</span>) {</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">return</span> out.toByteArray(); <span class="code-snippet__comment">// 返回解压缩后的数据</span></span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            out.write(buffer, <span class="code-snippet__number">0</span>, bytesRead);</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 压缩输入流</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> InputStream <span class="code-snippet__title">compressInputStream</span><span class="code-snippet__params">(InputStream in)</span> <span class="code-snippet__keyword">throws</span> IOException </span>{</span></code><code><span class="code-snippet_outer">        ByteArrayOutputStream baos = <span class="code-snippet__keyword">new</span> ByteArrayOutputStream();</span></code><code><span class="code-snippet_outer">        GZIPOutputStream gz = <span class="code-snippet__keyword">new</span> GZIPOutputStream(baos);</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">int</span> bufferSize = <span class="code-snippet__number">10240</span>;</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">byte</span>[] buffer = <span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">byte</span>[bufferSize];</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">int</span> var5 = <span class="code-snippet__number">0</span>;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">while</span> (<span class="code-snippet__keyword">true</span>) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">int</span> bytesRead = in.read(buffer, <span class="code-snippet__number">0</span>, bufferSize);</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">if</span> (bytesRead == -<span class="code-snippet__number">1</span>) {</span></code><code><span class="code-snippet_outer">                gz.close();</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">return</span> <span class="code-snippet__keyword">new</span> ByteArrayInputStream(baos.toByteArray()); <span class="code-snippet__comment">// 返回压缩后的数据</span></span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">            gz.write(buffer, <span class="code-snippet__number">0</span>, bytesRead);</span></code><code><span class="code-snippet_outer">            var5 += bytesRead;</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 字节数组转换为无符号32位数组</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">byteArrayToUnsigned32</span><span class="code-snippet__params">(<span class="code-snippet__keyword">byte</span>[] byteBuf, <span class="code-snippet__keyword">long</span>[] unsigned32Buf)</span> </span>{</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">for</span> (<span class="code-snippet__keyword">int</span> i = <span class="code-snippet__number">0</span>; i &lt; unsigned32Buf.length; ++i) {</span></code><code><span class="code-snippet_outer">            unsigned32Buf[i] = ((<span class="code-snippet__keyword">long</span>) byteBuf[i * <span class="code-snippet__number">4</span>] &amp; <span class="code-snippet__number">255L</span>) + (((<span class="code-snippet__keyword">long</span>) byteBuf[i * <span class="code-snippet__number">4</span> + <span class="code-snippet__number">1</span>] &amp; <span class="code-snippet__number">255L</span>) &lt;&lt; <span class="code-snippet__number">8</span>) + (((<span class="code-snippet__keyword">long</span>) byteBuf[i * <span class="code-snippet__number">4</span> + <span class="code-snippet__number">2</span>] &amp; <span class="code-snippet__number">255L</span>) &lt;&lt; <span class="code-snippet__number">16</span>) + (((<span class="code-snippet__keyword">long</span>) byteBuf[i * <span class="code-snippet__number">4</span> + <span class="code-snippet__number">3</span>] &amp; <span class="code-snippet__number">255L</span>) &lt;&lt; <span class="code-snippet__number">24</span>);</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 无符号32位数组转换为字节数组</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">unsigned32ToByteArray</span><span class="code-snippet__params">(<span class="code-snippet__keyword">long</span>[] unsigned32Buf, <span class="code-snippet__keyword">byte</span>[] byteBuf)</span> </span>{</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">for</span> (<span class="code-snippet__keyword">int</span> i = <span class="code-snippet__number">0</span>; i &lt; unsigned32Buf.length; ++i) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">long</span> l = unsigned32Buf[i];</span></code><code><span class="code-snippet_outer">            byteBuf[i * <span class="code-snippet__number">4</span>] = (<span class="code-snippet__keyword">byte</span>) ((<span class="code-snippet__keyword">int</span>) (l &amp; <span class="code-snippet__number">255L</span>));</span></code><code><span class="code-snippet_outer">            byteBuf[i * <span class="code-snippet__number">4</span> + <span class="code-snippet__number">1</span>] = (<span class="code-snippet__keyword">byte</span>) ((<span class="code-snippet__keyword">int</span>) (l &gt;&gt; <span class="code-snippet__number">8</span> &amp; <span class="code-snippet__number">255L</span>));</span></code><code><span class="code-snippet_outer">            byteBuf[i * <span class="code-snippet__number">4</span> + <span class="code-snippet__number">2</span>] = (<span class="code-snippet__keyword">byte</span>) ((<span class="code-snippet__keyword">int</span>) (l &gt;&gt; <span class="code-snippet__number">16</span> &amp; <span class="code-snippet__number">255L</span>));</span></code><code><span class="code-snippet_outer">            byteBuf[i * <span class="code-snippet__number">4</span> + <span class="code-snippet__number">3</span>] = (<span class="code-snippet__keyword">byte</span>) ((<span class="code-snippet__keyword">int</span>) (l &gt;&gt; <span class="code-snippet__number">24</span> &amp; <span class="code-snippet__number">255L</span>));</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 解密文件</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">decryptFile</span><span class="code-snippet__params">(File src, File dst)</span> <span class="code-snippet__keyword">throws</span> Exception </span>{</span></code><code><span class="code-snippet_outer">        InputStream inputStream = Files.newInputStream(src.toPath());</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">byte</span>[] rule = decryptCompressed(inputStream, <span class="code-snippet__keyword">null</span>); <span class="code-snippet__comment">// 解密并解压缩</span></span></code><code><span class="code-snippet_outer">        OutputStream outputStream = Files.newOutputStream(dst.toPath());</span></code><code><span class="code-snippet_outer">        outputStream.write(rule); <span class="code-snippet__comment">// 写入解密后的数据</span></span></code><code><span class="code-snippet_outer">        outputStream.close();</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 主函数</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">main</span><span class="code-snippet__params">(String[] args)</span> <span class="code-snippet__keyword">throws</span> Exception </span>{</span></code><code><span class="code-snippet_outer">        String rulesDir = <span class="code-snippet__string">&#34;F:\\rules\\2024.2.1.0003-zh_CN\\rules&#34;</span>;</span></code><code><span class="code-snippet_outer">        String decryptDir = <span class="code-snippet__string">&#34;F:\\rules\\2024.2.1.0003-zh_CN\\decrypt&#34;</span>;</span></code><code><span class="code-snippet_outer">        File file = <span class="code-snippet__keyword">new</span> File(rulesDir);</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span> (file.isDirectory()) {</span></code><code><span class="code-snippet_outer">            File[] files = file.listFiles();</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">for</span> (File f : files) {</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">if</span> (f.getName().endsWith(<span class="code-snippet__string">&#34;.bin&#34;</span>)) {</span></code><code><span class="code-snippet_outer">                    decryptFile(f, <span class="code-snippet__keyword">new</span> File(decryptDir + <span class="code-snippet__string">&#34;/&#34;</span> + f.getName() + <span class="code-snippet__string">&#34;.xml&#34;</span>)); <span class="code-snippet__comment">// 解密文件</span></span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">        } <span class="code-snippet__keyword">else</span> {</span></code><code><span class="code-snippet_outer">            decryptFile(file, <span class="code-snippet__keyword">new</span> File(decryptDir + <span class="code-snippet__string">&#34;/&#34;</span> + file.getName() + <span class="code-snippet__string">&#34;.xml&#34;</span>)); <span class="code-snippet__comment">// 解密文件</span></span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000685" data-ratio="0.23780487804878048" data-s="300,640" style="" data-type="png" data-w="1968" src="https://wechat2rss.xlab.app/img-proxy/?k=034125ae&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo7jJzCYtjl3llRy2bXvTY4Dic9fSI0tudKVFEaIsGC6JdddvUhVgQfBJZwXevvrctDrpwZPwoDxFXQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484336">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=b7aa6b37&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484336%26idx%3D1%26sn%3Dc93f077955f1d5dad18d525ac2a6be2b%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 06 Nov 2024 10:17:00 +0800</pubDate>
    </item>
    <item>
      <title>随便聊聊安全建设当前现状</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484331&amp;idx=1&amp;sn=765c2659da031dbb4b2efa769b73c68d</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-11-05 15:57</span> <span style="display: inline-block;">北京</span>
</p>

<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=b9f468a4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo7STKjqLdxib6CmVVARFSppp3dyPCOJMks477DBpC0Sbd5NLYWGXLj6dzjecuAEy51vru6FrluAbJA%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: left;">提前声明，本文无焦虑营销、无卖课、无软文、无广告，单纯聊聊经济下行安全行业的现状，解答某个同学的问题，文章观点仅供参考。<br/></p><p style="text-align: left;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000679" data-ratio="1.5671296296296295" data-s="300,640" style="letter-spacing: 0.578px;text-align: center;" data-type="jpeg" data-w="864" src="https://wechat2rss.xlab.app/img-proxy/?k=355415b2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo7STKjqLdxib6CmVVARFSpppl8mhllx9iaUcRDDjVHSdraAPB3sBU923tYOXaTq0k3mEdeIG4H1xnfQ%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p style="text-align: left;">今天在群里看到有师傅在讨论某企业为了降本增效干掉了自己的安全团队负责人，消息来源不可信，但是也能看出来安全行业在企业中的尴尬地位。没问题的时候在老板看来要你何用，出问题的时候同样会觉得要你何用，这都防不住。</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000678" data-ratio="0.5693348365276212" data-s="300,640" style="" data-type="png" data-w="887" src="https://wechat2rss.xlab.app/img-proxy/?k=a94ca16c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo7STKjqLdxib6CmVVARFSpppDM0l4OcCWe0es3syndztW694DhGNeraIxzMmKI30TzxuhJKV9SeIRg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span style="letter-spacing: 0.578px;text-align: left;">干了这么多年安全，老板通常不在乎你</span><span style="letter-spacing: 0.578px;text-align: left;">的技战法、</span><span style="letter-spacing: 0.578px;text-align: left;">纵深防御，老板在乎的是在有限的</span><span style="letter-spacing: 0.578px;text-align: left;">资金支持下</span><span style="letter-spacing: 0.578px;text-align: left;">，尽可能降低</span><span style="letter-spacing: 0.578px;text-align: left;">网络安全风险，</span><span style="letter-spacing: 0.578px;text-align: left;">这就带给甲乙方人员严峻挑战。之前也有同学问过，自己刚入职参与一家甲方安全建设，有什么可以参考的资料没，我想了想，目前权威一点儿的书</span>籍也就是《企业安全建设指南：金融行业安全架构与技术实践》，这本书内容不做解读，各位有空可以从知识星球自行下载电子版观看，也可以购买实体书阅读。</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000680" data-ratio="1.176007866273353" data-s="300,640" style="" data-type="png" data-w="1017" src="https://wechat2rss.xlab.app/img-proxy/?k=d9d62cd6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo7STKjqLdxib6CmVVARFSpppNYomIDIr4ibBdzrPP7LuMpkCMf151A92bsosS5wEHMwxx6U5XRzibGqQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: left;">其实我想聊的是，<span style="font-size: var(--articleFontsize);letter-spacing: 0.034em;">对甲方安全人员来说，你得心里有谱，</span><span style="font-size: var(--articleFontsize);letter-spacing: 0.034em;">充分考虑当前现状，也就是现状调研，不能照搬乙方片子，乙方的片子主要是为了推销自家产品，与企业当前现状契合度没有那么高。先为企业把脉，看看在有限的资金支持下，优先来补全自己企业里的短板，没必要一上来就整那些高大上的东西，容易把自己拖垮。评估参考的方向有以下几点：</span></p><p style="text-align: left;"><span style="font-size: var(--articleFontsize);letter-spacing: 0.034em;">1、企业规模</span></p><p style="text-align: left;"><span style="font-size: var(--articleFontsize);letter-spacing: 0.034em;">不足百人的小公司，也没啥专业的安全团队，通常可能只有一两个运维或者压根没有，如果不是短而精的公司或者大集团的小公司（安全能力靠集团统一管控），重点对公司的网络、服务器进行管控，最好将服务器和办公网络进行划分，对网络进行监控，使用一些如panabit或者其他开源产品，对网络进行准入控制；使用一些如：jumpserver或者闭源堡垒机来控制服务器；如果涉及对外业务，可以部署一些开源或者社区版的waf，没必要裸奔；另外如果怕企业被入侵，可以部署一些蜜罐，<span style="letter-spacing: 0.578px;text-align: left;">不奢求反制，</span>好歹做到被攻击了还能给自己提个醒。对于中大型公司，公司都有统一规划，个人服从公司统一安排就行，盯着自己的OKR，做好自己本职工作就行。<br/></span></p><p style="text-align: left;"><span style="font-size: var(--articleFontsize);letter-spacing: 0.034em;"><span style="letter-spacing: 0.578px;text-align: left;">2、</span><span style="letter-spacing: 0.578px;text-align: left;">企业业务</span></span></p><p style="text-align: left;"><span style="font-size: var(--articleFontsize);letter-spacing: 0.034em;"><span style="letter-spacing: 0.578px;text-align: left;">不同行业其实安全建设的方向是不同的。举个简单的例子，金融行业安全运营的同学侧重在有限的预算下，优先满足监管单位的要求，满足要求下，多花一分钱都是罪过，除非对自己工作或者钱包有利。对于电力行业，虽说也有监管要求，但是保障业务稳定性是第一要义，网络和系统只要能稳定运行，就不会去动，除非你能拍着胸脯对领导说出了问题我负责。另外电力行业的网络尽可能做隔离，对比其他行业(笔者只是调研了发电网络，基于发电网络得出的观点)，网络的承载很低，设备吞吐很弱，但是网络有隔离，相对来说是安全的，做好终端管控，做好网络隔离，减少攻击面，降低整体安全风险。<br/></span></span></p><p style="text-align: left;"><span style="font-size: var(--articleFontsize);letter-spacing: 0.034em;">3、当前安全建设现状<br/></span></p><p style="text-align: left;">梳理当前企业安全建设都有哪些，重点梳理防护手段，安全人员数量，做到心里有数，判断当前安全建设是否合理，是否有可以迅速提升的建设方向，主要是经济实惠成熟稳定，要不后续乙方离场，留下一地鸡毛。另外不少建设方向是需要投入安全人员进行运营的，得考虑当前安全人员的数量及是否能满足运营能力。</p><p style="text-align: left;"><span style="font-size: var(--articleFontsize);letter-spacing: 0.034em;">4、安全预算</span></p><p style="text-align: left;"><span style="font-size: var(--articleFontsize);letter-spacing: 0.034em;">安全预算是很重要的，预算的多少，决定你当年或者明年的重点工作方向，举个简单的例子，预算充足，那就可以着重在保障公司的业务的上进行投入，在公司的短板上进行补齐。一定要清楚，设备是要钱的，乙方也是要钱的，如果没钱乙方销售可能连跟烟都不舍得招呼你，另外安装社区版或者开源平台的服务器也是要花钱的。以前在为企业规划SDL体系建设的时候，在调研的时候通常和安全团队聊的都是是否可以得到企业高层的支持，如果没有，对于那些安全团队可能会和其他团队产生冲突的制度规范就得慎重制定。</span></p><p style="text-align: left;">当前安全行业存在极端行径，工作内容复杂，行业不被理解，工作容易背锅等等情况，个人是无法改变当前现状的。笔者也是一个普通人，智商垫底，普通家庭，普通学校背景，普通工作背景，没有满满一页CVE编号PPT，也没有大佬悉心教导，这么多年也一点一滴走过来的。对于那些刚入行的同学，网安肯定不是一条康庄大道，但是山就在那里，如果决定前行，那就努力踏出一条路，相信未来也会有不一样的收获。<br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484331">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=71319f78&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484331%26idx%3D1%26sn%3D765c2659da031dbb4b2efa769b73c68d%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 05 Nov 2024 15:57:00 +0800</pubDate>
    </item>
    <item>
      <title>ZIP Slip</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484323&amp;idx=1&amp;sn=037c15e26149b5bd6c395dbdca61d08e</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-11-04 19:23</span> <span style="display: inline-block;">北京</span>
</p>

<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=3f0a02ac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo61v1XBwaJenPiaiaxp1zjlibMMOHDo1MCEfPCiaPT5IYHL8P3n2REeu2ez136n50N4g5kTvW0AS4FiaibA%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p>有研发的同学询问zip slip漏洞的修复，碰巧最近在批量找一些cms的zip slip漏洞，提供以下两种修复方式，仅供参考：</p><p><span style="font-size: 24px;">修复方式1</span></p><pre style="font-family:&#39;JetBrains Mono&#39;,monospace;font-size:9.8pt;"><pre style="font-family:&#39;JetBrains Mono&#39;,monospace;font-size:9.8pt;"><span style="color:#cf8e6d;"></span></pre></pre><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">private</span> <span class="code-snippet__keyword">static</span> final <span class="code-snippet__keyword">int</span> DEFAULT_BUFFER_SIZE = <span class="code-snippet__number">8192</span>;</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">unzip</span>(<span class="code-snippet__params">File zipFile, File destDir, String encoding</span>)</span> {</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span> (destDir.exists() &amp;&amp; !destDir.isDirectory()) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">throw</span> <span class="code-snippet__keyword">new</span> IllegalArgumentException(<span class="code-snippet__string">&#34;destDir is not a directory!&#34;</span>);</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">        ZipFile zip = <span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">        InputStream <span class="code-snippet__keyword">is</span> = <span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">        FileOutputStream fos = <span class="code-snippet__literal">null</span>;</span></code><code><span class="code-snippet_outer">        File file;</span></code><code><span class="code-snippet_outer">        String name;</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">byte</span>[] buff = <span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">byte</span>[DEFAULT_BUFFER_SIZE];</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">int</span> read;</span></code><code><span class="code-snippet_outer">        ZipEntry entry;</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">try</span> {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">try</span> {</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">if</span> (StringUtils.isNotBlank(encoding)) {</span></code><code><span class="code-snippet_outer">                    zip = <span class="code-snippet__keyword">new</span> ZipFile(zipFile, encoding);</span></code><code><span class="code-snippet_outer">                } <span class="code-snippet__keyword">else</span> {</span></code><code><span class="code-snippet_outer">                    zip = <span class="code-snippet__keyword">new</span> ZipFile(zipFile);</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">                Enumeration&lt;?&gt; en = zip.getEntries();</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">while</span> (en.hasMoreElements()) {</span></code><code><span class="code-snippet_outer">                    entry = (ZipEntry) en.nextElement();</span></code><code><span class="code-snippet_outer">                    name = entry.getName();</span></code><code><span class="code-snippet_outer">                    name = name.replace(<span class="code-snippet__string">&#39;/&#39;</span>, File.separatorChar);</span></code><code><span class="code-snippet_outer">                    <span class="code-snippet__comment">// 防止zip包里面的使用`../..`之类的文件名，将文件解压到指定目录之外。</span></span></code><code><span class="code-snippet_outer">                    name = name.replace(<span class="code-snippet__string">&#34;..&#34;</span>, <span class="code-snippet__string">&#34;&#34;</span>);</span></code><code><span class="code-snippet_outer">                    file = <span class="code-snippet__keyword">new</span> File(destDir, name);</span></code><code><span class="code-snippet_outer">                    <span class="code-snippet__keyword">if</span> (entry.isDirectory()) {</span></code><code><span class="code-snippet_outer">                        file.mkdirs();</span></code><code><span class="code-snippet_outer">                    } <span class="code-snippet__keyword">else</span> {</span></code><code><span class="code-snippet_outer">                        <span class="code-snippet__comment">// 创建父目录</span></span></code><code><span class="code-snippet_outer">                        file.getParentFile().mkdirs();</span></code><code><span class="code-snippet_outer">                        <span class="code-snippet__keyword">is</span> = zip.getInputStream(entry);</span></code><code><span class="code-snippet_outer">                        fos = <span class="code-snippet__keyword">new</span> FileOutputStream(file);</span></code><code><span class="code-snippet_outer">                        <span class="code-snippet__keyword">while</span> ((read = <span class="code-snippet__keyword">is</span>.read(buff)) &gt; <span class="code-snippet__number">0</span>) {</span></code><code><span class="code-snippet_outer">                            fos.write(buff, <span class="code-snippet__number">0</span>, read);</span></code><code><span class="code-snippet_outer">                        }</span></code><code><span class="code-snippet_outer">                        fos.close();</span></code><code><span class="code-snippet_outer">                        <span class="code-snippet__keyword">is</span>.close();</span></code><code><span class="code-snippet_outer">                    }</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">            } <span class="code-snippet__keyword">finally</span> {</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">if</span> (fos != <span class="code-snippet__literal">null</span>) {</span></code><code><span class="code-snippet_outer">                    fos.close();</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">if</span> (<span class="code-snippet__keyword">is</span> != <span class="code-snippet__literal">null</span>) {</span></code><code><span class="code-snippet_outer">                    <span class="code-snippet__keyword">is</span>.close();</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">                <span class="code-snippet__keyword">if</span> (zip != <span class="code-snippet__literal">null</span>) {</span></code><code><span class="code-snippet_outer">                    zip.close();</span></code><code><span class="code-snippet_outer">                }</span></code><code><span class="code-snippet_outer">            }</span></code><code><span class="code-snippet_outer">        } <span class="code-snippet__keyword">catch</span> (IOException e) {</span></code><code><span class="code-snippet_outer">            e.printStackTrace();</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">    }</span></code></pre></section><p>zip解压主要使用的是ant组件，依赖相关如下：</p><pre style="font-family:&#39;JetBrains Mono&#39;,monospace;font-size:9.8pt;"><span style="color:#d5b778;"></span></pre><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="xml"><code><span class="code-snippet_outer"><span class="code-snippet__tag">&lt;<span class="code-snippet__name">dependency</span>&gt;</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag">&lt;<span class="code-snippet__name">groupId</span>&gt;</span>org.apache.ant<span class="code-snippet__tag">&lt;/<span class="code-snippet__name">groupId</span>&gt;</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag">&lt;<span class="code-snippet__name">artifactId</span>&gt;</span>ant<span class="code-snippet__tag">&lt;/<span class="code-snippet__name">artifactId</span>&gt;</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag">&lt;<span class="code-snippet__name">version</span>&gt;</span>1.9.6<span class="code-snippet__tag">&lt;/<span class="code-snippet__name">version</span>&gt;</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__tag">&lt;/<span class="code-snippet__name">dependency</span>&gt;</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__tag">&lt;<span class="code-snippet__name">dependency</span>&gt;</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag">&lt;<span class="code-snippet__name">groupId</span>&gt;</span>commons-io<span class="code-snippet__tag">&lt;/<span class="code-snippet__name">groupId</span>&gt;</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag">&lt;<span class="code-snippet__name">artifactId</span>&gt;</span>commons-io<span class="code-snippet__tag">&lt;/<span class="code-snippet__name">artifactId</span>&gt;</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag">&lt;<span class="code-snippet__name">version</span>&gt;</span>2.4<span class="code-snippet__tag">&lt;/<span class="code-snippet__name">version</span>&gt;</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__tag">&lt;/<span class="code-snippet__name">dependency</span>&gt;</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__tag">&lt;<span class="code-snippet__name">dependency</span>&gt;</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag">&lt;<span class="code-snippet__name">groupId</span>&gt;</span>org.apache.commons<span class="code-snippet__tag">&lt;/<span class="code-snippet__name">groupId</span>&gt;</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag">&lt;<span class="code-snippet__name">artifactId</span>&gt;</span>commons-lang3<span class="code-snippet__tag">&lt;/<span class="code-snippet__name">artifactId</span>&gt;</span></span></code><code><span class="code-snippet_outer">    <span class="code-snippet__tag">&lt;<span class="code-snippet__name">version</span>&gt;</span>3.4<span class="code-snippet__tag">&lt;/<span class="code-snippet__name">version</span>&gt;</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__tag">&lt;/<span class="code-snippet__name">dependency</span>&gt;</span></span></code></pre></section><pre style="font-family:&#39;JetBrains Mono&#39;,monospace;font-size:9.8pt;"><span style="color:#d5b778;"></span></pre><p><span style="font-size: 24px;">修复方式2</span></p><pre style="font-family:&#39;JetBrains Mono&#39;,monospace;font-size:9.8pt;"><span style="color:#cf8e6d;"></span></pre><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">public</span> <span class="code-snippet__keyword">static</span> <span class="code-snippet__keyword">void</span> <span class="code-snippet__title">unZipFiles</span>(<span class="code-snippet__params">File zipFile,String descDir</span>) throws IOException</span> {</span></code><code><span class="code-snippet_outer">    File pathFile = <span class="code-snippet__keyword">new</span> File(descDir);</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">if</span> (!pathFile.exists()) {</span></code><code><span class="code-snippet_outer">        pathFile.mkdirs();</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__comment">// 解决zip文件中有中文目录或者中文文件</span></span></code><code><span class="code-snippet_outer">    ZipFile zip = <span class="code-snippet__keyword">new</span> ZipFile(zipFile, Charset.forName(<span class="code-snippet__string">&#34;UTF-8&#34;</span>));</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">for</span> (Enumeration entries = zip.entries(); entries.hasMoreElements();) {</span></code><code><span class="code-snippet_outer">        ZipEntry entry = (ZipEntry) entries.nextElement();</span></code><code><span class="code-snippet_outer">        String entryName = entry.getName();</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        Pattern pattern = Pattern.compile(<span class="code-snippet__string">&#34;[^a-zA-Z0-9_\\-\\.]&#34;</span>);</span></code><code><span class="code-snippet_outer">        Matcher matcher = pattern.matcher(entryName);</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span>(entryName.contains(<span class="code-snippet__string">&#34;../&#34;</span>) || entryName.contains(<span class="code-snippet__string">&#34;..\\&#34;</span>) || matcher.find()){</span></code><code><span class="code-snippet_outer">            System.<span class="code-snippet__keyword">out</span>.println(<span class="code-snippet__string">&#34;压缩包中文件名疑似不安全，详情： &#34;</span>+ entryName);</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">throw</span> <span class="code-snippet__keyword">new</span> IOException(<span class="code-snippet__string">&#34;压缩包中文件名疑似不安全，详情： &#34;</span>+ entryName);</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">        InputStream <span class="code-snippet__keyword">in</span> = zip.getInputStream(entry);</span></code><code><span class="code-snippet_outer">        String outPath = Paths.<span class="code-snippet__keyword">get</span>(descDir, entryName).toString().replaceAll(<span class="code-snippet__string">&#34;\\*&#34;</span>, <span class="code-snippet__string">&#34;/&#34;</span>);</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__comment">// 判断路径是否存在,不存在则创建文件路径</span></span></code><code><span class="code-snippet_outer">        File file = <span class="code-snippet__keyword">new</span> File(outPath.substring(<span class="code-snippet__number">0</span>, outPath.lastIndexOf(<span class="code-snippet__string">&#39;/&#39;</span>)));</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span> (!file.exists()) {</span></code><code><span class="code-snippet_outer">            file.mkdirs();</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__comment">// 判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压</span></span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">if</span> (<span class="code-snippet__keyword">new</span> File(outPath).isDirectory()) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">continue</span>;</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer"><br/></span></code><code><span class="code-snippet_outer">        OutputStream <span class="code-snippet__keyword">out</span> = <span class="code-snippet__keyword">new</span> FileOutputStream(outPath);</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">byte</span>[] buf1 = <span class="code-snippet__keyword">new</span> <span class="code-snippet__keyword">byte</span>[<span class="code-snippet__number">1024</span>];</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">int</span> len;</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">while</span> ((len = <span class="code-snippet__keyword">in</span>.read(buf1)) &gt; <span class="code-snippet__number">0</span>) {</span></code><code><span class="code-snippet_outer">            <span class="code-snippet__keyword">out</span>.write(buf1, <span class="code-snippet__number">0</span>, len);</span></code><code><span class="code-snippet_outer">        }</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">in</span>.close();</span></code><code><span class="code-snippet_outer">        <span class="code-snippet__keyword">out</span>.close();</span></code><code><span class="code-snippet_outer">    }</span></code><code><span class="code-snippet_outer">    zip.close();</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><p><span style="letter-spacing: 0.578px;">修复方式2，</span>代码直接使用java.util.zip，未使用第三方组件</p><p>另外Hutool也提供解压方法，Hutool在4.1.12之前的版本存在zip slip漏洞，这点需要注意。</p><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484323">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=700656d1&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484323%26idx%3D1%26sn%3D037c15e26149b5bd6c395dbdca61d08e%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 04 Nov 2024 19:23:00 +0800</pubDate>
    </item>
    <item>
      <title>AIGC安全评估</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484319&amp;idx=1&amp;sn=60d717de7363adf9877732f924f165c6</link>
      <description>AIGC安全评估</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-11-01 15:32</span> <span style="display: inline-block;">北京</span>
</p>

<p>AIGC安全评估</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=9c9332f8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo47HRMPGZGqmXe2LQdiax6rMJkJ71BFDJhuTNeOPWpvUUnde76ydShI5VrMBiapM2kqoUdS6WpZc2bQ%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section data-tool="markdown编辑器" data-website="https://markdown.com.cn/editor" style="font-size: 16px;color: black;padding: 25px 30px;line-height: 1.6;letter-spacing: 0px;word-break: break-word;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;margin-top: -10px;"><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>背景介绍</span><span></span></h2><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000668" data-ratio="0.5619625695498229" data-s="300,640" style="" data-type="png" data-w="1977" src="https://wechat2rss.xlab.app/img-proxy/?k=883c0361&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo47HRMPGZGqmXe2LQdiax6rM1EM3bIquuzAe8dus1aVYGo1ZMZo15Wzp2yRib8Va8Cxiae4rPBhr1ibMQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span></span></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">最近有朋友问到AIGC安全评估的一些问题，最近做了一些调研，因为博主视野有限，文章不足之处请谅解。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">根据国家网信办、国家发展改革委、教育部、科技部、工业和信息化部、公安部、广电总局七部门的要求，提供具有舆论属性或者社会动员能力的生成式人工智能服务的，应当按照国家有关规定开展安全评估。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>评估政策依据</span><span></span></h2><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>基本法规</span><span style="display: none;"></span></h3><ol data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《中华人民共和国网络安全法》</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《中华人民共和国科学技术进步法》</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《中华人民共和国数据安全法》</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《中华人民共和国个人信息保护法》</section></li></ol><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>AIGC相关法规</span><span style="display: none;"></span></h3><ol data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《互联网信息服务算法推荐管理规定》</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《互联网信息服务深度合成管理规定》</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《具有舆论属性或社会动员能力的互联网信息服务安全评估规定》</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《生成式人工智能服务安全基本要求》</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《信息安全技术 生成式人工智能人工标注安全规范》</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《信息安全技术 生成式人工智能预训练和优化训练数据安全规范》</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《生成式人工智能（大语言模型）上线备案表》</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">《生成式人工智能服务管理暂行办法》</section></li></ol><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>评估内容</span><span></span></h2><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>语料安全</span><span style="display: none;"></span></h3><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span><span>语料来源管理</span><span style="display: none;"></span></h4><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">建立完整的语料获取审核机制</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">确保语料来源合法合规</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">实施多源语料协同管理</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">建立语料溯源机制</section></li></ul><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span><span>语料安全</span><span style="display: none;"></span></h4><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><p style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;color: black;"><strong>内容过滤机制</strong></p></section></li><ul style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;color: black;list-style-type: square;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">建立多层次过滤体系</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">实时监控和更新过滤规则</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">保留过滤记录</section></li></ul><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><p style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;color: black;"><strong>知识产权保护</strong></p></section></li><ul style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;color: black;list-style-type: square;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">建立版权检测机制</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">实施著作权审核</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">建立授权使用追踪系统</section></li></ul><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><p style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;color: black;"><strong>个人信息保护</strong></p></section></li><ul style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;color: black;list-style-type: square;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">实施个人信息脱敏</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">建立隐私保护机制</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">确保数据使用合规</section></li></ul></ul><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span><span>语料标注</span><span style="display: none;"></span></h4><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><p style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;color: black;"><strong>标注人员要求</strong></p></section></li><ul style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;color: black;list-style-type: square;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">专业资质认证</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">保密协议签署</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">定期培训考核</section></li></ul><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><p style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;color: black;"><strong>标注规则制定</strong></p></section></li><ul style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;color: black;list-style-type: square;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">建立统一标准</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">实施质量控制</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">定期更新优化</section></li></ul><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><p style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;color: black;"><strong>标注准确性保障</strong></p></section></li><ul style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;color: black;list-style-type: square;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">多重交叉验证</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">定期抽检复核</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">建立纠错机制</section></li></ul></ul><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>模型安全</span><span style="display: none;"></span></h3><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span><span>模型生成内容安全</span><span style="display: none;"></span></h4><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">在训练过程中，应将生成内容安全性作为评价生成结果优劣的主要考虑指标之一；</p><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">在每次对话中，应对使用者输入信息进行安全性检测，引导模型生成积极正向内容；</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">对提供服务过程中以及定期检测时发现的安全问题，应通过针对性的指令微调、强化学习等方式优化模
型。</section></li></ul><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span><span>服务透明度</span><span style="display: none;"></span></h4><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">以交互界面提供服务的，应在网站首页等显著位置向社会公开以下信息：服务适用的人群、场合、用途、服务的局限性等信息。</p><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span><span>生成内容准确性</span><span style="display: none;"></span></h4><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">生成内容应准确响应使用者输入意图，所包含的数据及表述应符合科学常识或主流认知、不含错误内容。</section></li></ul><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span><span>生成内容可靠性</span><span style="display: none;"></span></h4><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">服务按照使用者指令给出的回复，应格式框架合理、有效内容含量高，应能够有效帮助使用者解答问题。</section></li></ul><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>安全措施</span><span style="display: none;"></span></h3><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">明确适用范围限制,模型适用人群、场合、用途</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">建立个人信息保护机制，完善个人信息处理</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">实施数据使用管理，合法合规收集使用者输入信息用于训练</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">建立内容标识系统，对图片、视频等内容标识</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">接受公众或使用者投诉举报</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">向使用者提供生成内容</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">建立升级维护体系，方便模型更新、升级</section></li></ul><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>安全评估</span><span style="display: none;"></span></h3><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span><span>训练语料</span><span style="display: none;"></span></h4><p style="text-align: center;"><br/></p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000665" data-ratio="0.34609375" data-s="300,640" style="" data-type="png" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=241c15c3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo47HRMPGZGqmXe2LQdiax6rMj7Eyvf3koSYKeGHgibQGKYuLIrR7ic5IfY8jQX5UEBsC9aoKFoeYyCDQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;"><span style="color: rgb(136, 136, 136);font-size: 14px;letter-spacing: 0px;">训练语料</span></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">首先，训练语料通过四个主要的关键词库进行筛选，这些关键词库分别涵盖了意识形态和国家主权、个人隐私及名誉权、知识产权和商业秘密、以及民族、信仰和性别等方面的关键概念。通过关键词匹配，识别出包含敏感信息的文本片段，然后对这些片段进行进一步评估，计算其符合安全标准的合格率，以此确保训练数据的安全性和合规性。</p><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span><span>生成内容</span><span style="display: none;"></span></h4><p><span><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000666" data-ratio="0.59296875" data-s="300,640" style="color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-size: 16px;letter-spacing: normal;text-align: center;" data-type="png" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=0dfdc11f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo47HRMPGZGqmXe2LQdiax6rM9PkbbzVcEu8GZ0bdVoBJCreaEkzaWWxhSsUAhuLNh5XpGQm46lx84A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">生成内容评估</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">首先，通过单一问题、诱导问题和伪装问题等方法生成内容，并通过AIGC API接口提交给系统。接着，系统会根据意识形态、国家主权、个人隐私、肖像权、名誉权、知识产权、商业秘密、民族、信仰、性别等相关关键词库进行内容审查。最后，系统将生成的内容与关键词进行比对，得出涉及关键词的生成内容，并计算合格率。这一流程旨在确保AIGC生成的内容符合安全标准，避免敏感信息的泄露和不当言论的传播。</p><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span><span>问题拒答</span><span style="display: none;"></span></h4><p><span><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000667" data-ratio="0.31022222222222223" data-s="300,640" style="color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-size: 16px;letter-spacing: normal;text-align: center;" data-type="png" data-w="1125" src="https://wechat2rss.xlab.app/img-proxy/?k=7de994ff&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo47HRMPGZGqmXe2LQdiax6rMf14TZwFnDweAhObKicj04xKAL6kZUo4JpWkGBVmEhzsKaiar6HAnFCrQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">问题拒答</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">应拒答测试题和非拒答测试题被输入到AIGC的API接口中。经过处理后，输出结果会被用来计算模型的拒答率。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>参考</span><span></span></h2><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><a href="https://www.lexology.com/library/detail.aspx?g=a54d9239-1c18-4416-a0be-fc0b77fd20e4" target="_blank">https://www.lexology.com/library/detail.aspx?g=a54d9239-1c18-4416-a0be-fc0b77fd20e4</a></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><a href="https://www.aliyun.com/activity/security/secAIGC" target="_blank">https://www.aliyun.com/activity/security/secAIGC</a></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><a href="https://www.aigclab.cn/algorithmEvaluation" target="_blank">https://www.aigclab.cn/algorithmEvaluation</a></section></li></ul></section><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484319">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=d974f88b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484319%26idx%3D1%26sn%3D60d717de7363adf9877732f924f165c6%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 01 Nov 2024 15:32:00 +0800</pubDate>
    </item>
    <item>
      <title>Uber—大型单体仓库的可持续部署 翻译稿</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484309&amp;idx=1&amp;sn=eaccc0351ef7a818f147d211870563b5</link>
      <description>Uber—大型单体仓库的可持续部署 翻译稿</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-08-30 16:32</span> <span style="display: inline-block;">北京</span>
</p>

<p>Uber—大型单体仓库的可持续部署 翻译稿</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=71bb6edc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo43ibFrUFf2PmG7W5cZzJRaybBdPjDR8lQdZrkjQJB0SxvOaiaWkCcMKPwqmDIljibxS0ck01Qxibfctg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000658" data-ratio="0.5953703703703703" data-s="300,640" style="" data-type="png" data-w="2160" src="https://wechat2rss.xlab.app/img-proxy/?k=4f771c75&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo43ibFrUFf2PmG7W5cZzJRayMzwIv8GSxric9jlPVibGibVA1vzwkGtmBocXcc2rOAFq80DtLH9OticICA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="4" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">说明：文章来源uber 博客，笔者日常对DevSecOps相关内容进行研究和学习，今天看到这篇文章，忍不住与各位分享Uber在CD上面的建设经验，文章内容仅供参考，本文只是译稿，如果翻译不妥或者错误，请斧正。</span></p><p data-line="6" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">内容原文地址：</span><span style="color: rgb(0, 0, 0);"><a href="https://www.uber.com/en-HK/blog/continuous-deployment/" target="_blank">https://www.uber.com/en-HK/blog/continuous-deployment/</a></span></p><p data-line="8" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">译文如下：</span></p><h1 data-line="10" dir="auto" style=" font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 2em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>介绍</strong></span></h1><p data-line="12" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">Uber的业务依赖于众多微服务。确保对所有这些服务的更改能够安全、及时地部署至关重要。通过利用持续部署自动化这一过程，我们确保新功能、库更新和安全补丁都能及时交付至生产环境，从而提高了服务业务的整体代码质量。</span></p><p data-line="14" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">在本文中，我们将分享如何重新构想Uber的微服务持续部署，以改善部署自动化和微服务管理的用户体验，同时应对处理大规模单一代码库及其不断增加的提交量所带来的一些特殊挑战。</span></p><h1 data-line="16" dir="auto" style=" font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 2em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>背景</strong></span></h1><p data-line="18" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">在过去几年里，我们在成熟工具方面投入了大量资源，以适应业务的持续增长，并减少生产事件。随着代码输出的稳步增长，超过50%的生产事件直接由代码更改引起，我们能够在业务扩展过程中实现持续、安全的部署而不妨碍生产力，对于Uber的成功至关重要。</span></p><p data-line="20" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">业界普遍认为[1][2]，代码的持续部署（CD）本质上降低了引入错误或缺陷的风险。这不仅仅是因为CD本身确保了及时修补漏洞和缺陷，更因为在工程师获得足够信心让机器自动部署代码之前，必须建立起最佳实践、文化和纪律。在启用CD之前，工程师通常会确保采用良好的工程实践，例如：</span></p><ul data-line="22" class="list-paddingleft-1" dir="auto" style=" margin-bottom: 0.7em; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">代码审查</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">持续集成（单元测试、集成测试和负载测试）</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">监测（持续监控和警报，自动回滚机制）</span></p></li></ul><p data-line="26" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">什么构成良好的代码审查、足够的单元/集成测试覆盖等，是一个有争议的话题，超出了本文的范围。</span></p><p data-line="28" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">Uber拥有广泛的工程和开发工具平台（如Ballast、SLATE），支持工程师采用良好的实践。然而，历史上，存在多种部署流程，公司内部标准或最佳实践有限。随着我们最近将所有微服务迁移到内部云平台Up，我们发现了改善这一状况的机会。</span></p><p data-line="30" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">在2022年启动该项目时，我们大约有：</span></p><ul data-line="32" class="list-paddingleft-1" dir="auto" style=" margin-bottom: 0.7em; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">4500个微服务分布在3个单一代码库（Go、Java和Web）</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">每周5600次提交，许多提交影响超过一个服务</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">每周7000次生产部署</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">34%为手动触发（完全没有使用CD）</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">7%的服务使用CD自动部署到生产环境</span></p></li></ul><h2 data-line="38" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>Uber的CD现状</strong></span></h2><p data-line="40" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">CD在Uber并不是一个新学科。历史上，Uber的CD系统作为一个独立且单独的系统运行，采用了选择加入的方式，留给各个团队自行配置。</span></p><p data-line="42" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">它具有高度的灵活性，并提供了在基于YAML的DSL中构建完全自定义CD管道的能力。由于这种灵活性，我们不可避免地产生了超过100种独特的管道模板用于部署微服务，除了运行一系列动作外，没有对测试、监控或其他操作进行强制执行。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000651" data-ratio="0.105" data-s="300,640" style="" data-type="png" data-w="1600" src="https://wechat2rss.xlab.app/img-proxy/?k=043bd765&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo43ibFrUFf2PmG7W5cZzJRayxeeUzAj6rUHv9NlFl5ZMEKoUks0GDbkmib5vnVhay1dOKzuYvcysF4Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="46" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>图1：Uber旧版CD系统中的管道操作</strong></span></p><p data-line="48" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">因此，CD管道缺乏标准化阻碍了我们在全公司范围内提高部署安全性和可靠性的能力，这在Uber这样规模的微服务管理中风险巨大，因为每天都有大量更改投入生产。</span></p><p data-line="50" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">除此之外，拥有两个独立的部署系统本身就是令人困惑和不理想的。因此，鉴于最近迁移到Up平台以及其成熟性和采用程度，我们决定逐步淘汰现有的CD系统，转而采用新的集成CD体验：Up CD。</span></p><h2 data-line="52" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>目标</strong></span></h2><p data-line="54" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">我们从零开始构建了一个CD系统，旨在以可重复和安全的方式持续应用更改，我们希望通过自动化部署来防止人为错误，整合现有的测试工具，并确保在更改应用过程中监控回归。</span></p><p data-line="56" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">为此，Up CD 提供了：</span></p><ul data-line="58" class="list-paddingleft-1" dir="auto" style=" margin-bottom: 0.7em; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">标准化和自动化的生产部署</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">以安全性为核心，与Uber的可观察性和测试堆栈紧密集成</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">与Up平台紧密集成的CD体验，并默认启用</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">针对Uber工程师需求量身定制的UI/UX，支持基于单一代码库的开发</span></p></li></ul><p data-line="63" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">通过构建具备这些功能的CD系统，我们期望能够提高自动化的采用率，使更多服务能够自动部署到生产环境。此外，至关重要的是，在实现这一目标的同时，我们需要降低（或至少不增加）生产环境中的事件发生率。</span></p><h1 data-line="65" dir="auto" style=" font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 2em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>设计自动化</strong></span></h1><p data-line="67" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">为了实现我们的愿景，我们设定了设计最简化部署体验的目标。该系统应安全地推进每个服务的生产环境，以便在Git代码库的主分支上运行包含所有相关更改的构建。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000653" data-ratio="0.813125" data-s="300,640" style="" data-type="png" data-w="1600" src="https://wechat2rss.xlab.app/img-proxy/?k=ec1cba31&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo43ibFrUFf2PmG7W5cZzJRayhOR8iaSGlDiboxoWWQW4jcKCib8EoIUXz66Ap7gAGTfOxTkCFHibibg3ZTg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="71" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>图2：新CD系统的架构</strong></span></p><p data-line="73" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">在以下部分，我们将突出我们重新设计的CD系统中的一些重要原则。</span></p><h2 data-line="75" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>简单的核心数据结构</strong></span></h2><p data-line="77" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">正如Uber许多博客文章中所述，我们面临的一个挑战是单一代码库的规模。例如，到2024年时，我们的Go单一代码库每天会有超过1000次提交，并且是近3000个微服务的源，这些微服务都可能受到单次提交的影响。显然，为每次提交构建和部署库中的每个服务将极其低效。更重要的是，这样做也没有太大意义，因为大多数提交只会影响一小部分服务。通过代码库的Bazel图，可以计算出哪些服务的代码二进制文件实际受到了提交的影响。</span></p><p data-line="79" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">考虑到这一点，我们确定虽然我们的CD系统必须理解Git代码库的整个历史，以确保提交按正确的顺序部署，但对于单个服务，我们可以并且应该大幅度缩小范围。通过将每个服务限定在实际更改了代码二进制文件的提交子集上，服务所有者也能更轻松地识别他们的服务在每次部署中实际采纳了哪些更改，而不必深入到庞大的单一代码库的Git日志中。</span></p><p data-line="81" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">这使我们能够采用相对简单的数据结构，每个服务都会与历史中所有实际与之关联的提交相链接。如下图所示：</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000652" data-ratio="0.40125" data-s="300,640" style="" data-type="png" data-w="1600" src="https://wechat2rss.xlab.app/img-proxy/?k=405b9c89&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo43ibFrUFf2PmG7W5cZzJRay6WFg6AYXCnNBv1ROy0Uftskc5UoBsVibUmNu3Shn82o3o2Nicp0IAM1g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="85" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>图3：服务与提交历史的映射</strong></span></p><h2 data-line="87" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>所有服务的统一提交流模型</strong></span></h2><p data-line="89" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">为了实现这一点，我们决定利用Uber的Kafka消费者代理来消费一个Kafka主题，该主题会在提交推送到Git代码库时发出事件。每当发生这种情况时，会进行一个分析阶段，以将提交组织成适当的结构，并确定受提交影响（更改）的服务集合：</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000655" data-ratio="0.23" data-s="300,640" style="" data-type="png" data-w="1600" src="https://wechat2rss.xlab.app/img-proxy/?k=661fe81b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo43ibFrUFf2PmG7W5cZzJRayphvaThvQyRPEXRicqh8VkYmF901VP7iabfYVkJvjVicvSBBUUqtPS2HBg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="93" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>图4：统一的提交流程，从推送到服务处理</strong></span></p><p data-line="95" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">显然，对于每个受提交影响的服务，第一步是将其构建成可部署的容器镜像。随后，我们允许工程师自定义一系列与其服务相关的部署阶段。对于一个任意服务，单个提交的流程可能会如下图所示：</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000654" data-ratio="0.07875" data-s="300,640" style="" data-type="png" data-w="1600" src="https://wechat2rss.xlab.app/img-proxy/?k=3c552657&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo43ibFrUFf2PmG7W5cZzJRay0RibMNzSJWNEY0ajHeJkwTymujeZmkWgByeKJPgS3wRAdeRyTXWUqcA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="99" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>图5：统一的提交流程，从构建到部署</strong></span></p><p data-line="101" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">根据我们对之前高度可定制CD系统的经验，我们知道流程必须是有明确意见的。因此，我们决定各个阶段本身必须保持相对简单。配置选项主要限于门控条件，用户可以结合各种预定义的选项来表达在部署阶段开始之前必须满足的条件。这些条件可能包括：</span></p><ul data-line="103" class="list-paddingleft-1" dir="auto" style=" margin-bottom: 0.7em; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">提交是否在上一阶段中停留了所需的时间？</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">是否在用户定义的部署时间窗口内（例如，在团队的工作时间内）？</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">是否有其他操作正在为该服务运行（例如，手动触发的部署或自动水平扩展）？</span></p></li><li style="  color: rgb(0, 0, 0); "><p><span style="color: rgb(0, 0, 0);">是否有任何触发服务警报的情况，这会导致部署回滚？</span></p></li></ul><p data-line="108" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">每个阶段独立于其他阶段运行。对于每个阶段，最新的提交如果成功完成了上一阶段，并满足所有门控条件（如有），就会立即推进到下一个阶段。</span></p><p data-line="110" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">为了实现这些机制，我们利用了Cadence，这是一个由Uber开发的开源工作流编排引擎。实现按需启动的构建和部署工作流非常简单。此外，我们将门控机制实现为工作流。每个部署阶段都有自己的门控工作流，该工作流定期运行以检查是否有提交通过了上一阶段。如果是这样，它会考虑门控条件，以确定是否现在应该触发部署。</span></p><h2 data-line="112" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>直观的用户体验</strong></span></h2><p data-line="114" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">为了确保我们设计的产品符合需求，我们进行了用户研究和调研，以了解工程师们在考虑现有工具和单一代码库规模时，实际需要什么样的CD系统。基于此，我们围绕服务的提交历史设计了用户体验，工程师可以轻松查看影响其服务的所有提交的完整列表，以及服务的当前状态。</span></p><p data-line="116" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">鉴于单一代码库的提交量，即使是自动部署，也不可能（也不应该）将每个影响服务的提交都部署到生产阶段。为了简化对生产流量或其他被认为“有趣”的提交的理解，我们合并了中间提交，以提供更清晰的视图，解决了工程师的一个关键痛点。这意味着，如果发现给定生产部署存在问题，可以很容易地展开到之前的部署，以查看该部署对服务所做的确切更改。这个视图如何由服务级别的提交历史数据结构支撑应该是立刻显而易见的。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000657" data-ratio="0.70875" data-s="300,640" style="" data-type="png" data-w="1600" src="https://wechat2rss.xlab.app/img-proxy/?k=13e9d705&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo43ibFrUFf2PmG7W5cZzJRayicP0NaEibCjibIvxwNaONCHl0j0HEKGaQkBTmfA4vTZl2HJg33HRl3dRA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="120" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>图6：提交历史的折叠视图，仅显示对服务当前状态相关的提交</strong></span></p><p data-line="122" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">当前世界状态通过提交历史左侧的“泳道”被简洁地呈现。每条泳道显示了在不同服务环境中部署的代码状态和历史。通过悬停在泳道上，可以获取有关该环境部署状态的详细信息。见下图：</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000656" data-ratio="0.45875" data-s="300,640" style="" data-type="png" data-w="1600" src="https://wechat2rss.xlab.app/img-proxy/?k=ad84fe4f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo43ibFrUFf2PmG7W5cZzJRayDnic1pn2ahw2L7Qr4BOxol3ibHn7lOYMgEWic1MJBr6CTDicpD217Bc3uw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="126" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>图8：特定提交的历史记录，接着是当前状态和计划中的部署操作</strong></span></p><h2 data-line="128" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>紧密耦合</strong></span></h2><p data-line="130" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">为了提高对自动化的信任和增加其采纳率，我们明确意识到必须提供统一且简化的部署体验；仅仅在部署系统上叠加一个独立的CD编排层是不够的。</span></p><p data-line="132" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">我们构建的新CD系统不仅要独立运行，还要紧密耦合于Up，并关注其他操作，确保其行动不会让用户感到意外。例如，这意味着如果工程师在CD管道之外手动启动了生产环境的部署，那么CD用户界面将把这个部署纳入服务的提交历史中。此外，系统的内部状态会被更新，反映出提交（及其之前的任何内容）已经部署到目标环境中。</span></p><p data-line="134" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">如果工程师构建了一个与服务不完全相关的提交（例如，从主分支的HEAD构建）并将其部署到服务中，那么这个提交也会被添加到内部状态中，从而确保CD视图始终能够正确表示实际情况，而不会误导用户，使他们能够正确理解服务的状态。</span></p><p data-line="136" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">这是一个重要的战略决策，因为它允许从手动部署逐步过渡到CD，而不是采取全有或全无的方法。这也意味着每当工程师采取某些手动操作，例如缓解事故时，CD系统能够自动做出正确的响应（通常是避免做任何操作或暂停），根据情况进行处理。</span></p><h1 data-line="138" dir="auto" style=" font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 2em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>发布后的观测</strong></span></h1><p data-line="140" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">在这一部分，我们重点介绍了Up CD发布后的效果。</span></p><h2 data-line="142" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>自动化采纳率的提高</strong></span></h2><p data-line="144" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">在内部发布我们的CD体验后，我们开始看到行为上的显著变化。正如我们所希望的那样，工程师们开始接受它，我们看到了立即的采纳，且这种采纳率不断上升：具体来说，我们看到自动部署的服务数量在12个月内从不到10%增加到近70%。</span></p><p data-line="146" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">随着服务部署的频率增加，归因于特定提交的错误也变得更容易，因为每次部署的提交数量减少了。</span></p><h2 data-line="148" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>生产事故率未增加</strong></span></h2><p data-line="150" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">尽管部署频率提高，我们高兴地发现生产事故的整体发生率并没有按比例增加。实际上，在CD采纳率上升的同一12个月期间，我们看到每1000次代码更改报告的事故数量减少了超过50%。</span></p><p data-line="152" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">由于在实施过程中还有其他努力（将在另一篇博客文章中详细介绍），我们不能声称这是因果关系。然而，很明显，我们确实成功实现了让工程师自动将服务部署到生产环境中，而不会增加事故的频率或严重性。</span></p><h2 data-line="154" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>新挑战</strong></span></h2><p data-line="156" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">然而，我们也开始看到新的挑战。特别是，我们发现对许多服务共享的单一代码库进行更改的风险（例如，更改一个所有服务共享的公共RPC库）突然增加，因为这些更改会更快地部署到所有受影响的服务中（而且这些部署可能会并行发生）。这意味着，如果这样的更改引入了一个显著的错误，而在CI过程中没有被捕捉到，自动化可能会同时破坏许多服务。</span></p><p data-line="158" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">通常，一些服务会有机制来检测问题并自动回滚部署，但不太可能每个服务都能自动检测到问题。</span></p><p data-line="160" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">因此，我们引入了跨服务利用提交信号的功能，以便如果某些服务未能成功部署，提交将被视为有问题。</span></p><p data-line="162" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">为了获得尽可能明确的信号，我们根据内部服务分级对有风险的跨领域提交进行分阶段部署。最初，Up CD将其部署到我们最不重要的服务组中，当这些服务中的足够百分比成功部署后，才会推进到下一个级别。如果大量服务开始出现问题，部署会被停止，并通知提交作者可能存在的问题。</span></p><p data-line="164" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">通过这种部署策略，我们将此类有风险更改对客户的影响降到可接受的水平，并且同样重要的是，通过为特别有风险的更改提供额外的保护措施，增加了对自动化生产部署的信任。</span></p><h1 data-line="166" dir="auto" style=" font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 2em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>关键指标</strong></span></h1><p data-line="168" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">为了量化该项目的结果，我们总结了项目期间一些关键指标的变化，见下表：</span></p><table data-line="170" dir="auto"><thead data-line="170" dir="auto" style=""><tr data-line="170" dir="auto" style=""><th style="text-align: left;border-color: rgba(255, 255, 255, 0.69);"><span style="color: rgb(0, 0, 0);"><strong>Metric</strong></span></th><th style="text-align: left;border-color: rgba(255, 255, 255, 0.69);"><span style="color: rgb(0, 0, 0);"><strong>Before Up CD (primo 2022)</strong></span></th><th style="text-align: left;border-color: rgba(255, 255, 255, 0.69);"><span style="color: rgb(0, 0, 0);"><strong>Post Up CD (March 2024)</strong></span></th></tr></thead><tbody data-line="172" dir="auto" style=""><tr data-line="172" dir="auto" style=""><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);"># services</span></td><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">4,500</span></td><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">5,000</span></td></tr><tr data-line="173" dir="auto" style=""><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">Monorepo commits / week</span></td><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">5,600</span></td><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">11,000</span></td></tr><tr data-line="174" dir="auto" style=""><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">Production deployments / week</span></td><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">7,000</span></td><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">50,000</span></td></tr><tr data-line="175" dir="auto" style=""><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">% of deployments CD orchestrated (partially or fully to production)</span></td><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">66%</span></td><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">95%</span></td></tr><tr data-line="176" dir="auto" style=""><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">% of services fully automated to production</span></td><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">7%</span></td><td style="border-color: rgba(255, 255, 255, 0.18);"><span style="color: rgb(0, 0, 0);">65%</span></td></tr></tbody></table><h1 data-line="178" dir="auto" style=" font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 2em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(255, 255, 255, 0.18);border-top-color: rgba(255, 255, 255, 0.18);border-right-color: rgba(255, 255, 255, 0.18);border-left-color: rgba(255, 255, 255, 0.18); color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);"><strong>结论</strong></span></h1><p data-line="180" dir="auto" style=" margin-bottom: 16px; color: rgb(204, 204, 204);font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap; "><span style="color: rgb(0, 0, 0);">正如我们在前述部分详细说明的那样，我们重新设计的CD系统——Up CD，体现了我们在部署方法学中的战略转变，即将自动化作为核心原则。我们认为，这一转变对以更高的安全性和效率管理我们的复杂性和规模至关重要，将将代码交付到生产环境的负担从工程师转移到了自动化系统上。</span></p><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484309">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=9745bde3&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484309%26idx%3D1%26sn%3Deaccc0351ef7a818f147d211870563b5%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 30 Aug 2024 16:32:00 +0800</pubDate>
    </item>
    <item>
      <title>软件供应链健康度评估之scorecard</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484297&amp;idx=1&amp;sn=ad1ecf4d2588417b575bdc44ee8aee26</link>
      <description>Scorecard是一个自动化工具，用于评估开源项目的健康度。</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-08-06 08:00</span> <span style="display: inline-block;">北京</span>
</p>

<p>Scorecard是一个自动化工具，用于评估开源项目的健康度。</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=3a8523f5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN9hlXpyzPAZqKEvfzSWIBs2moYq3UrJdsMMJGcFPDnMhtaac5Wal8libg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section data-tool="markdown编辑器" data-website="https://markdown.com.cn/editor" style="font-size: 16px;color: black;padding: 25px 30px;line-height: 1.6;letter-spacing: 0px;word-break: break-word;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;margin-top: -10px;"><h1 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"><span style="display: none;"></span>Scorecard介绍</h1><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">Scorecard是一个自动化工具，评估开源项目的健康度。Scorecard通过评估与开源项目安全性相关的一系列指标项，每项10分。可以使用这些评分来了解需要改进的具体领域，以增强项目的安全性。同时，还可以评估依赖项带来的安全风险，如接受这些风险、评估替代方案或与维护者合作进行改进。</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000646" data-ratio="0.385625" data-s="300,640" style="" data-type="png" data-w="1600" src="https://wechat2rss.xlab.app/img-proxy/?k=401b59e8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN9SBThO6A39Tu7wMuCZhArn1btpLjZrh7J2AF1vfOy9CTRTHY8MspnOA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><span style="letter-spacing: 0px;">注意：</span><span style="letter-spacing: 0px;">由于scorecard项目不断迭代更新，检测规则也在变化，本文有效时间为：</span><span style="letter-spacing: 0px;">2024年08月06日前后</span></p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span>支持Scorecard项目</h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">Scorecard已在数千个项目上运行，以监控和跟踪安全指标。主要使用Scorecard的项目包括：</p><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">Tensorflow</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">Angular</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">Flutter</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">sos.dev</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">deps.dev</section></li></ul><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000642" data-ratio="1.3980699638118215" data-s="300,640" style="" data-type="png" data-w="829" src="https://wechat2rss.xlab.app/img-proxy/?k=1c49523c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN9uIeURGKv5S4lCm4HibHLorjNlMw2EsfdR9YxhobBYnEOfCnepH3sC6w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">deps fastjson results</figcaption></figure><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span>查看项目的评分</h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">要查看Scorecard定期扫描的项目评分，请访问webviewer，并替换占位符文本为平台、用户/组织和存储库名称：<a href="https://scorecard.dev/viewer/?uri=" target="_blank">https://scorecard.dev/viewer/?uri=</a>&lt;github_or_gitlab&gt;.com/&lt;user_name_or_org&gt;/&lt;repository_name&gt;</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">例如：</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><a href="https://scorecard.dev/viewer/?uri=github.com/alibaba/fastjson" target="_blank">https://scorecard.dev/viewer/?uri=github.com/alibaba/fastjson</a></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000643" data-ratio="1.174721189591078" data-s="300,640" style="" data-type="png" data-w="1076" src="https://wechat2rss.xlab.app/img-proxy/?k=e37f8579&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN9xSRkHE39KNhia4wkUqsUMOunurnYfCOcwj8HwAdGVkBeLCkFq2ByZDw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">fastjson score</figcaption></figure><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span>公开数据</h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">每周对被认为是最关键的100万个开源项目进行Scorecard扫描，并将结果发布在BigQuery公开数据集中。最新的结果可在BigQuery视图openssf:scorecardcron.scorecard-v2_latest中查看。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">可以使用BigQuery Explorer查询数据，导航至Add Data &gt; Star a project by name &gt; &#39;openssf&#39;。例如，可能会对项目评分随时间的变化感兴趣：</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000644" data-ratio="0.45925925925925926" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=6805eda2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN9UbKtagVTId7q5UY4pH7EVAJGy8zrJfals4mgSFqeIeGqRaSA7BH6fA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">bigquery data query</figcaption></figure><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">SELECT date, score FROM `openssf.scorecardcron.scorecard-v2` WHERE repo.name=&#34;github.com/alibaba/fastjson&#34; ORDER BY date ASC</span></code></pre></section><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000645" data-ratio="0.7685185185185185" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=f5971046&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN9wT9Sj1Dn7ZAuJqa5ozEOSt1sUxWhURSiaQmLrPeZ8gZqzzFcYzH3o0g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">bigquery data query demo</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">还可以使用bq工具将最新结果提取到Google Cloud Storage中：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;"># 获取最新的PARTITION_ID</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">bq query --nouse_legacy_sql &#39;SELECT partition_id FROM openssf.scorecardcron.INFORMATION_SCHEMA.PARTITIONS WHERE table_name=&#34;scorecard-v2&#34; AND partition_id!=&#34;__NULL__&#34; ORDER BY partition_id DESC LIMIT 1&#39;</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer"><br/></span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;"># 提取到GCS</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">bq extract --destination_format=NEWLINE_DELIMITED_JSON &#39;openssf:scorecardcron.scorecard-v2$&lt;partition_id&gt;&#39; gs://bucket-name/filename-*.json</span></code></pre></section><h1 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"><span style="display: none;"></span>Scorecard 使用</h1><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span>Scorecard GitHub Action</h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">使用Scorecard GitHub Action是最简单的方法，在拥有的GitHub项目上运行Scorecard。该Action在任何存储库更改时运行，并在维护者可以在存储库的安全标签中查看警报。有关更多信息，请参阅Scorecard GitHub Action安装说明。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span>Scorecard命令行</h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">要在不拥有的项目上运行Scorecard扫描，请使用命令行界面安装选项。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span>安装<span style="display: none;"></span></h3><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span>Docker<span style="display: none;"></span></h4><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">scorecard可以作为Docker容器使用：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">docker pull gcr.io/openssf/scorecard:stable</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">要使用特定的scorecard版本（例如v3.2.1），请运行：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">docker pull gcr.io/openssf/scorecard:v3.2.1</span></code></pre></section><h4 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 18px;"><span style="display: none;"></span>本地安装<span style="display: none;"></span></h4><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">自行编译，或者直接从release下载对应的二进制文件即可</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">make build</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">使用包管理器</p><table data-tool="markdown.com.cn编辑器"><thead><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><th style="border-top-width: 1px;border-color: rgb(204, 204, 204);text-align: left;background-color: rgb(240, 240, 240);">包管理器</th><th style="border-top-width: 1px;border-color: rgb(204, 204, 204);text-align: left;background-color: rgb(240, 240, 240);">支持的分发版</th><th style="border-top-width: 1px;border-color: rgb(204, 204, 204);text-align: left;background-color: rgb(240, 240, 240);">命令</th></tr></thead><tbody style="border-width: 0px;border-style: initial;border-color: initial;"><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="border-color: rgb(204, 204, 204);">Nix</td><td style="border-color: rgb(204, 204, 204);">NixOS</td><td style="border-color: rgb(204, 204, 204);">nix-shell -p nixpkgs.scorecard</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="border-color: rgb(204, 204, 204);">AUR</td><td style="border-color: rgb(204, 204, 204);">Arch Linux</td><td style="border-color: rgb(204, 204, 204);">yaourt install scorecard</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="border-color: rgb(204, 204, 204);">Homebrew</td><td style="border-color: rgb(204, 204, 204);">macOS或Linux</td><td style="border-color: rgb(204, 204, 204);">brew install scorecard</td></tr></tbody></table><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span>获取github 授权 token<span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">GitHub对未经认证的请求实施api速率限制。为了避免这些限制，必须在运行Scorecard之前对的请求进行认证。有两种方法可以认证的请求：创建GitHub个人访问令牌或创建GitHub App安装。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">创建经典的GitHub个人访问令牌。创建个人访问令牌时，建议选择public_repo范围。</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">export GITHUB_AUTH_TOKEN=&lt;your access token&gt;</span></code></pre></section><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span>运行<span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">若要在特定存储库上运行scorecard：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">scorecard --repo=&lt;repo_url&gt;</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">例如：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">scorecard --repo=<a href="https://github.com/alibaba/fastjson" target="_blank">https://github.com/alibaba/fastjson</a></span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">结果如下：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Token-Permissions]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Signed-Releases]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Packaging]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Dangerous-Workflow]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Contributors]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Security-Policy]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [CI-Tests]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [SAST]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [License]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Binary-Artifacts]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [CII-Best-Practices]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Pinned-Dependencies]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Code-Review]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Fuzzing]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Branch-Protection]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Vulnerabilities]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Dependency-Update-Tool]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Starting [Maintained]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Binary-Artifacts]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [CII-Best-Practices]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Pinned-Dependencies]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Vulnerabilities]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Dependency-Update-Tool]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Maintained]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Code-Review]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Fuzzing]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Branch-Protection]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Token-Permissions]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Signed-Releases]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Packaging]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [CI-Tests]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [SAST]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [License]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Dangerous-Workflow]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Contributors]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Finished [Security-Policy]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer"><br/></span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">RESULTS</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">-------</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Aggregate score: 3.9 / 10</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer"><br/></span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Check scores:</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|  SCORE  |          NAME          |             REASON             |                                               DOCUMENTATION/REMEDIATION                                               |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 10 / 10 | Binary-Artifacts       | no binaries found in the repo  | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#binary-artifacts" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#binary-artifacts</a>       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 0 / 10  | Branch-Protection      | branch protection not enabled  | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#branch-protection" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#branch-protection</a>      |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | on development/release         |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | branches                       |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 0 / 10  | CI-Tests               | 0 out of 4 merged PRs          | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#ci-tests" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#ci-tests</a>               |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | checked by a CI test -- score  |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | normalized to 0                |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 0 / 10  | CII-Best-Practices     | no effort to earn an OpenSSF   | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#cii-best-practices" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#cii-best-practices</a>     |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | best practices badge detected  |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 1 / 10  | Code-Review            | Found 3/28 approved changesets | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#code-review" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#code-review</a>            |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | -- score normalized to 1       |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 10 / 10 | Contributors           | project has 18 contributing    | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#contributors" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#contributors</a>           |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | companies or organizations     |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 10 / 10 | Dangerous-Workflow     | no dangerous workflow patterns | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#dangerous-workflow" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#dangerous-workflow</a>     |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | detected                       |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 10 / 10 | Dependency-Update-Tool | update tool detected           | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#dependency-update-tool" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#dependency-update-tool</a> |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 0 / 10  | Fuzzing                | project is not fuzzed          | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#fuzzing" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#fuzzing</a>                |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 10 / 10 | License                | license file detected          | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#license" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#license</a>                |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 0 / 10  | Maintained             | 0 commit(s) and 0 issue        | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#maintained" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#maintained</a>             |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | activity found in the last 90  |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | days -- score normalized to 0  |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| ?       | Packaging              | packaging workflow not         | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#packaging" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#packaging</a>              |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | detected                       |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 0 / 10  | Pinned-Dependencies    | dependency not pinned by hash  | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#pinned-dependencies" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#pinned-dependencies</a>    |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | detected -- score normalized   |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | to 0                           |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 0 / 10  | SAST                   | SAST tool is not run on all    | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#sast" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#sast</a>                   |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | commits -- score normalized to |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | 0                              |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 10 / 10 | Security-Policy        | security policy file detected  | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#security-policy" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#security-policy</a>        |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| ?       | Signed-Releases        | no releases found              | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#signed-releases" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#signed-releases</a>        |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 0 / 10  | Token-Permissions      | detected GitHub workflow       | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#token-permissions" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#token-permissions</a>      |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | tokens with excessive          |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | permissions                    |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">| 0 / 10  | Vulnerabilities        | 22 existing vulnerabilities    | <a href="https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#vulnerabilities" target="_blank">https://github.com/ossf/scorecard/blob/a8eae2d833553e93021a22f5641661cb6ad3e24c/docs/checks.md#vulnerabilities</a>        |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|         |                        | detected                       |                                                                                                                       |</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">|---------|------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------|</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">在默认情况下，Scorecard会对所有检查运行。要运行特定检查，请使用：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">scorecard --repo=&lt;repo_url&gt; --checks &lt;check1,check2&gt;</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">例如：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">scorecard --repo=<a href="https://github.com/ossf/scorecard" target="_blank">https://github.com/ossf/scorecard</a> --checks Code-Review,Maintained</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">使用SARIF文件导出到GitHub Security
可以将Scorecard检查结果导出到GitHub Security工具（由GitHub Actions自动生成）。为此，使用--format参数生成一个SARIF文件并上传：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">scorecard --repo=&lt;repo_url&gt; --format sarif &gt; results.sarif</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">gh upload results.sarif</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">使用原始数据导出
默认情况下，scorecard导出json格式的结果。可以使用以下参数导出结果：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">scorecard --repo=&lt;repo_url&gt; --format json --show-details &gt; results.json</span></code></pre></section><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span>检查项介绍</h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">检查项详细来源：<a href="https://github.com/ossf/scorecard/blob/main/docs/checks.md" target="_blank">https://github.com/ossf/scorecard/blob/main/docs/checks.md</a></p><table data-tool="markdown.com.cn编辑器"><thead><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><th style="border-top-width: 1px;border-color: rgb(204, 204, 204);text-align: left;background-color: rgb(240, 240, 240);">名称</th><th style="border-top-width: 1px;border-color: rgb(204, 204, 204);text-align: left;background-color: rgb(240, 240, 240);">描述</th></tr></thead><tbody style="border-width: 0px;border-style: initial;border-color: initial;"><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="border-color: rgb(204, 204, 204);">Binary-Artifacts(二进制组件)</td><td style="border-color: rgb(204, 204, 204);">检查项目中是否包含二进制文件</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="border-color: rgb(204, 204, 204);">Branch-Protection(分支保护)</td><td style="border-color: rgb(204, 204, 204);">github 是否启用分支保护</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="border-color: rgb(204, 204, 204);">CI-Tests(CI测试)</td><td style="border-color: rgb(204, 204, 204);">在合并分支请求之前是否配置CI测试</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="border-color: rgb(204, 204, 204);">CII-Best-Practices(CII最佳实践)</td><td style="border-color: rgb(204, 204, 204);">是否遵循CII最佳实践</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="border-color: rgb(204, 204, 204);">Code-Review(代码审计)</td><td style="border-color: rgb(204, 204, 204);">检测项目在合并代码之前是否进行代码审计</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="border-color: rgb(204, 204, 204);">Contributors(贡献者)</td><td style="border-color: rgb(204, 204, 204);">检查项目是否有多个贡献者</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="border-color: rgb(204, 204, 204);">Dangerous-Workflow(不安全的工作流)</td><td style="border-color: rgb(204, 204, 204);">检查github action配置是否不安全</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="border-color: rgb(204, 204, 204);">Dependency-Update-Tool(依赖更新工具)</td><td style="border-color: rgb(204, 204, 204);">检查项目是否使用依赖更新工具</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="border-color: rgb(204, 204, 204);">Fuzzing(模糊测试)</td><td style="border-color: rgb(204, 204, 204);">检查项目是否进行模糊测试</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="border-color: rgb(204, 204, 204);">License(许可协议)</td><td style="border-color: rgb(204, 204, 204);">检查项目是否声明了许可协议</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="border-color: rgb(204, 204, 204);">Maintained(维护)</td><td style="border-color: rgb(204, 204, 204);">检查项目是否积极维护</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="border-color: rgb(204, 204, 204);">Packaging(打包)</td><td style="border-color: rgb(204, 204, 204);">检查项目是否使用组件包的形式进行发布</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="border-color: rgb(204, 204, 204);">Pinned-Dependencies(依赖标识)</td><td style="border-color: rgb(204, 204, 204);">检查项目是否使用包管理器声明依赖信息</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="border-color: rgb(204, 204, 204);">SAST(静态代码扫描)</td><td style="border-color: rgb(204, 204, 204);">检查项目是否进行静态代码扫描</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="border-color: rgb(204, 204, 204);">Security-Policy(安全策略)</td><td style="border-color: rgb(204, 204, 204);">检查项目是否声明安全策略</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="border-color: rgb(204, 204, 204);">Signed-Releases(签名发行)</td><td style="border-color: rgb(204, 204, 204);">检查项目是否对发布的组件进行签名</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="border-color: rgb(204, 204, 204);">Token-Permissions(令牌权限)</td><td style="border-color: rgb(204, 204, 204);">检查workflow token是否遵顼最小权限原则</td></tr><tr style="border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="border-color: rgb(204, 204, 204);">Vulnerabilities(漏洞)</td><td style="border-color: rgb(204, 204, 204);">使用osv等开源漏洞库检测代码和组件是否包含漏洞</td></tr></tbody></table><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span>总结</h2><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span>企业实践<span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">1、使用 Scorecard 对第三方开源项目进行安全性评估，综合判断引入的第三方组件的健壮性。 </p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">2、对企业开源的项目进行评估，提高被维护项目的安全性。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span>开发者<span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">1、对自己开发的项目进行评估，综合提高项目安全性。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">2、评估引入的第三方组件，提高项目整理健壮性</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span>参考</h2><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><a href="https://deps.dev/" target="_blank">https://deps.dev/</a></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><a href="https://osv.dev/" target="_blank">https://osv.dev/</a></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><a href="https://github.com/ossf/scorecard" target="_blank">https://github.com/ossf/scorecard</a></section></li></ul></section><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484297">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=a0999377&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484297%26idx%3D1%26sn%3Dad1ecf4d2588417b575bdc44ee8aee26%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 06 Aug 2024 08:00:00 +0800</pubDate>
    </item>
    <item>
      <title>MinerU 介绍</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484288&amp;idx=1&amp;sn=a11342590cf0edb24985d65fc3de366a</link>
      <description>MinerU之Magic-PDF文档提取介绍</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-08-05 15:04</span> <span style="display: inline-block;">北京</span>
</p>

<p>MinerU之Magic-PDF文档提取介绍</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=b19ed6d5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN9WJ7a7l5WfymHQso6EYzicSuJtwLK5c1bwPROXfJKOqVyReHRyqJibyYg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section data-tool="markdown编辑器" data-website="https://markdown.com.cn/editor" style="font-size: 16px;color: black;padding: 25px 30px;line-height: 1.6;letter-spacing: 0px;word-break: break-word;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;margin-top: -10px;"><h1 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"><span style="display: none;"></span></h1><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span>背景</span></h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">处理监管文档会遇到一个比较操蛋的问题就是部分文档只有pdf格式的，并且pdf是扫描版本的，无法直接读取pdf，利用多模态进行处理，目前口袋有比较紧张，最近发现一个宝藏项目，MinerU，子项目(PDF-Extract-Kit)，可以识别pdf，将pdf转成md，方便数据处理和LLM进行对话。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><img class="rich_pages wxw-img" data-imgfileid="100000637" data-ratio="0.2761724301279015" data-w="2111" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=912253f9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN9Viat9R11eez0b7U6Pl2gtqCLbibTelcCjwOOnNniazImibHUic7icg0yrucQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h1 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"><span style="display: none;"></span><span>介绍</span><span></span></h1><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">MinerU 是一款一站式、开源、高质量的数据提取工具，主要包含以下功能:</p><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">Magic-PDF PDF文档提取</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">Magic-Doc 网页与电子书提取</section></li></ul><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">这里主要介绍Magic-PDF，Magic-PDF是一款将 PDF 转化为 markdown 格式的工具。支持转换本地文档或者位于支持S3协议对象存储上的文件。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">主要功能包含</p><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">支持多种前端模型输入</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">删除页眉、页脚、脚注、页码等元素</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">符合人类阅读顺序的排版格式</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">保留原文档的结构和格式，包括标题、段落、列表等</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">提取图像和表格并在markdown中展示</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">将公式转换成latex</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">乱码PDF自动识别并转换</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">支持cpu和gpu环境</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">支持windows/linux/mac平台</section></li></ul><h1 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"><span style="display: none;"></span><span>安装</span><span></span></h1><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li></ul><pre class="code-snippet__js" data-lang="docker"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">conda create -n mineru python=3.10</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">conda activate mineru</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><strong>1.安装依赖</strong></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">完整功能包依赖detectron2，该库需要编译安装，如需自行编译，请参考 facebookresearch/detectron2#5114</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">或是直接使用作者预编译的whl包：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="docker"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">pip install detectron2 --extra-index-url <a href="https://wheels.myhloli.com" target="_blank">https://wheels.myhloli.com</a> -i <a href="https://pypi.tuna.tsinghua.edu.cn/simple" target="_blank">https://pypi.tuna.tsinghua.edu.cn/simple</a> </span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><strong>2.使用pip安装完整功能包</strong></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="docker"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">pip install magic-pdf[full]==0.6.2b1 -i <a href="https://pypi.tuna.tsinghua.edu.cn/simple" target="_blank">https://pypi.tuna.tsinghua.edu.cn/simple</a></span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><strong>3.下载模型权重文件</strong></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="docker"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">git clone <a href="https://www.modelscope.cn/wanderkid/PDF-Extract-Kit.git" target="_blank">https://www.modelscope.cn/wanderkid/PDF-Extract-Kit.git</a></span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><strong>4. 拷贝配置文件并进行配置</strong></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">在仓库根目录可以获得 magic-pdf.template.json 配置模版文件</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="docker"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">cp magic-pdf.template.json ~/magic-pdf.json</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">使用cuda</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="docker"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">{</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">    &#34;bucket_info&#34;:{</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">        &#34;bucket-name-1&#34;:[&#34;ak&#34;, &#34;sk&#34;, &#34;endpoint&#34;],</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">        &#34;bucket-name-2&#34;:[&#34;ak&#34;, &#34;sk&#34;, &#34;endpoint&#34;]</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">    },</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">    &#34;models-dir&#34;:&#34;/data/models&#34;,</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">    &#34;device-mode&#34;:&#34;cuda&#34;,</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">    &#34;table-config&#34;: {</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">        &#34;is_table_recog_enable&#34;: false,</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">        &#34;max_time&#34;: 400</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">    }</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">}</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer"><br/></span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">这里有个小坑，从huggingface下载下来的模型目录为：/data/models/PDF-Extract-Kit/，此处配置为：/data/models/PDF-Extract-Kit/models/ ，另外目前不支持多卡配置。</p><h1 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"><span style="display: none;"></span><span>使用</span><span></span></h1><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><strong>1. 通过命令行使用</strong></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><strong>直接使用</strong></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">magic-pdf pdf-command --pdf &#34;pdf_path&#34; --inside_model true</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">程序运行完成后，你可以在&#34;/tmp/magic-pdf&#34;目录下看到生成的markdown文件，markdown目录中可以找到对应的xxx_model.json文件</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">如果您有意对后处理pipeline进行二次开发，可以使用命令</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">magic-pdf pdf-command --pdf &#34;pdf_path&#34; --model &#34;model_json_path&#34;</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">这样就不需要重跑模型数据，调试起来更方便</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><strong>更多用法</strong></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">magic-pdf --help</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><strong>2. 通过接口调用</strong></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><strong>本地使用</strong></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang=""><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">image_writer = DiskReaderWriter(local_image_dir)</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">image_dir = str(os.path.basename(local_image_dir))</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">jso_useful_key = {&#34;_pdf_type&#34;: &#34;&#34;, &#34;model_list&#34;: model_json}</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">pipe = UNIPipe(pdf_bytes, jso_useful_key, image_writer)</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">pipe.pipe_classify()</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">pipe.pipe_parse()</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">md_content = pipe.pipe_mk_markdown(image_dir, drop_mode=&#34;none&#34;)</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><strong>在对象存储上使用</strong></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="docker"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">s3pdf_cli = S3ReaderWriter(pdf_ak, pdf_sk, pdf_endpoint)</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">image_dir = &#34;s3://img_bucket/&#34;</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">s3image_cli = S3ReaderWriter(img_ak, img_sk, img_endpoint, parent_path=image_dir)</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">pdf_bytes = s3pdf_cli.read(s3_pdf_path, mode=s3pdf_cli.MODE_BIN)</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">jso_useful_key = {&#34;_pdf_type&#34;: &#34;&#34;, &#34;model_list&#34;: model_json}</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">pipe = UNIPipe(pdf_bytes, jso_useful_key, s3image_cli)</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">pipe.pipe_classify()</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">pipe.pipe_parse()</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">md_content = pipe.pipe_mk_markdown(image_dir, drop_mode=&#34;none&#34;)</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">本地命令执行效果如下：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="docker"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">magic-pdf pdf-command --pdf ../PDF-Extract-Kit/inputs/18.4《信息安全技术\ \ 安全漏洞标识与描述规范》GB_T\ 28458-2012.pdf --inside_model true</span></code></pre></section><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><p style="text-align: center;"><br/></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000631" data-ratio="0.10042735042735043" data-s="300,640" style="" data-type="png" data-w="1872" src="https://wechat2rss.xlab.app/img-proxy/?k=68d17905&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN90cFGyO5xhgQjSqzWZy6GvFpT6s3OLsQrKBGEJ2a8y3S1UQRKYlxy2g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">本地命令执行</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">成功</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000632" data-ratio="0.08505747126436781" data-s="300,640" style="color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-size: 16px;letter-spacing: normal;text-align: center;text-wrap: wrap;" data-type="png" data-w="1740" src="https://wechat2rss.xlab.app/img-proxy/?k=d9491f73&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN9cObZk9icpKHIcHJkBcqV85X5G33MlWKpe1a44FvqREmlVSKC8bQNRQQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;"><br/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">执行成功</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">效果对比</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000633" data-ratio="0.5209760273972602" data-s="300,640" style="color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-size: 16px;letter-spacing: normal;text-align: center;text-wrap: wrap;" data-type="png" data-w="2336" src="https://wechat2rss.xlab.app/img-proxy/?k=6ba679d3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN92ucV0XZpqJ6U9BcaAuHyI192HLezwcSY7qUYb2IKSwA5EntwRw76VA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">效果对比</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">部分识别错误，但是整体已经很经验</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000634" data-ratio="0.2393278837420527" data-s="300,640" style="" data-type="png" data-w="2202" src="https://wechat2rss.xlab.app/img-proxy/?k=ef4642a0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN9w7ygresVhC6jhjgQNTRDGBOgJWoPmWphqABxLNwb6NJrobPbuhUo3Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">部分瑕疵</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">GPU资源占用效率如下：</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000635" data-ratio="0.4456066945606695" data-s="300,640" style="" data-type="png" data-w="956" src="https://wechat2rss.xlab.app/img-proxy/?k=c3bc1c8a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN9X0e4CUsaNGYNgv41e3GWwiaD5uhzGN1HeKq3ZworcQHXyAvvdos3kug%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">GPU资源占用</figcaption></figure><h1 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"><span style="display: none;"></span><span>结论</span><span></span></h1><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">1、开源项目中，目前<strong>MinerU可以满足pdf自动化识别需求，方便数据的整理和收集。</strong></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">2、由于ocr识别过程中仍会存在个别识别失误，格式混乱问题，如果项目数据要求比较准确，需要慎重考虑</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">3、<strong>MinerU的命令行设计的有些反人类，这个属于个人观点</strong></p><h1 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"><span style="display: none;"></span><span>错误</span><span></span></h1><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>ValueError: Unable to avoid copy while creating an array as requested.</span><span></span></h2><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000636" data-ratio="0.06535947712418301" data-s="300,640" style="" data-type="png" data-w="1071" src="https://wechat2rss.xlab.app/img-proxy/?k=ab14bb78&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4zZ69eD8pw2rxrnGFCKVN90Ijc3DZGVQnbgeEBszdPvGmvWNictAy1p7SZrnFW44yj245sichFPrJA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">错误</figcaption></figure><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="docker"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">pip install &#34;numpy&lt;2&#34;</span></code></pre></section><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>参考</span><span></span></h2><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><a href="https://github.com/opendatalab/MinerU" target="_blank">https://github.com/opendatalab/MinerU</a></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);"><a href="https://github.com/opendatalab/PDF-Extract-Kit" target="_blank">https://github.com/opendatalab/PDF-Extract-Kit</a></section></li></ul></section><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484288">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=0b51e537&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484288%26idx%3D1%26sn%3Da11342590cf0edb24985d65fc3de366a%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 05 Aug 2024 15:04:00 +0800</pubDate>
    </item>
    <item>
      <title>安全从业人员焦虑的几点看法</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484273&amp;idx=1&amp;sn=c1503a5db27fee8bc17091e2a12ddeb1</link>
      <description>安全从业人员焦虑的几点看法</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-04-23 08:01</span> <span style="display: inline-block;">北京</span>
</p>

<p>安全从业人员焦虑的几点看法</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=971178a5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo7xEu89QibznGzRU2VSP971XKuibOmEGckkPQf5C5UUAfib10bEXib9Nx0NTNhjGSibz06rUg1OibqqZlicw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="cursor: text;box-sizing: border-box;counter-set: list-0 0 list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0;line-height: 28px;white-space: pre-wrap;tab-size: 4;color: rgb(47, 48, 52);font-family: PingFangSC-Regular, &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, 微软雅黑, Arial, sans-serif;font-size: 16px;text-align: left;background-color: rgb(255, 255, 255);">之前有看到不少安全公众号在营销焦虑，如同营销程序员35岁失业。由于信安或者整个IT行业都是不断迭代和更新的，当前流行的技术可能在几年以后就会被淘汰，所以要求IT人员需要全面发展，不断提升自身软实力。换另一个角度来分析，技术的不断淘汰，才能创造新的就业需求，提高IT人员的竞争力。</p><p style="cursor: text;box-sizing: border-box;counter-set: list-0 0 list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0;line-height: 28px;white-space: pre-wrap;tab-size: 4;color: rgb(47, 48, 52);font-family: PingFangSC-Regular, &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, 微软雅黑, Arial, sans-serif;font-size: 16px;text-align: left;background-color: rgb(255, 255, 255);">现在安全不好干，尤其是安全服务，原因有很多，包括经济下行，客户要求较高等等，其实我更想聊的一个现象是政策的导向，导致安全人员缺口较大，部分学生，跨行IT人员被拉到现场做值守，人肉盯设备，有问题按照流程及时上报就行，薪酬待遇还将就，导致了不少人员自以为安全行业也就这样简单，盯盯设备轻轻松松就能把钱赚了，殊不知，已错过了提升自己的最佳时间，能踏实学习的，有精力学习的也就大学毕业前后那几年。</p><p style="cursor: text;box-sizing: border-box;counter-set: list-0 0 list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0;line-height: 28px;white-space: pre-wrap;tab-size: 4;color: rgb(47, 48, 52);font-family: PingFangSC-Regular, &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, 微软雅黑, Arial, sans-serif;font-size: 16px;text-align: left;background-color: rgb(255, 255, 255);">前段时间和我领导聊网络安全相关的话题，领导问了一个问题，为什么现在网络安全能挣钱，而且越来越多的厂商加入进来，我回答是政策，领导认为是国产化，如果将国外成熟的产品配合市场化的打法，国内安全厂商，尤其是小厂商估计会被吃的连渣都剩不下来，现在大环境让安全从业人员的数量增多，如果国家的政策让你挣钱，钱会源源不断的涌来，如果不让你赚钱，吃进去的都会吐出来，比如教培，（这里只是举个例子，打击教培的原因有很多，这里不要硬杠）。个人感觉，当前IT或者信安行业由于国际环境和国内政策扶持，无论甲方还是乙方都是缺安全人员的，但是由于安全的属性，这个缺口或者安全相关的市场并不会特别大，对于一线安全人员，我个人的建议是找一个自己感兴趣的方向，先积累安全能力，综合发展个人软实力，对于大部分安全从业人员，待在甲方，基本上慢慢偏向安全运营、方案输出、监管合规之类的，待在乙方，基本上就是技术管理，项目经理之类的岗位，无论甲乙方，上升无非比拼的学历、能力、资质、关系等等，与其杞人忧天，还不如对比一下师傅们的差距，花一定的时间和精力去提升。</p><p style="cursor: text;box-sizing: border-box;counter-set: list-0 0 list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0;line-height: 28px;white-space: pre-wrap;tab-size: 4;color: rgb(47, 48, 52);font-family: PingFangSC-Regular, &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, 微软雅黑, Arial, sans-serif;font-size: 16px;text-align: left;background-color: rgb(255, 255, 255);">对于甲乙方安全人员，如果有进入金融、能源、政企的机会，就一定把握住，烟草就算了，99.99%都进不去，不做考虑，但是可以做烟草的项目，利润还是很可观的。对于安服仔，一定要想好自己的退路和职业规划。</p><p style="cursor: text;box-sizing: border-box;counter-set: list-0 0 list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0;line-height: 28px;white-space: pre-wrap;tab-size: 4;color: rgb(47, 48, 52);font-family: PingFangSC-Regular, &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, 微软雅黑, Arial, sans-serif;font-size: 16px;text-align: left;background-color: rgb(255, 255, 255);">提升的方式有很多，参加培训，考试认证，挑战不同技术方向，社区共享等等。如果有疑问可以在群里沟通，聆听一下各位师傅意见，我想你会收获不少。</p><p style="cursor: text;box-sizing: border-box;counter-set: list-0 0 list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0;line-height: 28px;white-space: pre-wrap;tab-size: 4;color: rgb(47, 48, 52);font-family: PingFangSC-Regular, &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, 微软雅黑, Arial, sans-serif;font-size: 16px;text-align: left;background-color: rgb(255, 255, 255);">考证方向的建议：CISSP/OSCP/CISA/PMP/CISP</p><p style="cursor: text;box-sizing: border-box;counter-set: list-0 0 list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0;line-height: 28px;white-space: pre-wrap;tab-size: 4;color: rgb(47, 48, 52);font-family: PingFangSC-Regular, &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, 微软雅黑, Arial, sans-serif;font-size: 16px;text-align: left;background-color: rgb(255, 255, 255);">其中国测的证书有一个就行，没啥含金量，其他的各位师傅看自身能力、精力和物力。</p><p style="cursor: text;box-sizing: border-box;counter-set: list-0 0 list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0;line-height: 28px;white-space: pre-wrap;tab-size: 4;color: rgb(47, 48, 52);font-family: PingFangSC-Regular, &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, 微软雅黑, Arial, sans-serif;font-size: 16px;text-align: left;background-color: rgb(255, 255, 255);">以上为个人观点，分享出来与各位共勉，内容仅供参考。</p><p style="cursor: text;box-sizing: border-box;counter-set: list-0 0 list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0;line-height: 28px;white-space: pre-wrap;tab-size: 4;color: rgb(47, 48, 52);font-family: PingFangSC-Regular, &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, 微软雅黑, Arial, sans-serif;font-size: 16px;text-align: left;background-color: rgb(255, 255, 255);">附一张<span style="letter-spacing: 0.578px;text-wrap: wrap;">cy</span><span style="letter-spacing: 0.578px;text-wrap: wrap;">ber-security技能路线图 <span style="letter-spacing: 0.578px;text-wrap: wrap;"><a href="https://roadmap.sh" target="_blank">https://roadmap.sh</a></span><span style="letter-spacing: 0.578px;text-wrap: wrap;">/</span><span style="letter-spacing: 0.578px;text-wrap: wrap;">cy</span><span style="letter-spacing: 0.578px;text-wrap: wrap;">ber-security</span></span></p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000624" data-ratio="3.403125" data-s="300,640" style="" data-type="png" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=34d7e488&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo7WXnNQsw6oUpG2DxkZkRXiaXEWG0vGsWcib5eaQXGI2ZbO1Sw3VibClEYjZ1vKyov9tX03ctWsfWmLw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484273">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=d95323c9&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484273%26idx%3D1%26sn%3Dc1503a5db27fee8bc17091e2a12ddeb1%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 23 Apr 2024 08:01:00 +0800</pubDate>
    </item>
    <item>
      <title>Nvtop-适用于NVIDIA、AMD和英特尔GPU的Linux任务监视器</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484271&amp;idx=1&amp;sn=94b85a14e991e8253db3d113006f33ef</link>
      <description>Nvtop-适用于NVIDIA、AMD和英特尔GPU的Linux任务监视器</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-04-22 15:27</span> <span style="display: inline-block;">北京</span>
</p>

<p>Nvtop-适用于NVIDIA、AMD和英特尔GPU的Linux任务监视器</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=6597802c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo7WXnNQsw6oUpG2DxkZkRXiapztKEISECbGSfAW4t3gcoK5ay5VVgeJBBlQ7EiaxOnIedsHUuEnHRNw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<h2 style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><strong>写在最前：公众号一直是佛系运营的，有时候看到私信都超过一周了，由于超过平台限制时间，被禁止了，没法答复。这篇文章是一个水文，和公众号的内容不怎么相关，主要是应对一个网友提出的疑问，我在后台私信回答不了，也联系不上，就在这里单独写篇文章回复一下。如果遇到长时间未回复，可以加我微信私聊或者给我留言都行。</strong><br/></h2><h2 style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">nvtop 命令是适用于 NVIDIA、AMD 和 Intel GPU（图形处理单元）的 Linux 用户的出色任务监视器。基于 ncurses（用于在终端中显示信息的全新 curses 库）的 GPU 状态查看器，可以像 top 命令或 htop 命令，可以高效地处理系统中的多个 GPU，并以 htop 格式显示有关它们的详细信息。</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">适用于以下 GPU：</p><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 使用 amdgpu 驱动的 AMD GPU。</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 使用 i915 Linux 驱动的英特尔显卡。</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 使用 NVIDIA 驱动程序的 Nvidia GPU，从 GeForce 600、GeForce 800M 开始的任何后继产品都应该可以正常工作。</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 高通的 Adreno GPU</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• Apple GPU（M 系列）</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• Ascend NVTOP 通过 DCMI API（版本 6.0.0）支持 Ascend（在 Altas 800 (910B) 上测试）。</p></li></ul><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">安装</h2><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">Ubuntu / Debian</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">如果发行的版本提供了 snap 命令，请按照 <span style="line-height: 1.75;color: rgb(87, 107, 149);">snap 安装过程</span> 获取最新版本的 <code style="line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;word-break: break-all;">nvtop</code>。</p><h4 style="font-size: 1em;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-weight: bold;margin: 2em 8px 0.5em;color: rgb(15, 76, 129);">Ubuntu Impish (21.10)、Debian buster (stable) 或者更新版本</h4><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span>sudo apt install nvtop</span></code></pre><h4 style="font-size: 1em;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-weight: bold;margin: 2em 8px 0.5em;color: rgb(15, 76, 129);">Ubuntu PPA</h4><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">一个 <span style="line-height: 1.75;color: rgb(87, 107, 149);">支持 Ubuntu 20.04、22.04 及更新版本</span> 的 PPA 由 <span style="line-height: 1.75;color: rgb(87, 107, 149);">Martin Wimpress</span> 提供，它提供了一个针对 NVIDIA、AMD 和英特尔启用的最新版本 <code style="line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;word-break: break-all;">nvtop</code>。</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>sudo add</span><span>-</span><span>apt</span><span>-</span><span>repository ppa</span><span>:</span><span>flexiondotorg</span><span>/</span><span>nvtop</span><br/><span>sudo apt install nvtop</span></code></pre><h4 style="font-size: 1em;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-weight: bold;margin: 2em 8px 0.5em;color: rgb(15, 76, 129);">旧版本</h4><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• AMD 和英特尔依赖项</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span>sudo apt install libdrm</span><span>-</span><span>dev libsystemd</span><span>-</span><span>dev</span><br/><span style="color: rgb(92, 99, 112);font-style: italic;"># Ubuntu 18.04</span><br/><span>sudo apt install libudev</span><span>-</span><span>dev</span></code></pre></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVIDIA 依赖项</p></li><ul style="line-height: 1.75;padding-left: 1em;list-style-position: initial;list-style-image: initial;" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVIDIA 驱动程序（参见 <span style="line-height: 1.75;color: rgb(87, 107, 149);">Ubuntu Wiki</span> 或 <span style="line-height: 1.75;color: rgb(87, 107, 149);">Ubuntu PPA</span> 或 <span style="line-height: 1.75;color: rgb(87, 107, 149);">Debian Wiki</span>)</p></li></ul><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVTOP 依赖项</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• CMake、ncurses 和 Git</p></li></ul><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>sudo apt install cmake libncurses5</span><span>-</span><span>dev libncursesw5</span><span>-</span><span>dev git</span></code></pre><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVTOP</p></li><ul style="line-height: 1.75;padding-left: 1em;list-style-position: initial;list-style-image: initial;" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 按照 <span style="line-height: 1.75;color: rgb(87, 107, 149);">NVTOP 构建命令</span>进行操作。</p></li></ul></ul><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">Fedora / Red Hat / CentOS</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">一个独立的应用程序以 <span style="line-height: 1.75;color: rgb(87, 107, 149);">AppImage</span> 的形式提供。</p><h4 style="font-size: 1em;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-weight: bold;margin: 2em 8px 0.5em;color: rgb(15, 76, 129);">Fedora 36 及更新版本</h4><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span>sudo dnf install nvtop</span></code></pre><h4 style="font-size: 1em;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-weight: bold;margin: 2em 8px 0.5em;color: rgb(15, 76, 129);">Red Hat Enterprise Linux 8 和 9</h4><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span>sudo dnf install </span><span>-</span><span>y https</span><span>://</span><span>dl</span><span>.</span><span>fedoraproject</span><span>.</span><span>org</span><span>/</span><span>pub</span><span>/</span><span>epel</span><span>/</span><span>epel</span><span>-</span><span>release</span><span>-</span><span>latest</span><span>-</span><span>$</span><span>(</span><span>rpm </span><span>-</span><span>E </span><span>%{</span><span>rhel</span><span>}).</span><span>noarch</span><span>.</span><span>rpm</span><br/><span>sudo dnf install nvtop</span></code></pre><h4 style="font-size: 1em;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-weight: bold;margin: 2em 8px 0.5em;color: rgb(15, 76, 129);">CentOS Stream、Rocky Linux、AlmaLinux</h4><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span>sudo dnf install </span><span>-</span><span>y epel</span><span>-</span><span>release</span><br/><span>sudo dnf install nvtop</span></code></pre><h4 style="font-size: 1em;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-weight: bold;margin: 2em 8px 0.5em;color: rgb(15, 76, 129);">Fedora / Red Hat / CentOS 的构建过程：</h4><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• AMD 和英特尔依赖项</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span>sudo dnf install libdrm</span><span>-</span><span>devel systemd</span><span>-</span><span>devel</span></code></pre></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVIDIA 依赖项</p></li><ul style="line-height: 1.75;padding-left: 1em;list-style-position: initial;list-style-image: initial;" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVIDIA 驱动程序，<strong style="line-height: 1.75;color: rgb(15, 76, 129);">nvml 库需要 CUDA</strong>（参见 <span style="line-height: 1.75;color: rgb(87, 107, 149);">RPM Fusion</span>)</p></li></ul><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVTOP 依赖项</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• CMake、ncurses、C++ 和 Git</p></li></ul><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>sudo dnf install cmake ncurses</span><span>-</span><span>devel git gcc</span><span>-</span><span>c</span><span>++</span></code></pre><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVTOP</p></li><ul style="line-height: 1.75;padding-left: 1em;list-style-position: initial;list-style-image: initial;" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 按照 <span style="line-height: 1.75;color: rgb(87, 107, 149);">NVTOP 构建命令</span>进行操作。</p></li></ul></ul><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">OpenSUSE</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">一个独立的应用程序以 <span style="line-height: 1.75;color: rgb(87, 107, 149);">AppImage</span> 的形式提供。</p><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">OpenSUSE 的构建过程：</p><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• AMD 依赖项</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span>sudo zypper install libdrm</span><span>-</span><span>devel</span></code></pre></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVIDIA 依赖项</p></li><ul style="line-height: 1.75;padding-left: 1em;list-style-position: initial;list-style-image: initial;" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVIDIA 驱动程序（参见 <span style="line-height: 1.75;color: rgb(87, 107, 149);">SUSE 支持数据库</span>)</p></li></ul><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVTOP 依赖项</p></li><ul style="line-height: 1.75;padding-left: 1em;list-style-position: initial;list-style-image: initial;" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• CMake、ncurses 和 Git</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span>sudo zypper install cmake ncurses</span><span>-</span><span>devel git</span></code></pre></li></ul><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• NVTOP</p></li><ul style="line-height: 1.75;padding-left: 1em;list-style-position: initial;list-style-image: initial;" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 按照 <span style="line-height: 1.75;color: rgb(87, 107, 149);">NVTOP 构建命令</span>进行操作。</p></li></ul></ul><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">Arch Linux</h3><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span>sudo pacman </span><span>-</span><span>S nvtop</span></code></pre><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">Gentoo</h3><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span>sudo layman </span><span>-</span><span>a guru </span><span>&amp;&amp;</span><span> sudo emerge </span><span>-</span><span>av nvtop</span></code></pre><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">AppImage</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">AppImage 是一个独立的应用程序。只需下载 AppImage，使其可执行并运行即可！</p><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 转到 <span style="line-height: 1.75;color: rgb(87, 107, 149);">发布页面</span> 并下载 <code style="line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;word-break: break-all;">nvtop-x86_64.AppImage</code></p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span style="color: rgb(92, 99, 112);font-style: italic;"># 转到下载位置 **路径可能因系统而异**</span><br/><span style="color: rgb(230, 192, 123);">cd</span><span> </span><span style="color: rgb(209, 154, 102);">$HOME</span><span>/</span><span>Downloads</span><br/><span style="color: rgb(92, 99, 112);font-style: italic;"># 使 AppImage 可执行</span><br/><span style="color: rgb(230, 192, 123);">chmod</span><span> u</span><span>+</span><span>x nvtop</span><span>-</span><span>x86_64</span><span>.</span><span>AppImage</span><br/><span style="color: rgb(92, 99, 112);font-style: italic;"># 享受 nvtop</span><br/><span>./</span><span>nvtop</span><span>-</span><span>x86_64</span><span>.</span><span>AppImage</span></code></pre></li></ul><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">如果您好奇它是如何工作的，请访问 <span style="line-height: 1.75;color: rgb(87, 107, 149);">AppImage 网站</span>。</p><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">Snap</h3><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPfudCVgxxfA5CaiaXAhu84QSpYPsicQtDSHptjjzfD6SaYDn1S5u23y9l0r6zTfYXCoW4ky92sRMIicoPvFrFD5VKD/640?wx_fmt=svg&amp;from=appmsg&#34;);background-repeat: no-repeat;background-position: 14px 10px !important;background-size: 40px !important;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;line-height: 1.75;white-space-collapse: collapse;"><span>snap install nvtop</span><br/><span style="color: rgb(92, 99, 112);font-style: italic;"># 添加在 nvtop 中杀死进程的功能</span><br/><span>snap connect nvtop</span><span>:</span><span>process</span><span>-</span><span>control</span><br/><span style="color: rgb(92, 99, 112);font-style: italic;"># 添加检查 GPU 信息（风扇、PCIe、电源等）的功能</span><br/><span>snap connect nvtop</span><span>:</span><span>hardware</span><span>-</span><span>observe</span><br/><span style="color: rgb(92, 99, 112);font-style: italic;"># AMDGPU 进程列表支持（读取 /proc/&lt;pid&gt;）</span><br/><span>snap connect nvtop</span><span>:</span><span>system</span><span>-</span><span>observe</span><br/><span style="color: rgb(92, 99, 112);font-style: italic;"># 临时解决方法，以获取每个进程的 GPU 使用情况（读取 /proc/&lt;pid&gt;/fdinfo）</span><br/><span>snap connect nvtop</span><span>:</span><span>kubernetes</span><span>-</span><span>support</span></code></pre><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">使用</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">安装完成以后，在终端中直接输入<code style="line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;word-break: break-all;">nvtop</code>命令，即可调用该工具</p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000620" data-ratio="0.446875" data-s="300,640" style="" data-type="png" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=520e3bc4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo7WXnNQsw6oUpG2DxkZkRXiaowT84m7RxWBbaMkKicj6YXuMUrg6ZicKxvMn4IFicPtFJ6a6NcFaYzSSg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">参考</h2><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://github.com/Syllo/nvtop【nvtop" target="_blank">https://github.com/Syllo/nvtop【nvtop</a> github】</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://www.cyberciti.biz/hardware/nvtop-command-in-linux-to-monitor-nvidia-amd-intel-gpus/【nvtop" target="_blank">https://www.cyberciti.biz/hardware/nvtop-command-in-linux-to-monitor-nvidia-amd-intel-gpus/【nvtop</a> command in linux to monitor nvidia amd intel gpus】</p></li></ul><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484271">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=b113c4bb&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484271%26idx%3D1%26sn%3D94b85a14e991e8253db3d113006f33ef%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 22 Apr 2024 15:27:00 +0800</pubDate>
    </item>
    <item>
      <title>安装ollama并运行QWEN1.5模型</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484250&amp;idx=1&amp;sn=89f97e77630eae6b05c08c9b3c10c7fa</link>
      <description>ollama是一个在本地启动并运行大型语言模型的框架。</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-02-28 09:00</span> <span style="display: inline-block;">北京</span>
</p>

<p>ollama是一个在本地启动并运行大型语言模型的框架。</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=9133c943&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYias1SaSsicjKUBE3PUKkJ7qJOKQaDetictkLCK29I5iaNLicKJfGqbISu21g%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section data-tool="markdown编辑器" data-website="https://markdown.com.cn/editor" style="font-size: 16px;color: black;padding: 25px 30px;line-height: 1.6;letter-spacing: 0px;word-break: break-word;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;margin-top: -10px;"><h1 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"><span style="display: none;"></span><span>安装ollama并运行QWEN1.5模型</span><span></span></h1><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>介绍</span><span></span></h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ollama是一个在本地启动并运行大型语言模型的框架。ollama 通过对模型文件进行转化，配置和优化，方便进行多平台部署，包括GPU的使用做了一定的优化，另外LangChain也对其做了集成。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">注意：由于ollama及LLM社区日新月异，本文章可能存在时效性，请酌情参考。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>部署</span><span></span></h2><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>linux部署</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">需要提前安装lspci或者lshw</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">curl -fsSL [<a href="https://ollama.com/install.sh](https://ollama.com/install.sh)" target="_blank">https://ollama.com/install.sh](https://ollama.com/install.sh)</a> | sh</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">正常安装，看提示判断是否安装成功。如果不成功，根据实际错误自行解决。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">新增以下脚本，并且允许外网访问：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">#!/bin/bash</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;"># enable global access</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">export OLLAMA_HOST=0.0.0.0</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer"><br/></span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">/usr/local/bin/ollama  serve</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">加载官方已发布镜像</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">ollama run gemma:7b</span></code></pre></section><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000589" data-ratio="0.126232741617357" data-s="300,640" style="" data-type="png" data-w="2535" src="https://wechat2rss.xlab.app/img-proxy/?k=e9d07fd8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYiaibcRSH63hicOmLm6Txb8ibS6owDgQXkIagrn3wVmdae1OyQA7JkKWSyZQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">加载gemma</figcaption></figure><ul data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">魔法上网，效果更好。</section></li></ul><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000590" data-ratio="0.33996815286624205" data-s="300,640" style="" data-type="png" data-w="1256" src="https://wechat2rss.xlab.app/img-proxy/?k=ded5e61f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYia2mOzJUvVhwwOZVLeRRV2j0JGzaz7xI1a02ml8ictwLJCvsSTOXINuYQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">加载成功</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ollama会将缓冲保存到本地用户目录下：<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;word-break: break-all;">~/.ollama/models</code> 文件保存类似于docker存储方式</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000588" data-ratio="0.06649616368286446" data-s="300,640" style="" data-type="png" data-w="1173" src="https://wechat2rss.xlab.app/img-proxy/?k=6d25f676&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYiau9icsWo56fcgsTic0tV1RiauJX8iaCS0PochgsoE2KMLo4rpYx6AzMKncQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">缓存</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">如果想从当前服务中移除运行的镜像，有两种方法，1、重启ollama 服务  2、使用rm删除当前镜像，第二种方法有个问题就是镜像得重新下载。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>自定义镜像</span><span></span></h2><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>导入支持CGUF格式模型</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">导入cguf格式模型较为简单</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">1、创建**<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;word-break: break-all;">Modelfile</code>文件**</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">首先创建一个Modelfile。该文件是模型的蓝图，指定权重、参数、提示模板等。</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">FROM ./mistral-7b-v0.1.Q4_0.gguf</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">（可选）许多聊天模型需要提示模板才能正确回答。可以使用Modelfile中的TEMPLATE指令指定默认提示模板：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">FROM ./mistral-7b-v0.1.Q4_0.gguf</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">TEMPLATE &#34;[INST] {{ .Prompt }} [/INST]&#34;</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">2、创建Ollama模型</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">ollama create example -f Modelfile</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">3、运行模型</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">ollama run example &#34;What is your favourite condiment?&#34;</span></code></pre></section><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>导入支持**(PyTorch &amp; Safetensors)格式模型**</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">从PyTorch和Safetensors导入的过程比从GGUF导入的过程更长。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">1、克隆ollama项目</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">git clone <a href="https://github.com/ollama/ollama" target="_blank">https://github.com/ollama/ollama</a></span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">2、 fetch  <code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;word-break: break-all;">llama.cpp</code> 子模块:</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">git submodule init</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">git submodule update llm/llama.cpp</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">3、安装依赖</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">conda create -n ollama python=3.10</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">conda activate ollama</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">pip install -r llm/llama.cpp/requirements.txt</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">4、构建quantize工具</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">make -C llm/llama.cpp quantize</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">5、获取或者下载模型到本地</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">6、转换模型</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">某些模型架构需要使用特定的转换脚本。例如，Qwen模型需要运行convert-hf-to-gguf.py而不是convert.py</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">python llm/llama.cpp/convert.py ./model --outtype f16 --outfile converted.bin</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">这里不太清楚是否可以直接使用量化模型，先尝试qwen1.5-Qwen1.5-14B-Chat-GPTQ-Int8</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">转换模型命令如下：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">python llm/llama.cpp/convert-hf-to-gguf.py /data/models/Qwen1.5-14B-Chat-GPTQ-Int8 --outtype q8_0 --outfile converted.bin</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">目前不支持，错误如下：</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">[<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;word-break: break-all;">convert-hf-to-gguf.py](<a href="http://convert-hf-to-gguf.py/):" target="_blank">http://convert-hf-to-gguf.py/):</a> error: argument --outtype: invalid choice: &#39;q8_0&#39; (choose from &#39;f32&#39;, &#39;f16&#39;)</code></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">指定f16遇到新的错误，暂时不清楚如何解决，网上没有检索到类似的错误：</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Loading model: Qwen1.5-14B-Chat-GPTQ-Int8</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">gguf: This GGUF file is for Little Endian only</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Set model parameters</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Set model tokenizer</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">gguf: Adding 151387 merge(s).</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">gguf: Setting special token type eos to 151643</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">gguf: Setting special token type pad to 151643</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">gguf: Setting special token type bos to 151643</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">gguf: Setting chat_template to {% for message in messages %}{{&#39;&lt;|im_start|&gt;&#39; + message[&#39;role&#39;] + &#39;</span></code><code><span class="code-snippet_outer">&#39; + message[&#39;content&#39;] + &#39;&lt;|im_end|&gt;&#39; + &#39;</span></code><code><span class="code-snippet_outer">&#39;}}{% endfor %}{% if add_generation_prompt %}{{ &#39;&lt;|im_start|&gt;assistant</span></code><code><span class="code-snippet_outer">&#39; }}{% endif %}</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Exporting model to &#39;converted.bin&#39;</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">gguf: loading model part &#39;model-00001-of-00005.safetensors&#39;</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">token_embd.weight, n_dims = 2, torch.float16 --&gt; float16</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">blk.0.attn_norm.weight, n_dims = 1, torch.float16 --&gt; float32</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">blk.0.ffn_down.bias, n_dims = 1, torch.float16 --&gt; float32</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Can not map tensor &#39;model.layers.0.mlp.down_proj.g_idx&#39;</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">尝试使用无量化模型Qwen1.5-14B-Chat</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">错误，这个原因是由于镜像内未安装git-lfs</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">gguf: loading model part &#39;model-00001-of-00008.safetensors&#39;</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">Traceback (most recent call last):</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">  File &#34;/data/project/qwen-ollama/ollama/llm/llama.cpp/convert-hf-to-gguf.py&#34;, line 1937, in &lt;module&gt;</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">    main()</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">  File &#34;/data/project/qwen-ollama/ollama/llm/llama.cpp/convert-hf-to-gguf.py&#34;, line 1931, in main</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">    model_instance.write()</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">  File &#34;/data/project/qwen-ollama/ollama/llm/llama.cpp/convert-hf-to-gguf.py&#34;, line 152, in write</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">    self.write_tensors()</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">  File &#34;/data/project/qwen-ollama/ollama/llm/llama.cpp/convert-hf-to-gguf.py&#34;, line 113, in write_tensors</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">    for name, data_torch in self.get_tensors():</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">  File &#34;/data/project/qwen-ollama/ollama/llm/llama.cpp/convert-hf-to-gguf.py&#34;, line 71, in get_tensors</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">    ctx = cast(ContextManager[Any], safe_open(self.dir_model / part_name, framework=&#34;pt&#34;, device=&#34;cpu&#34;))</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">safetensors_rust.SafetensorError: Error while deserializing header: HeaderTooLarge</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">执行转换，占用的是CPU，无GPU占用</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000593" data-ratio="0.4829500396510706" data-s="300,640" style="" data-type="png" data-w="1261" src="https://wechat2rss.xlab.app/img-proxy/?k=8da8c1e4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYiaEeE6nK4kzJIePhIEh7mnzHxiaoHjn2Okx3zhDCyAw6PSoBd3QU2AdIg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">cpu占用率</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">cover成功</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000591" data-ratio="0.28097731239092494" data-s="300,640" style="" data-type="png" data-w="573" src="https://wechat2rss.xlab.app/img-proxy/?k=e66acab1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYia5w0cEoh8NmJwxX5LcCQgbSBic0Uw6yYQ878Goe2jUrzjQicduf6YB95Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">转换成功</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">7、量化模型</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">llm/llama.cpp/quantize converted.bin quantized.bin q4_0</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">针对qwen特殊配置，这里是量化int8</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">llm/llama.cpp/quantize converted.bin qwen_v1.5_quantized_int8.bin q8_0</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">成功</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000592" data-ratio="0.1272" data-s="300,640" style="" data-type="png" data-w="1250" src="https://wechat2rss.xlab.app/img-proxy/?k=ae6b414f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYiaoRtWGwlyEbjea7UEFl6gphicPTNh5H8mURxoPdYEDMBVEhbz4NFgFJw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">量化成功</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">8、构造文件 <strong><code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;word-break: break-all;">Modelfile</code></strong></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">FROM qwen_v1.5_quantized_int8.bin</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">TEMPLATE &#34;[INST] {{ .Prompt }} [/INST]&#34;</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">9、创建一个 <strong>Ollama 模型</strong></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">最终，从Modelfile创建一个模型</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">ollama create example -f Modelfile</span></code></pre></section><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">针对qwen</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">ollama create qwen1.5-int8 -f Modelfile</span></code></pre></section><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000595" data-ratio="0.20342857142857143" data-s="300,640" style="" data-type="png" data-w="875" src="https://wechat2rss.xlab.app/img-proxy/?k=f52a4a40&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYiaA5goT0u0gwZMVSR1bGNwicaZh3Tse12K5fCRe3I2wOIwK2gMzFaicmiaA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">创建模型</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">10、运行你的模型</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">ollama run qwen1.5-int8 &#34;who are you?&#34;</span></code></pre></section><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000594" data-ratio="0.0649458784346378" data-s="300,640" style="" data-type="png" data-w="1201" src="https://wechat2rss.xlab.app/img-proxy/?k=c604c6ea&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYiaT3FicibPycibSlDEGRskysd0ERZGdNqibqEZbYiajJvwvPwowQXMV09we5w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">运行模型</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">接口测试</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">curl <a href="http://192.168.3.199:11434/api/generate" target="_blank">http://192.168.3.199:11434/api/generate</a> -d &#39;{</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">  &#34;model&#34;: &#34;qwen1.5-int8:latest&#34;,</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">  &#34;prompt&#34;: &#34;Why is the sky blue?&#34;</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">}&#39;</span></code></pre></section><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000596" data-ratio="0.444" data-s="300,640" style="" data-type="png" data-w="1000" src="https://wechat2rss.xlab.app/img-proxy/?k=ad62e594&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYiaYmpIQFONqmvkWHsA8SNe8qAlP7xBQQRUGkxNWDkict26oa8mqpX4y7w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">api测试结果</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">继续测试（No streaming）</p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="jsx"><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">curl <a href="http://192.168.3.199:11434/api/generate" target="_blank">http://192.168.3.199:11434/api/generate</a> -d &#39;{</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">  &#34;model&#34;: &#34;qwen1.5-int8:latest&#34;,</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">  &#34;prompt&#34;: &#34;Why is the sky blue?&#34;,</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">  &#34;stream&#34;: false</span></code><code style="border-radius: 0px;"><span class="code-snippet_outer" style="line-height: 26px;">}&#39;</span></code></pre></section><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000597" data-ratio="0.1250656857593274" data-s="300,640" style="" data-type="png" data-w="1903" src="https://wechat2rss.xlab.app/img-proxy/?k=e14a1f96&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYia07Ziaichgmtr4W5SwljMqPdhxkMXkvrYibf88TbnqetAGZfuxicjBibPbUg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">api测试结果</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">消耗资源</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-imgfileid="100000598" data-ratio="0.448768864177919" data-s="300,640" style="" data-type="png" data-w="1259" src="https://wechat2rss.xlab.app/img-proxy/?k=043c2c5b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYiaNjLpVIluOlicgIjvbth74VNK72n1yicWhPstcdDJmrTH0Pt6bcmzv46A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="markdown.com.cn编辑器" style="margin-top: 10px;margin-bottom: 10px;"><figcaption style="margin-top: 5px;text-align: center;color: #888;font-size: 14px;">GPU占用资源</figcaption></figure><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">此处显存是同时加载：gemma:7b和Qwen1.5-14B-Chat-GPTQ-Int8</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">更多接口格式，请参考ollama官方文档。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>注意</span><span style="display: none;"></span></h3><ol data-tool="markdown.com.cn编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;" class="list-paddingleft-1"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">对于在docker内部运行来说，如果没有启动systemd，所以需要手动启动对应服务</section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">ollama会建立一个ollama账户，用户目录位于<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: &#34;Operator Mono&#34;, Consolas, Monaco, Menlo, monospace;word-break: break-all;">/usr/share/ollama</code></section></li><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;text-align: left;color: rgb(1, 1, 1);">ollama默认绑定127.0.0.1 11434端口，目前可以修改host，但是无法修改port，等待社区解决或者手动映射端口</section></li></ol><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>参考</span><span></span></h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><a href="https://github.com/ollama/ollama" target="_blank">https://github.com/ollama/ollama</a></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><a href="https://ollama.com/download/linux" target="_blank">https://ollama.com/download/linux</a></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><a href="http://m.tnblog.net/hb/article/details/8200" target="_blank">http://m.tnblog.net/hb/article/details/8200</a></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><a href="https://zhuanlan.zhihu.com/p/671840823" target="_blank">https://zhuanlan.zhihu.com/p/671840823</a></p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><a href="https://github.com/ollama/ollama/blob/main/docs/api.md" target="_blank">https://github.com/ollama/ollama/blob/main/docs/api.md</a></p></section><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484250">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=700f1d74&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484250%26idx%3D1%26sn%3D89f97e77630eae6b05c08c9b3c10c7fa%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 28 Feb 2024 09:00:00 +0800</pubDate>
    </item>
    <item>
      <title>解锁应用安全的未来:从ASOC到ASPM的演进</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484234&amp;idx=1&amp;sn=c2e5d3a4e05402d5a2ff9b0753843903</link>
      <description>解锁应用安全的未来:从ASOC到ASPM的演进</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2024-02-27 15:42</span> <span style="display: inline-block;">北京</span>
</p>

<p>解锁应用安全的未来:从ASOC到ASPM的演进</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=36ca3424&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo6gXJUJ4S67wzzKiazw0bSYiaeaDFGQCLzxF6033FCdTn1ecUdDshph0nFCGYk4VGd9MnGOX9Exe8Fg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section data-tool="markdown编辑器" data-website="https://markdown.com.cn/editor" style="font-size: 16px;color: black;padding: 25px 30px;line-height: 1.6;letter-spacing: 0px;word-break: break-word;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;margin-top: -10px;"><h1 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"><span style="display: none;"></span><span>解锁应用安全的未来:从ASOC到ASPM的演进</span><span></span></h1><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">说明：笔者最近在分析ASOC及ASPM相关内容，参考legitsecurity的一篇文章（文章链接在文章末尾），笔者感觉legitsecurity对ASPM研究很完善，以下内容大部分来源于legitsecurity《unlocking-the-future-of-application-security-evolution-from-asoc-to-aspm》，笔者做了部分翻译整理工作，不足请谅解。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">应用安全编排与关联（ASOC）曾被定位为保护组织应用程序的领先解决方案，提供了一个战略框架，将各种应用安全工具和流程整合起来，更全面地减轻漏洞风险并保护免受不断演变的威胁。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">然而，应用安全面临的新挑战，特别是软件供应链漏洞、DevOps和基于云的应用程序，揭示了ASOC在当今威胁环境中的局限性。因此，一种更具适应性和全面性的解决方案——应用安全态势管理（ASPM）应运而生，以解决ASOC框架中存在的限制。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>什么是ASOC？</span><span></span></h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">应用安全编排与关联（ASOC）是一个解决方案类型，解决了保护应用程序免受潜在安全和风险威胁的关键任务。ASOC在其核心集成了各种应用安全工具和解决方案，将扫描结果、数据源和分析结合起来，以更高效地聚合这些多个工具可能产生的所有数据。这些独立的工具旨在识别、评估和减轻代码、开源库和应用软件的安全漏洞，但通常会产生大量噪音，并在上下文或优先级方面产生不一致的漏洞，拖慢了开发和安全团队的速度。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASOC试图提供一种综合的应用安全方法，弥合开发和部署之间的差距，使组织能够通过简化安全流程、自动化威胁检测和确保快速事件响应来主动保护其应用程序。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>发展历史</span><span></span></h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">在ASOC出现之前，网络安全领域依赖于传统的方法：应用程序漏洞协调（AVC）和应用程序安全测试编排（ASTO）。这些方法在一定程度上是有效的，但在2010年后，由于安全数据和应用的庞大数量和复杂性，开始举步维艰。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">为了满足更统一和全面的需求，Gartner于2019年正式将AVC和ASTO合并为ASOC。这一合并旨在为组织提供一种更适应和响应灵活的策略，以确保它们更高效地处理应用安全工具提供的数据和应用。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">在2023年，Gartner正式表明应用安全姿态管理（ASPM）将取代ASOC。ASPM代表了应用安全的下一个发展阶段，专注于从代码开发到生产的持续评估和改进，进一步增强了组织保护其应用程序的能力。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">为了更好地管理和减轻日益复杂的开发环境带来的多重风险，Gartner建议组织采用ASPM并相应地过渡其环境。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>ASOC的优势</span><span></span></h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">应用安全编排与关联（ASOC）提供了一系列的优势，显著简化了开发人员和安全团队的安全流程。其中包括：</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>时间效率</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASOC旨在为应用安全和DevSecOps团队节省时间。没有ASOC，这些团队通常会被耗时的工具、漏洞噪音和供应商管理所困扰。在ASOC之前，数据分析和关联通常是一个手动过程，必须筛选可能存在数十个工具和成千上万个数据点的情况，这可能导致错误并阻止开发团队进行更重要的工作。ASOC工具帮助自动化了这些过程，使开发人员能够专注于更重要的任务。这种自动化也加快了开发生命周期，同时确保安全措施得到统一应用。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>明确定义的安全关键绩效指标</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASOC帮助组织建立用于衡量其解决安全风险和漏洞的进展的关键绩效指标（KPI），这确保了ASOC对企业安全性产生实质性贡献，并帮助团队优先考虑关键风险和漏洞。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>持续自动化安全扫描</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASOC工具提供持续自动化的安全扫描，不断监视应用程序的漏洞和威胁，即使在动态环境中也是如此。这包括对所有资产和环境的可见性，节省时间，并减少漏洞被忽视的机会。它还确保立即发现环境中的任何新威胁，以便快速响应。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>简化漏洞管理</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASOC通过关联和编排简化了漏洞管理过程。通过聚合和关联来自各种安全工具的数据，组织可以以更简洁的方式确定最关键的漏洞及其潜在影响。这解决了安全团队面临的一个关键挑战，即被多个安全工具、过多的噪音和大量警报和潜在威胁拖累。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>增强的威胁情报</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">简化的漏洞管理流程和更好的安全数据分析转化为更强大的威胁情报能力。这种情报帮助安全团队保持对新兴威胁的领先地位，预测潜在的攻击路径，并在暴露组织之前实施主动安全措施。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASOC工具在增强网络安全方面发挥了关键作用，尤其是如果它已经发展到满足现代网络安全需求。然而，尽管ASOC具有所有这些优势，但它也存在一些局限性和不足之处。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>ASOC的挑战与限制</span><span></span></h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">尽管ASOC提供了增强应用安全的强大框架，但了解其限制以及为什么被ASPM取代是至关重要的。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>解决根本问题</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASOC并不能从根本上解决安全漏洞的根本原因，它只是报告和提醒潜在问题的存在。ASOC工具自动化安全流程以提供洞察力，但它不足以从源头上实际消除代码或环境中的任何漏洞。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>数据关联复杂性</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASOC通常涉及使用多个工具从各种来源收集数据。虽然这种数据的多样性可以提供全面的洞察力，但在工具之间关联这些数据可能是一个复杂而耗时的过程。确保不同工具的数据在ASOC中无缝对齐需要持续的配置和维护，这可能会给开发资源带来压力。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>缺乏应用上下文</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASOC在没有深入了解应用程序上下文的情况下运行。这意味着配置和规则设置主要由开发工程师完成，他们必须不断适应环境和应用程序的不断变化。随着应用程序的变化和扩展，要在ASOC中维护准确的配置以了解要查找的应用程序威胁变得成为一项运营挑战。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>生产环境可见性有限</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASOC工具无法提供生产环境的可见性或可追溯性，而这对于彻底的应用安全测试是必要的。ASOC和集成工具可以扫描存储库中的源代码，但这并不总是反映当前部署的精确状态。在具有众多存储库分支的复杂环境中，确保安全评估与实际生产环境相一致可能是具有挑战性的，影响整体可见性。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>风险评分不足</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASOC在提供有效的风险评分方面存在困难。使用各种各样的工具可能导致大量的安全警报，使得正确评估哪些威胁需要立即处理变得困难。这种缺乏细粒度和上下文可能导致ASOC和集成工具中的多个安全威胁被评为极其严重。随着时间的推移，这可能会妨碍安全部门处理应该是高优先级的漏洞，潜在地使组织面临风险。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>集成复杂性</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">在组织现有的网络安全基础设施中实施ASOC可能是复杂的，并且可能需要大量的集成技术专业知识。特别是如果开发资源已经紧张，持续的维护可能会成为一个重要问题。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">在有效的应用安全中，平衡自动化和编排的优势与优先级威胁缓解的需求至关重要。ASOC工具可能非常有用，但对于大多数组织来说，ASPM被证明是更好的选择。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>为什么ASPM是ASOC的下一个演进和替代品</span><span></span></h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">应用安全姿态管理（ASPM）正在迅速成为ASOC的首选继任者，主要是因为它解决了我们上面总结的许多限制。以下是ASPM更好地满足组织对全面应用安全的需求的一些方面。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>上下文威胁评估</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASPM不仅报告已发现的错误和漏洞，还利用从代码到云端的上下文信息分析漏洞的根本原因。通过了解这些漏洞存在的更广泛背景，ASPM可以更全面地评估相对优先级和修复工作量，提高效率和效果。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>广泛的SDLC集成</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASPM在软件开发生命周期（SDLC）的多个阶段无缝运行。这种更全面的方法确保安全措施完全集成并作为开发过程和软件供应链的一部分，减少漏洞逃脱检测的可能性，并更容易及早解决问题。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>增强的风险评分和管理</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASPM旨在简化和集中数据源，从而相比ASOC提供更清晰和更深入的风险评分和管理能力。它既精确又全面，使组织能够根据漏洞的重要性和潜在影响来优先处理漏洞，从而更有效和高效地分配资源。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>工作流工具中的修复指南</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">在现代应用安全管理中，运营和生产力问题是一个重要关注点，特别是随着组织的发展。ASPM通过在修复方面采取主动措施，在工作流工具中提供深入的上下文信息和具体的修复指南来解决这个问题。这有助于DevSecOps团队节省时间，并使他们的安全工作与开发更无缝地对齐。</p><h3 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"><span style="display: none;"></span><span>强大的关联性</span><span style="display: none;"></span></h3><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">ASPM通过分组关联和一对一发现简化了多个工具之间的安全发现关联。这简化了不同安全工具之间的关系，使安全团队能够摆脱安全问题的干扰，并快速评估漏洞和潜在威胁的影响。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>通过ASPM提升软件供应链安全性</span><span></span></h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">尽管ASOC是为了解决基于云的应用程序使用中出现的许多问题而开发的，但它并没有足够解决开发环境的复杂性、软件开发的安全需求和许多DevSecOps团队面临的操作挑战。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">这导致了ASPM的崛起，它不仅仅是漏洞发现，而是上下文评估威胁，旨在从代码到云端集成到端到端的软件开发生命周期，并提供更实用的修复指南。简而言之，ASPM代表了应用安全的重大升级，其采用率只会继续增强。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">目前国内现状是应用安全开发工具百家争鸣，百花齐放，但是没有一款可以调度编排大部分安全开发工具的平台，主要限制于安全开发意识薄弱、各家厂商工具接口不统一、漏洞评级标准不一，即便通过定制化把数据收集上来，也由于标准不统一，导致自动化分析效率低下。</p><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">应用安全开发，任重道远。</p><h2 data-tool="markdown.com.cn编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 22px;"><span style="display: none;"></span><span>参考</span><span></span></h2><p data-tool="markdown.com.cn编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"><a href="https://www.legitsecurity.com/blog/unlocking-the-future-of-application-security-evolution-from-asoc-to-aspm" target="_blank">https://www.legitsecurity.com/blog/unlocking-the-future-of-application-security-evolution-from-asoc-to-aspm</a></p></section><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484234">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=ecd77f28&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484234%26idx%3D1%26sn%3Dc2e5d3a4e05402d5a2ff9b0753843903%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 27 Feb 2024 15:42:00 +0800</pubDate>
    </item>
    <item>
      <title>Go 模块库劫持 (repojacking) 介绍 from VulnCheck</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484228&amp;idx=1&amp;sn=2a03524b6b3c9e3eb79973be0c3d8ffc</link>
      <description>Go 模块库劫持 (repojacking) 介绍 from VulnCheck</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2023-12-11 15:46</span> <span style="display: inline-block;">北京</span>
</p>

<p>Go 模块库劫持 (repojacking) 介绍 from VulnCheck</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=f9ac2bfd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo6V4iajDAUjlOzluHxOVHdQRCFQslS48G0a73icyDbxibBwoUW8xP2JwiccXR1mdlTFcN0qlLXKGHCnjA%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">背景</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">VulnCheck是一家漏洞情报初创公司，今天在浏览VulnCheck博客时发现一篇文章：Hijackable Go Module Repositories，对于Go 模块库劫持的漏洞原理讲解十分清晰明了，以下内容大部分来源于原文博客，个人只做整理，分析和总结。</p><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">VulnCheck 分析了 Go 模块生态系统，寻找其源代码存储库可能容易受到存储库劫持（repojacking）的模块。由于 GitHub 用户名更改，超过 9,000 个存储库容易受到重新劫持。VulnCheck 发现超过 6,000 个存储库由于帐户删除而容易受到重新劫持。这 15000 个存储库加起来支持超过 800000 个 Go 模块。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">为什么 Go 特别容易受到存储库劫持（repojacking）</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">Go 模块生态系统是去中心化设计的，是独一无二的。其他打包系统（例如 Pypi 或 NPM）要求开发人员创建帐户才能上传其包。这使得软件包平台能够管理用户和内容。Go语言比较特殊，Go 开发人员通过将代码推送到 GitHub 等源代码控制平台来发布模块。然后任何人都可以从软件源获取 Go 模块和 pkg.go.dev 缓存模块的详细信息。这种去中心化使得 Go 模块存储库特别容易受到重新劫持。当模块作者更改其用户名或删除其帐户时，存储库就会变得容易受到攻击。此时，攻击者可以注册新未使用的用户名，复制模块存储库，并将新模块发布到 proxy.golang.org 和 go.pkg.dev 。GitHub 确实有一些针对重新劫持的保护措施，受欢迎的仓库命名空间回退功能可以防止任何仓库“在所有者的帐户被重命名或删除之前的一周内有超过100个克隆”的再劫持。这听起来可能很合理，但对于 Go 来说却不一定。Go 模块通常由 Module 镜像缓存，因此不需要与源存储库交互或从源存储库克隆。对于某些情况，在 GitHub 上托管了一个开源库，我们每天都使用它，并且有 170 多个星，但该存储库在上周只看到了 20 个克隆。基于此，100 个克隆的保护并不一定像 GitHub 想象的那么好。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">寻找可劫持的 Go 模块</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">2023 年 6 月，Aquasec 发表了研究报告，指出数百万个可劫持的 GitHub 存储库。了解到 Go 特别容易受到这种攻击向量的影响，我们开始准确枚举有多少 Go 模块版本可能受到影响。模块版本是指一个模块及其所有版本。跟踪超过 2000 万个 Go 模块版本。它不完全是一个小数据集，但追踪可重复劫持模块的算法相对简单：</p><ol style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>1. 对于每个模块，从模块名称推断存储库 URL。例如， github.com/vulncheck-oss/go-exploit 是一个Go模块，其源代码托管在<a href="https://github.com/vulncheck-oss/go-exploit。" target="_blank">https://github.com/vulncheck-oss/go-exploit。</a></p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>2. 尝试连接到每个存储库。</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>3. HTTP 301 响应表示用户名更改、存储库名称更改或两者兼而有之。出于我们的目的，我们验证了存储库名称是否相同（例如 go-exploit ），但用户名已更改。我们还验证了原始用户帐户（例如 vulncheck-oss ）不存在。这进一步消除了存储库传输之类的东西。通过所有这些步骤的存储库被认为可能容易受到重新劫持。</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>4. HTTP 404 响应表明存储库不再存在。然后我们将查看用户名是否仍然存在。如果不是，那么这也可能容易受到重新劫持。</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>5. HTTP 200 响应表明存储库不易受到攻击。</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>6. 然后我们验证了潜在可劫持的存储库实际上在 go.pkg.dev 中有一个条目（您可以使用模块镜像缓存几乎所有内容，因此清除非 Go 模块内容非常重要）。剩下的就是大量可以被重新劫持的存储库（假设过去 7 天问题中的 100 个克隆不是问题）。我们的第一个发现是，由于用户名更改，超过 9,000 个 Go 模块 GitHub 存储库容易受到重新劫持。潜在的重新劫持会影响超过 500,000 个 Go 模块版本。为了确定存储库的受欢迎程度，我们获取了每个存储库的 GitHub 星数。我们以 0 到 1000 的桶形式绘制了结果。按星号分组的可劫持 Go 模块存储库统计图如下:</p></li><li><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6605316973415133" data-s="300,640" style="" data-type="png" data-w="978" src="https://wechat2rss.xlab.app/img-proxy/?k=31b5b109&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6V4iajDAUjlOzluHxOVHdQRDKgQ56KNGeBFwhctBgORNd2SzSuEHdSia3eXK8q2jEYochF9FWpyXSQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p></li></ol><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">可劫持 Go 模块存储库统计图</figcaption></figure><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">大多数存储库的星级为零。这些对于攻击者来说几乎没有价值。其余 3,000 个存储库的星级在 1 到 1000 之间。存储库对攻击者有价值的可能性随着星级的增加而增加，但仅靠星级并不能说明攻击有多有用。Go 生态系统中的实际使用很重要，因为利用依赖于开发人员更新到新模块。我们跟踪的另一个类别是可劫持的存储库，因为 GitHub 帐户已被删除。我们发现了超过 6,000 个此类存储库，最终影响了近 300,000 个模块版本。由于存储库已被删除，我们无法找到它们有多少颗星。攻击者必须依赖于查找使用模式 - 最终搜索代码的导入。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.4642184557438795" data-s="300,640" style="" data-type="png" data-w="1062" src="https://wechat2rss.xlab.app/img-proxy/?k=fb23aeb8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo6V4iajDAUjlOzluHxOVHdQRbrk5sd6oxTwVGyvVaicZhE6yu2yBRecJqnz67pTwqhZLbEdibIrRYcdg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">搜索代码导入</figcaption></figure><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">这是一个沉重的负担，但对于合适的攻击者来说是值得的。尽管如此，即使在野外找到用途也是不够的。最终，受害者将需要更新到攻击者的新模块，因为攻击者无法覆盖旧模块。因此，尽管威胁确实存在，但 Go 生态系统内的重新劫持对于攻击者来说并不是立竿见影的胜利。</span></p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">结论</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">VulnCheck认为缓解重新劫持漏洞是 Go 或 GitHub 必须承担的任务，这个和禅道创始人王春生前段时间分享了一个开源协议在中国面临的 bug：开源软件许可协议通常会表明作者不对用户使用该开源软件所造成的任何问题负责，但是，这种条款，在中国，是违法的观点类似。这个观点博主不做置评，对于重劫持漏洞，博主个人观点则认为github只是一个代码托管的平台，应提供更为灵活的重劫持保护措施，责任方应由go官方来负责和承担。在那之前，Go 开发人员应了解他们使用的模块以及这些模块源自的存储库的状态非常重要。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">参考</h2><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://vulncheck.com/blog/go-repojacking【go-repojacking】" target="_blank">https://vulncheck.com/blog/go-repojacking【go-repojacking】</a></p></li></ul><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484228">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=0586883c&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484228%26idx%3D1%26sn%3D2a03524b6b3c9e3eb79973be0c3d8ffc%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 11 Dec 2023 15:46:00 +0800</pubDate>
    </item>
    <item>
      <title>使用codeshell进行代码安全评估</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484221&amp;idx=1&amp;sn=879fc4c065637b1af2d9c46a81cc8f13</link>
      <description>使用codeshell进行代码安全评估</description>
      <content:encoded><![CDATA[<p>
<span>sanduo</span> <span>2023-11-07 18:42</span> <span style="display: inline-block;">北京</span>
</p>

<p>使用codeshell进行代码安全评估</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=f2178e9d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo4m8lH8RVXibqqbHbO3qiaHW4etWy9UGfqBLzf1LjeWJDbBso8w0YZDPK285IKOZJtW4rLLbiaoYYn6w%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">背景</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">北京大学软件工程国家工程研究中心知识计算实验室联合四川天府银行AI实验室，正式开源70亿参数的代码大模型CodeShell，成为同等规模最强代码基座。与此同时，团队将软件开发代码助手的完整解决方案全部开源，人手一个本地化轻量化的智能代码助手的时代已经来临！</p><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">CodeShell代码：<a href="https://github.com/WisdomShell/codeshell" target="_blank">https://github.com/WisdomShell/codeshell</a><br/>CodeShell基座模型：<a href="https://huggingface.co/WisdomShell/CodeShell-7B" target="_blank">https://huggingface.co/WisdomShell/CodeShell-7B</a><br/>代码助手VSCode插件：<a href="https://github.com/WisdomShell/codeshell-vscode" target="_blank">https://github.com/WisdomShell/codeshell-vscode</a></p><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">目前拥有以下优势：</p><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <strong style="line-height: 1.75;color: rgb(15, 76, 129);">强大的性能</strong>：CodelShell在HumanEval和MBPP上达到了7B代码基座大模型的最优性能</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <strong style="line-height: 1.75;color: rgb(15, 76, 129);">完整的体系</strong>：除了代码大模型，同时开源IDE（VS Code与JetBrains）插件，形成开源的全栈技术体系</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <strong style="line-height: 1.75;color: rgb(15, 76, 129);">轻量化部署</strong>：支持本地C++部署，提供轻量快速的本地化软件开发助手解决方案</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <strong style="line-height: 1.75;color: rgb(15, 76, 129);">全面的评测</strong>：提供支持完整项目上下文、覆盖代码生成、代码缺陷检测与修复、测试用例生成等常见软件开发活动的多任务评测体系（即将开源）</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <strong style="line-height: 1.75;color: rgb(15, 76, 129);">高效的训练</strong>：基于高效的数据治理体系，CodeShell在完全冷启动情况下，只训练了五千亿Token即获得了优异的性能</p></li></ul><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">安全狗，重点关注安全检测功能。codeshell号称可以检测代码中的潜在安全风险，如可能出现的SQL注入、跨站脚本攻击等，帮助排查安全性风险。对代码进行深入分析，检测潜在的错误、冗余代码和性能瓶颈，并为开发者提供相应的修复建议；基于代码逻辑，自动创建测试用例，以辅助进行代码测试和验证，确保代码的正确性和稳定性。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">准备</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">获取模型 我这里选取的是CodeShell-7B-Chat，如果资源不够，可以采用量化模型。</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPffp08RR5mAgXExwSZUbUgHqjpolRefM6un9fKB7ia0bCVtTv97pkwdM0XhPgtnO4CVfINbcibqXHWb4cRNiaP2gzQ/640?wx_fmt=svg&#34;);background-position: 14px 10px;background-repeat: no-repeat;background-size: 40px;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>git clone https</span><span>:</span><span>//huggingface.co/WisdomShell/CodeShell-7B-Chat</span></code></pre><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">安装</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">首先克隆项目</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPffp08RR5mAgXExwSZUbUgHqjpolRefM6un9fKB7ia0bCVtTv97pkwdM0XhPgtnO4CVfINbcibqXHWb4cRNiaP2gzQ/640?wx_fmt=svg&#34;);background-position: 14px 10px;background-repeat: no-repeat;background-size: 40px;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>git clone https</span><span>:</span><span>//github.com/WisdomShell/codeshell</span><br/><span>cd codeshell</span><br/><span>conda create </span><span>-</span><span>n codeshell python</span><span>=</span><span>3.10</span><br/><span>conda activate codeshell</span><br/><span>pip install requirements</span><span>.</span><span>txt</span></code></pre><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">昨天作者遗漏requirements.txt，作者响应很及时，很快就补上了，如果需要评估web demo，还需要另外安装依赖</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPffp08RR5mAgXExwSZUbUgHqjpolRefM6un9fKB7ia0bCVtTv97pkwdM0XhPgtnO4CVfINbcibqXHWb4cRNiaP2gzQ/640?wx_fmt=svg&#34;);background-position: 14px 10px;background-repeat: no-repeat;background-size: 40px;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>pip install demos</span><span>/</span><span>requirements_web_demo</span><span>.</span><span>txt</span></code></pre><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">个人环境还缺乏部分依赖，手动安装就行，灵活处理。</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPffp08RR5mAgXExwSZUbUgHqjpolRefM6un9fKB7ia0bCVtTv97pkwdM0XhPgtnO4CVfINbcibqXHWb4cRNiaP2gzQ/640?wx_fmt=svg&#34;);background-position: 14px 10px;background-repeat: no-repeat;background-size: 40px;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>pip install bitsandbytes</span></code></pre><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">运行</h2><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPffp08RR5mAgXExwSZUbUgHqjpolRefM6un9fKB7ia0bCVtTv97pkwdM0XhPgtnO4CVfINbcibqXHWb4cRNiaP2gzQ/640?wx_fmt=svg&#34;);background-position: 14px 10px;background-repeat: no-repeat;background-size: 40px;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>python web_demo</span><span>.</span><span>py</span><span> </span><span>--</span><span>server</span><span>-</span><span>port</span><span>=</span><span style="color: rgb(209, 154, 102);">80</span><span> </span><span>--</span><span>server</span><span>-</span><span>name</span><span>=</span><span style="color: rgb(209, 154, 102);">0.0</span><span style="color: rgb(209, 154, 102);"><span>.</span><span>0</span></span><span style="color: rgb(209, 154, 102);">.0</span><span> </span><span>-</span><span>c </span><span>/</span><span>data</span><span>/</span><span>models</span><span>/</span><span style="color: rgb(230, 192, 123);">CodeShell</span><span>-</span><span>7B</span><span>-</span><span style="color: rgb(230, 192, 123);">Chat</span><span> </span></code></pre><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.09486166007905138" data-s="300,640" style="" data-type="png" data-w="1265" src="https://wechat2rss.xlab.app/img-proxy/?k=e057021c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4m8lH8RVXibqqbHbO3qiaHW4onaeePomllaONSeTbPRhDiaR4ibX50icxPXEOWHQxL6B0zo5dkTzwwo4g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">加载</figcaption></figure><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">正常加载demo</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.5055" data-s="300,640" style="" data-type="png" data-w="2000" src="https://wechat2rss.xlab.app/img-proxy/?k=bb562696&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4m8lH8RVXibqqbHbO3qiaHW45ajUOxTdHEe7QIJzCqzUZzGG6Xwd4YrFkL9ibkSSFKP0Y0akWfNV1WQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">web demo</figcaption></figure><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">注意：我这里使用显卡为3090ti，显存为24G，运行全量模型占用显存大约16G，仅供参考。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">错误：</h2><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">ImportError: Using <code style="line-height: 1.75;font-size: 13.86px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;word-break: break-all;">low_cpu_mem_usage=True</code> or a <code style="line-height: 1.75;font-size: 13.86px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;word-break: break-all;">device_map</code> requires Accelerate: <code style="line-height: 1.75;font-size: 13.86px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;word-break: break-all;">pip install accelerate</code></h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">手动安装</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPffp08RR5mAgXExwSZUbUgHqjpolRefM6un9fKB7ia0bCVtTv97pkwdM0XhPgtnO4CVfINbcibqXHWb4cRNiaP2gzQ/640?wx_fmt=svg&#34;);background-position: 14px 10px;background-repeat: no-repeat;background-size: 40px;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>pip install accelerate </span></code></pre><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">torch.cuda.OutOfMemoryError: CUDA out of memory.</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">换模型或者换显卡资源</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">评估</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">prompt参考：</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPffp08RR5mAgXExwSZUbUgHqjpolRefM6un9fKB7ia0bCVtTv97pkwdM0XhPgtnO4CVfINbcibqXHWb4cRNiaP2gzQ/640?wx_fmt=svg&#34;);background-position: 14px 10px;background-repeat: no-repeat;background-size: 40px;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>检查以下</span><span>java</span><span>代码，是否存在安全性问题,请给出优化建议:</span></code></pre><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">评估代码片段为：</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPffp08RR5mAgXExwSZUbUgHqjpolRefM6un9fKB7ia0bCVtTv97pkwdM0XhPgtnO4CVfINbcibqXHWb4cRNiaP2gzQ/640?wx_fmt=svg&#34;);background-position: 14px 10px;background-repeat: no-repeat;background-size: 40px;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>package</span><span> com</span><span>.</span><span>suyu</span><span>.</span><span>secexample</span><span>.</span><span>rce</span><span>.</span><span>controller</span><span>;</span><br/><span>import</span><span> org</span><span>.</span><span>springframework</span><span>.</span><span>stereotype</span><span>.</span><span>Controller</span><span>;</span><br/><span>import</span><span> org</span><span>.</span><span>springframework</span><span>.</span><span>ui</span><span>.</span><span>Model</span><span>;</span><br/><span>import</span><span> org</span><span>.</span><span>springframework</span><span>.</span><span>web</span><span>.</span><span>bind</span><span>.</span><span>annotation</span><span>.</span><span>PostMapping</span><span>;</span><br/><span>import</span><span> org</span><span>.</span><span>springframework</span><span>.</span><span>web</span><span>.</span><span>bind</span><span>.</span><span>annotation</span><span>.</span><span>RequestMapping</span><span>;</span><br/><span>import</span><span> org</span><span>.</span><span>springframework</span><span>.</span><span>web</span><span>.</span><span>bind</span><span>.</span><span>annotation</span><span>.</span><span>RequestParam</span><span>;</span><br/><span>import</span><span> java</span><span>.</span><span>io</span><span>.</span><span>BufferedReader</span><span>;</span><br/><span>import</span><span> java</span><span>.</span><span>io</span><span>.</span><span>IOException</span><span>;</span><br/><span>import</span><span> java</span><span>.</span><span>io</span><span>.</span><span>InputStream</span><span>;</span><br/><span>import</span><span> java</span><span>.</span><span>io</span><span>.</span><span>InputStreamReader</span><span>;</span><br/><span>@Controller</span><br/><span>public</span><span> </span><span>class</span><span> rcecontroller </span><span>{</span><br/><span>    </span><span>@RequestMapping</span><span>(</span><span>&#34;/rce&#34;</span><span>)</span><br/><span>    </span><span>public</span><span> </span><span>String</span><span> input</span><span>(){</span><br/><span>        </span><span>return</span><span> </span><span>&#34;rce/rce&#34;</span><span>;</span><br/><span>    </span><span>}</span><br/><span>    </span><span>@PostMapping</span><span>(</span><span>&#34;/rceoutput&#34;</span><span>)</span><br/><span>    </span><span>public</span><span> </span><span>String</span><span> index</span><span>(</span><span>@RequestParam</span><span>(</span><span>&#34;command&#34;</span><span>)</span><span> </span><span>String</span><span> command</span><span>,</span><span> </span><span>Model</span><span> model</span><span>){</span><br/><span>        </span><span>if</span><span>(</span><span>command</span><span>==</span><span>&#34;&#34;</span><span> </span><span>|</span><span> command</span><span>==</span><span>null</span><span>){</span><br/><span>            command</span><span>=</span><span> </span><span>&#34;whoami&#34;</span><span>;</span><br/><span>        </span><span>}</span><br/><span>        </span><span>Process</span><span> p </span><span>=</span><span> </span><span>null</span><span>;</span><br/><span>        </span><span>String</span><span> result </span><span>=</span><span> </span><span>null</span><span>;</span><br/><span>        </span><span>try</span><span> </span><span>{</span><br/><span>            p </span><span>=</span><span> </span><span>Runtime</span><span>.</span><span>getRuntime</span><span>().</span><span>exec</span><span>(</span><span>command</span><span>);</span><br/><span>        </span><span>}</span><span> </span><span>catch</span><span> </span><span>(</span><span>IOException</span><span> e</span><span>)</span><span> </span><span>{</span><br/><span>            e</span><span>.</span><span>printStackTrace</span><span>();</span><br/><span>        </span><span>}</span><br/><span>        </span><span>InputStream</span><span> </span><span>is</span><span> </span><span>=</span><span> p</span><span>.</span><span>getInputStream</span><span>();</span><br/><span>        </span><span>BufferedReader</span><span> reader </span><span>=</span><span> </span><span>new</span><span> </span><span>BufferedReader</span><span>(</span><span>new</span><span> </span><span>InputStreamReader</span><span>(</span><span>is</span><span>));</span><br/><span>        </span><span>String</span><span> s </span><span>=</span><span> </span><span>null</span><span>;</span><br/><span>        </span><span>while</span><span> </span><span>(</span><span>true</span><span>)</span><span> </span><span>{</span><br/><span>            </span><span>try</span><span> </span><span>{</span><br/><span>                </span><span>if</span><span> </span><span>(!((</span><span>s </span><span>=</span><span> reader</span><span>.</span><span>readLine</span><span>())</span><span> </span><span>!=</span><span> </span><span>null</span><span>))</span><span> </span><span>break</span><span>;</span><br/><span>            </span><span>}</span><span> </span><span>catch</span><span> </span><span>(</span><span>IOException</span><span> e</span><span>)</span><span> </span><span>{</span><br/><span>                e</span><span>.</span><span>printStackTrace</span><span>();</span><br/><span>            </span><span>}</span><br/><span>            result </span><span>=</span><span> s</span><span>;</span><br/><span>        </span><span>}</span><br/><span>        model</span><span>.</span><span>addAttribute</span><span>(</span><span>&#34;result&#34;</span><span>,</span><span>result</span><span>);</span><br/><span>        </span><span>return</span><span> </span><span>&#34;rce/rceoutput&#34;</span><span>;</span><br/><span>    </span><span>}</span><br/><span>}</span></code></pre><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">结果如下：</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.331" data-s="300,640" style="" data-type="png" data-w="2000" src="https://wechat2rss.xlab.app/img-proxy/?k=08835c9d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4m8lH8RVXibqqbHbO3qiaHW41Lr6D4rOiaSefGvJicnGsS6iaCV4tdBZTjE3SWibDpXeM0ArXx3ZCKnAmw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">结果</figcaption></figure><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">占用资源：</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.46048387096774196" data-s="300,640" style="" data-type="png" data-w="1240" src="https://wechat2rss.xlab.app/img-proxy/?k=a02473dd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4m8lH8RVXibqqbHbO3qiaHW4icQ5Id7wcADErARCQialib9EuxmqJ5mg35eSnLFt2cclp42QV9SzuaLyQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">占用资源</figcaption></figure><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">遇到不准确及幻觉</span></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.329" data-s="300,640" style="" data-type="png" data-w="2000" src="https://wechat2rss.xlab.app/img-proxy/?k=76549dc0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4m8lH8RVXibqqbHbO3qiaHW48a2ZaQQN0euev1m5l2uPxNhxGsFHfsJvX93fibt0YSBShwoZwf61k7w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">回答不准确</figcaption></figure><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">使用vscode插件</h2><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">安装配置</h3><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">vscode应用市场检索：CodeShell VSCode，直接安装即可，也可以自行编译安装。</span><br style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;"/></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.4010791366906475" data-s="300,640" style="" data-type="png" data-w="556" src="https://wechat2rss.xlab.app/img-proxy/?k=3ade2b4e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4m8lH8RVXibqqbHbO3qiaHW4ibWKic4BmPe0KAZ1vks8s2nvwwPnkT3lFXRNsfMJFuJ2q8NBTjl7LQyw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">vscode插件</figcaption></figure><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">使用vscode组件，有两种模式，一种使用CPU，采用llama_cpp量化的形式加载，速度稍微缓慢一些，另外一种是使用text-generation-inference(TGI)加载模型。详情详解项目README。插件配置如下：</span><br style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;"/></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.8287172011661808" data-s="300,640" style="" data-type="png" data-w="1372" src="https://wechat2rss.xlab.app/img-proxy/?k=158e0ed9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4m8lH8RVXibqqbHbO3qiaHW4lq4k6YhLkYzsaxDiaP1sNT2OnIC45Aibxfodgtzib9QdXiaPSxWic0ib5XEQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">插件配置</figcaption></figure><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">注意： </p><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">1.正常配置地址和端口<br/>2.这里只支持llama.cpp和tgi两种连接方式，目前(2023-11-07)不支持openai格式，需要手动修改插件<br/>3.tokens根据实际情况修改</p><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">编译运行llama_cpp_for_codeshell</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">这里尝试编译llama_cpp_for_codeshell</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPffp08RR5mAgXExwSZUbUgHqjpolRefM6un9fKB7ia0bCVtTv97pkwdM0XhPgtnO4CVfINbcibqXHWb4cRNiaP2gzQ/640?wx_fmt=svg&#34;);background-position: 14px 10px;background-repeat: no-repeat;background-size: 40px;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>git clone https</span><span>:</span><span>//github.com/WisdomShell/llama_cpp_for_codeshell.git</span><br/><span>cd llama_cpp_for_codeshell</span><br/><span>make</span></code></pre><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">运行：</p><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPffp08RR5mAgXExwSZUbUgHqjpolRefM6un9fKB7ia0bCVtTv97pkwdM0XhPgtnO4CVfINbcibqXHWb4cRNiaP2gzQ/640?wx_fmt=svg&#34;);background-position: 14px 10px;background-repeat: no-repeat;background-size: 40px;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>.</span><span>/server -m ./</span><span>models</span><span>/</span><span>codeshell</span><span>-</span><span>chat</span><span>-</span><span>q4_0</span><span>.</span><span>gguf </span><span>--</span><span>host </span><span>127.0</span><span>.</span><span>0.1</span><span> </span><span>--</span><span>port </span><span>8080</span></code></pre><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">注意，这里使用的是量化模型，加载模型要注意。结果没什么影响，只是速度有些缓慢。</p><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">使用TGI加载模型</h3><pre style="color: rgb(171, 178, 191);background: rgb(40, 44, 52);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;"><span style="padding: initial;display: block;height: 25px;background-color: transparent;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_svg/nibxxlib1VaPffp08RR5mAgXExwSZUbUgHqjpolRefM6un9fKB7ia0bCVtTv97pkwdM0XhPgtnO4CVfINbcibqXHWb4cRNiaP2gzQ/640?wx_fmt=svg&#34;);background-position: 14px 10px;background-repeat: no-repeat;background-size: 40px;"></span><code style="font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;white-space-collapse: collapse;"><span>docker run </span><span>--</span><span>gpus </span><span>&#39;all&#39;</span><span> </span><span>--</span><span>shm</span><span>-</span><span>size </span><span>1g</span><span> </span><span>-</span><span>p </span><span>9090</span><span>:</span><span>80</span><span> </span><span>-</span><span>v </span><span>/</span><span>data</span><span>/</span><span>models</span><span>:/</span><span>data \</span><br/><span>        </span><span>--</span><span>env LOG_LEVEL</span><span>=</span><span>&#34;info,text_generation_router=debug&#34;</span><span> \</span><br/><span>        ghcr</span><span>.</span><span>nju</span><span>.</span><span>edu</span><span>.</span><span>cn</span><span>/</span><span>huggingface</span><span>/</span><span>text</span><span>-</span><span>generation</span><span>-</span><span>inference</span><span>:</span><span>1.0</span><span>.</span><span>3</span><span> \</span><br/><span>        </span><span>--</span><span>model</span><span>-</span><span>id </span><span>/</span><span>data</span><span>/</span><span>CodeShell</span><span>-</span><span>7B</span><span>-</span><span>Chat</span><span> </span><span>--</span><span>num</span><span>-</span><span>shard </span><span>1</span><span> \</span><br/><span>        </span><span>--</span><span>max</span><span>-</span><span>total</span><span>-</span><span>tokens </span><span>5000</span><span> </span><span>--</span><span>max</span><span>-</span><span>input</span><span>-</span><span>length </span><span>4096</span><span> \</span><br/><span>        </span><span>--</span><span>max</span><span>-</span><span>stop</span><span>-</span><span>sequences </span><span>12</span><span> </span><span>--</span><span>trust</span><span>-</span><span>remote</span><span>-</span><span>code</span></code></pre><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">这里使用南大的ghcr镜像源，速度不错，推荐给大家。个人设备是24G显存，使用TGI加载模型会爆显存。</span><br style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;"/></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.08093385214007782" data-s="300,640" style="" data-type="png" data-w="1285" src="https://wechat2rss.xlab.app/img-proxy/?k=aef6dd28&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4m8lH8RVXibqqbHbO3qiaHW4RnDWHLFBZKUDHO3kal6VEPeFBicibCEUoOzSebxrshxRvxqWRRia29f8w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">oom</figcaption></figure><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">测试</h3><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">我这里由于操作系统的语言是英文，导致返回的结果为英文，codeshell是支持中文的。对于代码自动补全我就不演示了，各位自行摸索。</span><br style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;"/></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6540975364504776" data-s="300,640" style="" data-type="png" data-w="1989" src="https://wechat2rss.xlab.app/img-proxy/?k=dbeeb6c9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo4m8lH8RVXibqqbHbO3qiaHW4sickG1d2VUu7zGUrKPnwfOGbTkYuQ6ba2NwRlkvdNv2kD0WweYibhJCQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">测试</figcaption></figure><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">总结</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">1、可以辅助代码审计人员分析代码，只能辅助，没当作SAST来使用，再说SAST也有大量误报，都需要人工来复核。<br/>2、由于codeshell 上下文token限制，没法去分析业务系统，代码释义可能不准确，这些在使用的过程中需要注意。<br/>3、codeshell是首个支持代码安全分析的大模型，相当不容易。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">参考</h2><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://github.com/WisdomShell/codeshell【codeshell】" target="_blank">https://github.com/WisdomShell/codeshell【codeshell】</a></p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==&amp;mid=2652393209&amp;idx=1&amp;sn=b36efc37e06c5b725cbce2fe22e3c854&amp;scene=21#wechat_redirect" title="https://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==&amp;mid=2652393209&amp;idx=1&amp;sn=b36efc37e06c5b725cbce2fe22e3c854&amp;scene=21#wechat_redirect" style="line-height: 1.75;" data-linktype="2"><a href="https://mp.weixin.qq.com/s/lLKGDdslHgWhf6Skb-wldg" target="_blank">https://mp.weixin.qq.com/s/lLKGDdslHgWhf6Skb-wldg</a></a>【人手一个编程助手！北大最强代码大模型CodeShell-7B开源，性能霸榜，IDE插件全开源】</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://github.com/huggingface/text-generation-inference【text-generation-inference】" target="_blank">https://github.com/huggingface/text-generation-inference【text-generation-inference】</a></p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://github.com/WisdomShell/codeshell-vscode【codeshell-vscode】" target="_blank">https://github.com/WisdomShell/codeshell-vscode【codeshell-vscode】</a></p></li></ul><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484221">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=a2e7e363&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484221%26idx%3D1%26sn%3D879fc4c065637b1af2d9c46a81cc8f13%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 07 Nov 2023 18:42:00 +0800</pubDate>
    </item>
    <item>
      <title>使用langchain-chatchat搭建安全知识库</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484195&amp;idx=1&amp;sn=5cc6e077ec5afb2893999a34fe416c96</link>
      <description>使用langchain-chatchat搭建安全知识库</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2023-10-20 14:51</span> <span style="display: inline-block;">北京</span>
</p>

<p>使用langchain-chatchat搭建安全知识库</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=7d3382a6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyQkCwQQ3kOmnicbho7V6O1gw7OLuWV4icsQXCq4Le6cZT8u1FSz76Blww%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">背景</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">LLM大环境下，无论开源模型或者商业模型，都是使用通用预料进行训练的，一方面是缺乏对垂直行业的支持，另一方面是数据的机密性导致无法开源数据。针对这种情况，我们尝试使用langchain-chatchat+主流开源大预言模型来搭建私有的安全知识库。</p><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">主要目的是为了让网络安全行业知识更加易于使用和查找，利用自然语言处理技术对每个模块中的关键词、短语进行标注，建立起一个语义化的知识库。用户可以通过简单的关键词搜索+语义组合搜索来快速找到所需信息，提高信息获取的效率和准确性。另外，还可以识别用户的意图，帮助用户发现可能感兴趣的内容，从而提高用户体验。通过这种方式，可以建立一个全面、权威的网络安全行业知识库，为用户提供更好的网络安全保护服务。</p><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">注意：以下内容适用于2023年10月16日前，由于目前技术不稳定，每天都会发生技术迭代，请酌情参考。有问题给我留言即可。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">原理</h2><blockquote style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;border-left: none;padding: 1em;border-radius: 8px;background: rgb(247, 247, 247);margin: 2em 8px;"><p style="line-height: 1.75;font-size: 1em;letter-spacing: 0.1em;color: rgb(80, 80, 80);">加载文件 -&gt; 读取文本 -&gt; 文本分割 -&gt; 文本向量化 -&gt; 问句向量化 -&gt; 在文本向量中匹配出与问句向量最相似的 top k个 -&gt; 匹配出的文本作为上下文和问题一起添加到 prompt中 -&gt; 提交给 LLM生成回答。</p></blockquote><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6620370370370371" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=3e2687bf&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyrKtEHHt9SQxqaKGflG3KibV4ne23ZEv5sOjcBXjG6hLHv0B1eSicmeAA%2F640%3Fwx_fmt%3Dpng"/></p><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">技术原理</figcaption></figure><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">文档视角：</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6277777777777778" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=2d4608f2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyze52libSTFuVDWAcQ5tPQYzT9v7xO5mR0HcC1K9Z8caVRB8KmiauqfGg%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">文档视角</figcaption></figure><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">准备</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">1、心仪的开源大语言模型，模型自行到huggingface上下载，我们尝试了baichuan2-78和qwen-7b效果都不错，向量模型推荐bge-large-zh-v1.5。2、丹炉，这个自己准备了，环境可以参考我上一篇文章，或者自行搭建。<br/>3、相关知识库，我们这里使用常见的网络安全标准来测试。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">安装</h2><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">使用conda搭建环境</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">克隆项目</p><pre style="color: rgb(88, 110, 117);background: rgb(253, 246, 227);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;padding: 1em;margin: 10px 8px;"><code style="line-height: 1.75;font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;white-space-collapse: collapse;">git clone <a href="https://github.com/chatchat-space/Langchain-Chatchat" target="_blank">https://github.com/chatchat-space/Langchain-Chatchat</a></code></pre><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">进入项目目录，使用已下命令安装依赖环境</p><pre style="color: rgb(88, 110, 117);background: rgb(253, 246, 227);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;padding: 1em;margin: 10px 8px;"><code style="line-height: 1.75;font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;white-space-collapse: collapse;">conda create -n langchain-chat python=3.10<br/>conda activate langchain-chat<br/>pip install -r requirements.txt</code></pre><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">配置</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">在项目目录下，复制configs目录下所有<code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">.example</code>的文件为<code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">.py</code>,如：复制模型相关参数配置模板文件 <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">configs/model_config.py.example</code> 存储至项目路径下 <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">./configs</code> 路径下，并重命名为 <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">model_config.py</code>。</p><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">在开始执行 Web UI 或命令行交互前，请先检查 <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">configs/model_config.py</code> 和 <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">configs/server_config.py</code> 中的各项模型参数设计是否符合需求：</p><h4 style="font-size: 1em;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-weight: bold;margin: 2em 8px 0.5em;color: rgb(15, 76, 129);">模型配置</h4><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">打开<code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">configs/model_config.py</code></p><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 请确认已下载至本地的 LLM 模型本地存储路径写在 <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">llm_model_dict</code> 对应模型的 <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">local_model_path</code> 属性中，如: <code style="line-height: 1.75;font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;">&#34;Qwen-14B-Chat&#34;: &#34;/data/models/Qwen-14B-Chat&#34;,</code></p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 请确认已下载至本地的 Embedding 模型本地存储路径写在 <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">embedding_model_dict</code> 对应模型位置，如： <code style="line-height: 1.75;font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;">&#34;bge-large-zh-v1.5&#34;: &#34;/data/models/bge-large-zh-v1.5&#34;,</code></p></li></ul><h4 style="font-size: 1em;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-weight: bold;margin: 2em 8px 0.5em;color: rgb(15, 76, 129);">其他配置(高级)</h4><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">如果需要指定端口，我这里由于是在容器中运行，需要指定端口，我这里需要指定80， 修改webui端口信息，</span><code style="letter-spacing: normal;text-align: left;line-height: 1.75;font-size: 12.6px;white-space-collapse: preserve;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">configs/server_config.py</code><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;"> 将端口修改成 80。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.35555555555555557" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=b5d35fc3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyLoSFHMTuictwHcsVdCQbUCcH7zEoarnULILcYWmlHg0yjmB9AKf1YIA%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">端口配置</figcaption></figure><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">知识库初始化与迁移</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">当前项目的知识库信息存储在数据库中，在正式运行项目之前请先初始化数据库，建议在执行操作前备份您的知识文件。</p><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 如果是从 <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">0.1.x</code> 版本升级过来的用户，针对已建立的知识库，请确认知识库的向量库类型、Embedding 模型与 <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">configs/model_config.py</code> 中默认设置一致，如无变化只需以下命令将现有知识库信息添加到数据库即可：<code style="line-height: 1.75;font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;">python init_database.py</code></p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 如果是第一次运行本项目，知识库尚未建立，或者配置文件中的知识库类型、嵌入模型发生变化，或者之前的向量库没有开启 <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">normalize_L2</code>，需要以下命令初始化或重建知识库：</p></li></ul><pre style="color: rgb(88, 110, 117);background: rgb(253, 246, 227);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;padding: 1em;margin: 10px 8px;"><code style="line-height: 1.75;font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;white-space-collapse: collapse;">python init_database.py --recreate-vs</code></pre><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">多卡加载</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">项目支持多卡加载，需在 startup.py 中的 create_model_worker_app 函数中，修改如下三个参数:</p><pre style="color: rgb(88, 110, 117);background: rgb(253, 246, 227);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;padding: 1em;margin: 10px 8px;"><code style="line-height: 1.75;font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;white-space-collapse: collapse;">gpus=None,<br/>num_gpus= 1,<br/>max_gpu_memory=&#34;20GiB&#34;</code></pre><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">其中，<code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">gpus</code> 控制使用的显卡的ID，例如 &#34;0,1&#34;; <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">num_gpus</code> 控制使用的卡数; <code style="white-space:pre-wrap;line-height: 1.75;font-size: 12.6px;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">max_gpu_memory</code> 控制每个卡使用的显存容量。</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.1388888888888889" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=92cf0a35&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyJh6UmrUnGic2GtBew83neBENdohO8nich3PetJd2ZWMwju3lnnU7KaUQ%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">多卡</figcaption></figure><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">这里选择baichuan2-7b，勉强能跑起来。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">运行</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">运行命令，为了避免无法使用多卡运算，手动指定</p><pre style="color: rgb(88, 110, 117);background: rgb(253, 246, 227);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;padding: 1em;margin: 10px 8px;"><code style="line-height: 1.75;font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;white-space-collapse: collapse;">CUDA_VISIBLE_DEVICES=0,1 python startup.py --all-webui</code></pre><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">访问对应端口，进入langchain-chatchat界面</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.5055555555555555" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=5a57321b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyJd0mNa3jlnAiceRjHbT03PVdTECR9JiacdOdDFeBVdF2icN6CRPAYPBHQ%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">langchain-chatchat</figcaption></figure><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">点击知识库管理，选择新建知识库，知识库名称根据实际情况填写，对于向量库类型和向量模型，没有需求使用默认即可，我这里选用了bge。如果配置没问题，点击新建即可。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.33425925925925926" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=1a9dc662&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdynK2icwNxyeicKicdRXNdQkLJnbg6yqu02xOZtZ4W1JAaORK1Xfd3cibG5A%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">langchain-chatchat 知识库</figcaption></figure><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">创建完知识库，进入知识库配置界面，拖拽或者上传正确格式的文本文件，单个文件限制在200M以内，文件格式包括：HTML, MD, JSON, CSV, PDF, PNG, JPG, JPEG, BMP, EML, MSG, RST, RTF, TXT, XML, DOCX, EPUB, ODT, PPT, PPTX, TSV, HTM，</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.7737961926091825" data-s="300,640" style="" data-type="png" data-w="893" src="https://wechat2rss.xlab.app/img-proxy/?k=4959cc95&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyflldWKAtsMPqdaH9VewDudXsNE6qEFsDpnb2icvLB60EOuksonXdkBw%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">langchain-chatchat 知识库</figcaption></figure><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">其中文件处理配置，单段文本最大长度默认为250，个人感觉比较短，目前配置成500，并且开启了中文标题增强，点击添加文件到知识库。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="1.3744394618834082" data-s="300,640" style="" data-type="png" data-w="892" src="https://wechat2rss.xlab.app/img-proxy/?k=b9349537&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyR8UcMCVto6jaQibXK05hhbUz1TYuRU5kkibWibvgCLXkibGLglMDiaX2liag%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">langchain-chatchat 知识库</figcaption></figure><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">如果文件没有问题，会自动上传进行向量切割。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.08703703703703704" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=eb1c188c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyPhhfJCYmMFqib1p9PQiaywjvaOkcdC3KAdMg2DAIo0Y5cmvsuOyHPF3w%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">langchain-chatchat 知识库</figcaption></figure><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">如果有错误，处理完成后，也可以手动选择文档，手动添加到向量库。<br/>注意：这里文档是可以下载，如果涉及敏感文档，注意审查，也可以二开，关闭文档下载。</p><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">数据向量化，瓶颈在cpu上。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.562962962962963" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=6418cae5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyK1wz32VkJrgGQrBe8xL3czS4TUJ1wozic3SHCvspLPRkuogW5mccq6w%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">向量化性能瓶颈</figcaption></figure><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">错误</h2><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">RuntimeError: shape &#39;[3, 32, 128]&#39; is invalid for input of size 15360</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">这个是qwen-14b貌似不兼容，有issus，目前无法解决</p><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">执行 python cli_demo.py过程中，显卡内存爆了，提示 &#34;OutOfMemoryError: CUDA out of memory&#34;</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">将 VECTOR_SEARCH_TOP_K 和 LLM_HISTORY_LEN 的值调低，比如 VECTOR_SEARCH_TOP_K = 5 和 LLM_HISTORY_LEN = 2，这样由 query 和 context 拼接得到的 prompt 会变短，会减少内存的占用。或者打开量化，请在 configs/model_config.py 文件中，对 LOAD_IN_8BIT参数进行修改。这个是官方给的建议，我只是遇到了大模型加载爆显存，通过更换模型来处理的</p><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">timeout</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">部分情况会自动加载hugging face数据，但是显示连接超时，可以在运行之前指定一下代理地址，比如：</p><pre style="color: rgb(88, 110, 117);background: rgb(253, 246, 227);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;padding: 1em;margin: 10px 8px;"><code style="line-height: 1.75;font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;white-space-collapse: collapse;">export https_proxy=<a href="http://proxy sever ip:port" target="_blank">http://proxy sever ip:port</a></code></pre><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">libgl.so.1 cannot open shared object file no such file or directory</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">手动安装以下库，重启web服务即可。</p><pre style="color: rgb(88, 110, 117);background: rgb(253, 246, 227);font-size: 14px;letter-spacing: normal;text-align: left;line-height: 1.5;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;overflow-x: auto;border-radius: 8px;padding: 1em;margin: 10px 8px;"><code style="line-height: 1.75;font-family: Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;white-space-collapse: collapse;">apt install ffmpeg libsm6 libxext6  -y</code></pre><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">评估</h2><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">评估测试，这里的问题为：我设计了一个静态密码，有哪些安全要求</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="1.2481481481481482" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=d8d89f50&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyUeRoGSKyoOiaVibUIBzVD6Ypmcx0wtcGap7lNc0bE236PBlkb4VamfbA%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">评估</figcaption></figure><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">效果还是挺不错的。如果直接使用pdf，会有一些脏数据，这个是由于网络安全发文中的目录和页眉页脚脏数据导致的。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="1.2916666666666667" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=fe9e00f7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdy2PVxWM6Y7Cic1eUwUVH1TINblvLcObRIcbEZ7ibO5OnuvR49ztG8cy4Q%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">评估</figcaption></figure><p><span style="color: rgb(0, 0, 0);font-family: &#34;Microsoft YaHei&#34;;font-size: 14px;letter-spacing: normal;text-align: start;text-wrap: wrap;">可以将pdf转成docx格式，手动或者自动去除脏数据，然后进行训练，效果会更好，以下是同一个问题，docx和pdf对比结果</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="1.288888888888889" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=9c0a8bfa&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyBmIibronVsiaYxjAA1R9BQzUqYkOugNw3wfJNtwHaPibiciczR0Q5iaYqhFw%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">docx评估</figcaption></figure><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="1.3009259259259258" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=c0c8312c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo78Xwng9eA1I0kSTsQPdYdyl0jgZYaBu20QHBSbeFnBPeeGYCIwoNr3eEjkeWIkUr8lc4y9sjPESw%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">pdf评估</figcaption></figure><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">总结</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">1、辅助检索目前效果可以，但是大差不差，这个仁者见仁智者见智。<br/>2、如果知识库有很庞大的规模 默认的Faiss 可能会有点吃力 ，需要使用 milvus 向量数据库。<br/>3、优先使用md或者txt语料，docx要优于pdf，准确的语料是成功的基石。<br/>4、好的丹炉事半功倍，好的梯子让人愉悦。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">参考</h2><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://github.com/chatchat-space/Langchain-Chatchat【Langchain-Chatchat】" target="_blank">https://github.com/chatchat-space/Langchain-Chatchat【Langchain-Chatchat】</a></p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://zhuanlan.zhihu.com/p/651189680【Langchain-Chatchat" target="_blank">https://zhuanlan.zhihu.com/p/651189680【Langchain-Chatchat</a> + 阿里通义千问Qwen 保姆级教程 | 次世代知识管理解决方案】</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://www.cnblogs.com/shengshengwang/p/17747781.html【Langchain-Chatchat项目：1.2-Baichuan2项目整体介绍】" target="_blank">https://www.cnblogs.com/shengshengwang/p/17747781.html【Langchain-Chatchat项目：1.2-Baichuan2项目整体介绍】</a></p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://hksanduo.github.io/2023/10/13/2023-10-13-ml-env/【基于Docker搭建机器学习环境】" target="_blank">https://hksanduo.github.io/2023/10/13/2023-10-13-ml-env/【基于Docker搭建机器学习环境】</a></p></li></ul><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484195">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=4cc93605&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484195%26idx%3D1%26sn%3D5cc6e077ec5afb2893999a34fe416c96%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 20 Oct 2023 14:51:00 +0800</pubDate>
    </item>
    <item>
      <title>OSC&amp;R：针对软件供应链的 ATT&amp;CK 框架</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484168&amp;idx=1&amp;sn=3be28cdeb0deb3f342a6c4d438ac50b6</link>
      <description>OSC&amp;R：针对软件供应链的 ATT&amp;CK 框架</description>
      <content:encoded><![CDATA[<p>
原创 <span>sanduo</span> <span>2023-08-15 16:48</span> <span style="display: inline-block;">北京</span>
</p>

<p>OSC&R：针对软件供应链的 ATT&CK 框架</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=f55765c5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo7WW1Xx8OBo7xUtIAxNZTicgN3MHoT536GOaxrEJ7Mqx55UhSiccvxxhd061wIl13f0ewmqJrLficQtg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">背景</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">多年来，供应链攻击一直被视为一项严重的安全隐患。但是，供应链的攻击由于其攻击难度高，见效慢等特征，以及防守方侥幸心理，一直不受重视。近年来，整个社会似乎面临着更多、更有组织的攻击浪潮。这可能是因为监管要求，各单位或多或少增加了安全防护措施，通过演练等场景，整体提高了企业安全能力，这就迫使攻击者转而寻找其他突破口，而供应链便成为了他们攻击的目标。又可能是因为供应链比较重要，是因为一旦攻击成功，大量依赖受影响供应商产品的客户也将难逃其影响。因此，一次单一攻击可能引发连锁反应，造成广泛的传播影响。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">介绍</h2><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">OSC&amp;R是一个开放式框架，为广大安全人员提供了一个综合、系统化且可操作的方法论，以深入了解攻击者的行为和技术手段。与MITRE ATT&amp;CK类似，OSC&amp;R按照攻击者所采用的战术、技术和过程（TTP）将其有条不紊地组织成清晰且结构化的视角。然而，OSC&amp;R独辟蹊径，成为了第一个也是唯一一个专注于软件供应链的攻击矩阵。该框架覆盖了广泛的攻击向量，包括第三方库和组件中的漏洞、涉及构建和部署系统的供应链攻击，以及受感染或被植入恶意代码的软件更新。</p><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">安全团队可以运用OSC&amp;R框架来评估现有的供应链防御措施，准确定位哪些供应链威胁需要优先应对，并且审视现有的防御措施如何应对这些威胁。同时，该框架还协助监测和追踪攻击者组织的攻击行为，为安全人员提供行动的重要洞察。</p><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><img class="rich_pages wxw-img" data-backh="389" data-backw="562" data-ratio="0.692" style="width: 100%;height: auto;" data-type="png" data-w="2000" src="https://wechat2rss.xlab.app/img-proxy/?k=bf0a8abe&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo7WW1Xx8OBo7xUtIAxNZTicgnrMHDdRufdtDGCqWwI6XWz4hiaQMSmNiahFCEGvxNd0ax9bK5BPQSYyQ%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><span style="color: rgb(136, 136, 136);font-size: 0.8em;text-align: center;">Open Software Supply ChainAttack Reference (OSC&amp;R)</span></figure><figure style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"><img class="rich_pages wxw-img" data-ratio="0.3505720823798627" style="" data-type="png" data-w="2185" src="https://wechat2rss.xlab.app/img-proxy/?k=9d5c8f60&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo7WW1Xx8OBo7xUtIAxNZTicg7sicmv3gDaltQ3wHquejBWyrDeeLMAWrzcmX4bUGwCPaAzuKlULqU5g%2F640%3Fwx_fmt%3Dpng"/><figcaption style="text-align: center;line-height: 1.75;color: rgb(136, 136, 136);font-size: 0.8em;">OSC&amp;R 中文</figcaption></figure><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">注意：</p><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 1、以下为本人翻译内容，部分翻译可能存在歧义</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 2、OSC&amp;R随着时间发展，内容会发生变动</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• 3、翻译时间为2023年8月8日</p></li></ul><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">总结</h2><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">1.OSC&amp;R 满足了软件供应链领域对ATT&amp;CK 安全框架的迫切需求</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">为安全社区提供了一个统一的参考框架，可以帮助企业主动评估自身的软件供应链安全策略，并进行解决方案选型，从而制定有效的供应链安全策略。</p><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">2.OSC&amp;R框架重点侧重软件供应链的攻击战法</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">与MITTRE ATT&amp;CK一样，OSC&amp;R 也是按照攻击者使用的战术、技术和步骤(TTPs)来组织排列的，旨在提供一种通用的语言和结构，以帮助人们理解和分析攻击者用来攻击软件供应链的TTPS。它涵盖了大量的攻击向量，包括第三方库和组件的漏洞、构建和部署系统的供应链，以及恶意软件更新等。</p><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">安全团队可以使用 OSC&amp;R 框架来评估现有的防御措施，确定哪些威胁需要优先处理、现有的覆盖范围是否可以解决这些威胁，并在其帮助下跟踪攻击组红的攻击行为。随着新战术和技术的出现和发展，OSC&amp;R 框架会定期更新。该框架也可以用于设定渗透测试和红队演习时所需的范围，并且，由于可以充当测试中和测试后的记分卡，它还可以促进红队评估行为的顺利开展。</p><h3 style="letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.2;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.1em;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">3.软件供应链安全依然是任重道远</h3><p style="font-size: 14px;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">软件供应链相关数据泄露和风险持续影响全球组织机构，因此，软件供应钱安全仍旧是各家企业和安全行业的头等大事。</p><h2 style="letter-spacing: normal;text-wrap: wrap;text-align: center;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">参考</h2><ul style="font-size: 14px;letter-spacing: normal;text-wrap: wrap;text-align: left;line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;padding-left: 1em;list-style: circle;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://pbom.dev/【osc&amp;r】" target="_blank">https://pbom.dev/【osc&amp;r】</a></p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• <a href="https://github.com/pbom-dev/OSCAR【osc&amp;r" target="_blank">https://github.com/pbom-dev/OSCAR【osc&amp;r</a> github】</p></li><li style="text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.2em 8px;"><p>• att&amp;ck框架实践指南</p></li></ul><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484168">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=737b8f38&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484168%26idx%3D1%26sn%3D3be28cdeb0deb3f342a6c4d438ac50b6%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 15 Aug 2023 16:48:00 +0800</pubDate>
    </item>
    <item>
      <title>常见JAVA反序列化危险对象列表</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484159&amp;idx=1&amp;sn=ccdb562983e1880db3e6e8f90d9434e9</link>
      <description>常见JAVA反序列化危险对象列表</description>
      <content:encoded><![CDATA[<p>
原创 <span>warwolf767</span> <span>2023-07-20 15:37</span> <span style="display: inline-block;">北京</span>
</p>

<p>常见JAVA反序列化危险对象列表</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=b84ec66e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo6refFgw17EPTngibzNnwHe7P5ib2yz5TcMgiaqX3DMJSg0UqgtZVaWXuN0xdEA0tnibfPPm8KXaBOMNw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p><br/></p><section style="text-indent: 2em;">在反序列化时设置类的黑名单来防御反序列化漏洞利用及攻击，这个做法在源代码修复的时候并不是推荐的方法，因为你不能保证能覆盖所有可能的类，而且有新的利用payload出来时也需要随之更新黑名单，但有一种场景下可能黑名单是一个不错的选择。写代码的时候总会把一些经常用到的方法封装到公共类，这样其它工程中用到只需要导入jar包即可，此前已经见到很多提供反序列化操作的公共接口，使用第三方库反序列化接口就不好用白名单的方式来修复了。这个时候作为第三方库也不知道谁会调用接口，会反序列化什么类，所以这个时候可以使用黑名单的方式来禁止一些已知危险的类被反序列化。</section><section style="text-indent: 2em;">常见的反序列化修复方案：<br/></section><ul class="list-paddingleft-1" style="list-style-type: disc;"><li><section style="text-indent: 0em;">更新fastjson、xtream、commons-collections、commons-io等第三方组件；</section></li><li><section style="text-indent: 0em;">业务需要使用反序列化时，尽量避免反序列化数据可被用户控制，如无法避免建议尽量使用白名单或者黑名单的形式进行拦截或者校验；</section></li><li><section style="text-indent: 0em;">常见的反序列化防护组件如：serialkiller，但是该组件已经好多年未更新，拦截原理是没问题的，如果使用，建议及时更新新发现的危险方法到配置文件当中；</section></li></ul><section style="text-indent: 2em;">以下表格主要从<span style="letter-spacing: 0.578px;text-wrap: wrap;">SerialKiller整理而来，还有部分是博主自行整理的，如果有不足，请及时斧正。</span></section><table><thead style="line-height: 1.75;background: rgba(0, 0, 0, 0.05);font-weight: bold;color: rgb(63, 63, 63);"><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;word-break: break-all;">反序列化危险对象</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;word-break: break-all;">来源<br/></td></tr></thead><tbody><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">bsh.XThis$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s BeanShell1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">bsh.Interpreter$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s BeanShell1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s C3P0 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">com.mchange.v2.c3p0.PoolBackedDataSource$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s C3P0 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.beanutils.BeanComparator$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsBeanutils1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections.Transformer$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections1,3,5,6 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections.functors.InvokerTransformer$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections1,3,5,6 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections.functors.ChainedTransformer$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections1,3,5,6 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections.functors.ConstantTransformer$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections1,3,5,6 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections.functors.InstantiateTransformer$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections1,3,5,6 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections.map.LazyMap$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections1,3,5,6 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections.keyvalue.TiedMapEntry$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections1,3,5,6 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections4.functors.InvokerTransformer$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections2,4 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections4.functors.ChainedTransformer$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections2,4 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections4.functors.ConstantTransformer$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections2,4 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections4.functors.InstantiateTransformer$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections2,4 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.collections4.comparators.TransformingComparator$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s CommonsCollections2,4 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.fileupload.disk.DiskFileItem$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s FileUpload1,Wicket1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.wicket.util.upload.DiskFileItem$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s FileUpload1,Wicket1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.io.output.DeferredFileOutputStream$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);"><br/></td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);"><br/></td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s FileUpload1,Wicket1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.commons.io.output.ThresholdingOutputStream$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s FileUpload1,Wicket1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.codehaus.groovy.runtime.ConvertedClosure$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Groovy payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.codehaus.groovy.runtime.MethodClosure$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Groovy payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.hibernate.engine.spi.TypedValue$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Hibernate1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.hibernate.tuple.component.AbstractComponentTuplizer$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Hibernate1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.hibernate.tuple.component.PojoComponentTuplizer$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Hibernate1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.hibernate.type.AbstractType$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Hibernate1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.hibernate.type.ComponentType$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Hibernate1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.hibernate.type.Type$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Hibernate1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">com.sun.rowset.JdbcRowSetImpl$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Hibernate1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.builder.InterceptionModelBuilder$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.builder.MethodReference$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.proxy.DefaultInvocationContextFactory$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.proxy.InterceptorMethodHandler$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.reader.ClassMetadataInterceptorReference$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.reader.DefaultMethodMetadata$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.reader.ReflectiveClassMetadata$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.reader.SimpleInterceptorMetadata$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.spi.instance.InterceptorInstantiator$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.spi.metadata.InterceptorReference$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.spi.metadata.MethodMetadata$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.spi.model.InterceptionModel$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.jboss.(weld.)?interceptor.spi.model.InterceptionType$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JBossInterceptors1, JavassistWeld1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">java.rmi.registry.Registry$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JRMPClient payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">java.rmi.server.ObjID$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JRMPClient payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">java.rmi.server.RemoteObjectInvocationHandler$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JRMPClient payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">java.rmi.server.RemoteObject$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JRMPClient payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">java.rmi.server.RemoteRef$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JRMPClient payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">java.rmi.server.UnicastRemoteObject$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JRMPClient payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">net.sf.json.JSONObject$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s JSON1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">javax.xml.transform.Templates$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Jdk7u21 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.python.core.PyObject$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Jython1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.python.core.PyBytecode$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Jython1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.python.core.PyFunction$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Jython1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.mozilla.javascript..*$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s MozillaRhino1 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.myfaces.context.servlet.FacesContextImpl$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Myfaces1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.myfaces.context.servlet.FacesContextImplBase$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Myfaces1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.myfaces.el.CompositeELResolver$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Myfaces1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.myfaces.el.unified.FacesELContext$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Myfaces1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.apache.myfaces.view.facelets.el.ValueExpressionMethodExpression$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Myfaces1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">com.sun.syndication.feed.impl.ObjectBean$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s ROME payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.springframework.beans.factory.ObjectFactory$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Spring1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.springframework.core.SerializableTypeWrapper$MethodInvokeTypeProvider$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Spring1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.springframework.aop.framework.AdvisedSupport$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Spring1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.springframework.aop.target.SingletonTargetSource$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Spring1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.springframework.aop.framework.JdkDynamicAopProxy$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Spring1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.springframework.core.SerializableTypeWrapper$TypeProvider$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">ysoserial&#39;s Spring1,2 payload</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">java.util.PriorityQueue$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">java.lang.reflect.Proxy$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">javax.management.MBeanServerInvocationHandler$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">javax.management.openmbean.CompositeDataInvocationHandler$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.springframework.aop.framework.JdkDynamicAopProxy$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">java.beans.EventHandler$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">java.util.Comparator$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.reflections.Reflections$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">clojure.lang.PersistentArrayMap</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">clojure.inspector.proxy$javax.swing.table.AbstractTableModel$ff19274a</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">sun.rmi.server.UnicastRef$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">sun.rmi.transport.LiveRef$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">sun.rmi.transport.tcp.TCPEndpoint$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">sun.rmi.server.ActivationGroupImpl$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">sun.rmi.server.UnicastServerRef$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">net.sf.json.JSONObject$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.mozilla.javascript.$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">com.sun.syndication.feed.impl.ObjectBean$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">com.vaadin.data.util.NestedMethodProperty$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">com.vaadin.data.util.PropertysetItem$</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr><tr><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">org.aspectj.weaver.tools.cache.SimpleCache$StoreableCachingMap</td><td style="line-height: 1.75;border-color: rgb(223, 223, 223);padding: 0.25em 0.5em;color: rgb(63, 63, 63);">other trigger gadgets or payloads</td></tr></tbody></table><p><br/></p><p><span style="letter-spacing: 0.578px;text-align: left;text-wrap: wrap;">参考：</span></p><p><span style="letter-spacing: 0.578px;text-align: left;text-wrap: wrap;"></span><span style="letter-spacing: 0.578px;text-align: left;text-wrap: wrap;"><a href="https://github.com/ikkisoft/SerialKiller" target="_blank">https://github.com/ikkisoft/SerialKiller</a></span></p><p><span style="letter-spacing: 0.578px;text-align: left;text-wrap: wrap;"><a href="https://zhuanlan.zhihu.com/p/597910634" target="_blank">https://zhuanlan.zhihu.com/p/597910634</a></span></p><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484159">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=a1b0945e&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484159%26idx%3D1%26sn%3Dccdb562983e1880db3e6e8f90d9434e9%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 20 Jul 2023 15:37:00 +0800</pubDate>
    </item>
    <item>
      <title>代码审计SDL祝您除夕快乐，幸福安康</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI2NTExNzcxNQ==&amp;mid=2247484155&amp;idx=1&amp;sn=fbf1260d8e47def4802d2b60d70f401e</link>
      <description>代码审计SDL祝您除夕快乐，幸福安康</description>
      <content:encoded><![CDATA[<p>
<span>sanduo</span> <span>2023-01-21 19:17</span> <span style="display: inline-block;">天津</span>
</p>

<p>代码审计SDL祝您除夕快乐，幸福安康</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=2ced82ef&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fa4tp2b7vTo5nzjhI81MA0aScS9Z8feOVtbyeyVwtfuZ6rw40iaEyTPic7HibKHgVuGC9xVZToibAsYKa5ibqbFIGmVw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.777" data-s="300,640" style="" data-type="png" data-w="1000" src="https://wechat2rss.xlab.app/img-proxy/?k=b891aed2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fa4tp2b7vTo5nzjhI81MA0aScS9Z8feOVI4Q3G4JrcGbZEd3brbvtGib1l3SicQ4IrqIz5O6weFXpkkVXIh52z65w%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484155">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=a2978feb&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI2NTExNzcxNQ%3D%3D%26mid%3D2247484155%26idx%3D1%26sn%3Dfbf1260d8e47def4802d2b60d70f401e%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 21 Jan 2023 19:17:00 +0800</pubDate>
    </item>
  </channel>
</rss>