静态分析SAST应用安全漏洞扫描代码质量【免费下载链接】codeqlCodeQL: the libraries and queries that power security researchers around the world, as well as code scanning in GitHub Advanced Security项目地址https://gitcode.com/gh_mirrors/co/codeql点击查看免费下载导读本文基于 CodeQL 仓库中 change-notes/1.19/support/framework-support.rst 这一发布说明文档系统梳理 CodeQL 1.19 版本对各语言主流框架与第三方库的内置建模支持哪些框架被官方显式核对过、各语言支持清单与类别分布以及当目标库不在清单中时如何通过扩展数据流库自行补充支持。读完本文你将能快速判断自己的项目框架是否落在官方核对范围内并掌握“模型即数据 / QL 库扩展”两条通往自定义支持的路径。这份清单是什么1.19 版本的框架核对范围framework-support.rst是 CodeQL 1.19 发布说明change-notes/1.19/中专门用于记录框架与库支持范围的文档。它的核心表述是本版本中的 QL 库与查询已显式针对下列库与框架逐一核对过explicitly checked against。也就是说这份清单并非“当前仓库支持的全部框架”而是在 1.19 版本周期内经过人工核对、有测试与查询结果背书的子集。文档同时以一段 Tip 明确说明边界如果你感兴趣的是其他库或框架可以自行扩展分析——例如通过扩展数据流库为额外框架补充数据源sources与汇聚点sinks。从仓库结构看这一承诺是真实可落地的每种语言都在 QL 库中维护了独立的frameworks目录如 java/ql/lib/semmle/code/java/frameworks/、python/ql/lib/semmle/python/frameworks/、csharp/ql/lib/semmle/code/csharp/frameworks/、javascript/ql/lib/semmle/javascript/frameworks/每个受支持的库对应一个 QL 模块文件清单本身即由这些模块支撑。语言级范围与支持语言、编译器清单配套阅读框架支持清单是 CodeQL 语言支持的子集因此应结合同目录下的 language-support.rst 与 versions-compilers.csv 一起理解。后者给出了 1.19 版本的完整语言/编译器矩阵节选关键项语言支持变体编译器文件扩展名C/CC89、C99、C11、C98/03/11/14/17Clang至 6.0、GNU至 GCC 7.3、Microsoft至 VS 2017.cpp.cxx.hpp.h等C#C# 至 7.2.NET 至 4.7.1Visual Studio 至 2017、.NET Core 至 2.1.cs.cshtml.xaml等COBOLANSI 85 或更新不适用.cbl.cpy.copy等JavaJava 11 或更低指语言特性构建可在 Java 6 上执行javacOpenJDK / Oracle JDK、ECJ.javaJavaScriptECMAScript 2018 或更低不适用.js.jsx.mjs.vue等Python2.7、3.5、3.6、3.7不适用.pyTypeScript2.6 ~ 3.1标准 TypeScript 编译器.ts.tsx值得注意的边界文档中明确注释“目前对 C/C 没有针对库或框架的内置支持”There is currently no built-in support for libraries or frameworks for C/C因此在 1.19 的框架清单中不会出现 C/C 条目COBOL 的支持则以 ANSI 85 标准为最佳适配目标。TypeScript 的分析是通过在 JavaScript 提取器中开启 TypeScript 选项实现的。C# 内置支持ASP.NET 家族全覆盖1.19 中 C# 的框架支持清单集中于 ASP.NET 技术栈ASP.Net MVC 框架ASP.NET Web APIASP.NET Web FormsASP.NET CoreASP.NET Core MVCASP.Net Core RazorRazor 模板这套清单在 QL 库中有直接的模块对应关系。从 csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/AspNetCore.qll 可以看到对 ASP.NET Core 的建模而 csharp/ql/lib/semmle/code/csharp/frameworks/Razor.qll 则负责 Razor 模板的语义Razor 视图、指令与 HTML 上下文它们是 XSS、路径注入等安全查询在 Web 视图层正确识别汇聚点的前提。此外frameworks目录中还包含 EntityFramework、NHibernate、Dapper、Json.NET、ServiceStack 等库的模块说明这些库在后续版本或更细粒度中同样有建模覆盖清单仅代表 1.19 显式核对的那一批。COBOL 内置支持嵌入式 SQL 与 CICSCOBOL 在 1.19 中的内置支持聚焦于两种嵌入式环境嵌入式 SQLEmbedded SQL嵌入式 CICSEmbedded CICS这对应 COBOL 程序中最常见的两种宿主接口通过EXEC SQL ... END-EXEC嵌入的数据库访问以及通过 CICS 命令嵌入的事务处理调用。对这些语法的建模让数据流分析能够穿越 COBOL 与外部数据源/汇聚点之间的边界。结合 versions-compilers.csv 的注释分析效果最佳的是接近 ANSI 85 标准的代码。Java 内置支持数据库与序列化两大主线Java 的支持清单以表格形式存放于 java-frameworks.csv内容如下名称类别HibernateDatabaseiBatis / MyBatisDatabaseJava Persistence API (JPA)DatabaseJDBCDatabaseSpring JDBCDatabaseSpring MVCWeb application frameworkKryo deserializationSerializationSnakeYamlSerializationXStreamSerialization可以看到两大主线数据库访问层Hibernate、MyBatis、JPA、JDBC、Spring JDBC与反序列化层Kryo、SnakeYaml、XStream。这并非偶然——它们恰好是 Java 安全查询最关注的两类汇聚点SQL 注入与不安全反序列化。与查询改进的直接呼应1.19 的 Java 分析发布说明 analysis-java.md 记录了两个与清单直接相关的变更java/sql-injection由用户控制的源构造查询现在会报告来自 Spring JDBC、MyBatis、Hibernate 框架的 SQL 注入汇聚点java/concatenated-sql-query未中和特殊字符的查询同样新增了来自上述三个框架的汇聚点报告。这印证了“框架清单”并非静态文本——清单中的框架正是 QL 库中frameworks模块被安全查询实际消费的对象。此外发布说明还提到FlowSources库的默认污点源扩展到了带 Spring 注解标识 servlet 远程用户输入的参数凡使用 Spring Web 框架的项目都会因此获得更多安全查询结果。源码侧的框架模块从 java/ql/lib/semmle/code/java/frameworks/ 目录看Java 的框架建模比清单更广泛包含spring/下数十个模块Spring.qll 及其对 Bean、组件扫描、HTTP 等的细分模块、struts/下的 StrutsActions.qll、javaee/下的 JavaServerFaces.qll 等。这也再次说明清单 官方显式核对的子集而非能力上限。JavaScript / TypeScript 内置支持六大类别 22 个库JS/TS 的清单最丰富存放于 javascript-typescript-frameworks.csv名称类别angularjsHTML frameworkreactHTML frameworkbrowserRuntime environmentelectronRuntime environmentnodeRuntime environmentexpressServerhapiServerkoaServerjqueryUtility librarylodashUtility libraryramdaUtility libraryunderscoreUtility libraryaxiosNetwork communicatorrequestNetwork communicatorsuperagentNetwork communicatormongodbDatabasemssqlDatabasemysqlDatabasepostgresDatabasesequelizeDatabasesqlite3Database类别覆盖 HTML 框架、运行时环境、服务端、工具库、网络通信与数据库六大类基本对应数据流分析中不同角色运行时环境node/browser/electron决定“执行语义”边界服务器框架express/hapi/koa提供请求源与响应汇聚点数据库驱动mysql/postgres/sequelize 等提供 SQL 注入汇聚点工具库lodash/underscore/ramda则常贡献属性访问与处理步骤。源码侧javascript/ql/lib/semmle/javascript/frameworks/ 目录提供了对应模块例如 AngularJS.qll含依赖注入、表达式求值等子模块、ConnectExpressShared.qllConnect/Express 共享的请求-响应建模。这些模块通过HTTP::Server::Request等概念接入数据流框架是反射型 XSS、SQL 注入、路径注入等查询识别 Web 边界的基础。Python 内置支持Web 框架与网络引擎Python 清单存放于 python-frameworks.csv名称类别DjangoWeb application frameworkFlaskMicroframeworkPyramidWeb application frameworkTornadoWeb application framework and asynchronous networking libraryTwistedNetworking engineWebObWSGI request library这些框架在 python/ql/lib/semmle/python/frameworks/ 中均有对应 QL 模块Django.qll、Flask.qll、Pyramid.qll、Tornado.qll、Twisted.qll。以 Flask.qll 为例第 25 行起定义module Flask其内部通过API::moduleImport(flask)定位导入点并对flask.views.View、MethodView及其子类建模subclassRef()谓词再据此推导请求处理入口。这类“基于 API 图 子类遍历”的建模方式正是框架支持能够在不同版本间保持稳定的原因。值得注意的是该目录实际包含远超清单的模块如 FastAPI、Sanic、Starlette、SQLAlchemy、Requests、aiohttp 等说明清单代表的是 1.19 发布时显式核对过的集合仓库本身的建模面已大幅扩展。清单之外如何扩展分析覆盖你自己的框架清单文档明确给出了扩展路径仓库中也存在两条互补的实现路线1. 扩展数据流库的 Sources / Sinks正如文档 Tip 所述最直接的扩展方式是在数据流库中为额外框架补充数据源与汇聚点。Java 侧的入口是 java/ql/lib/semmle/code/java/dataflow/FlowSources.qll它集中定义了污点源集合且 1.19 中正是通过为 Spring 注解参数补充源来扩大查询覆盖面见 analysis-java.md 的说明。对 Python 而言python/ql/lib/semmle/python/dataflow/new/RemoteFlowSources.qll 扮演类似角色。通过修改这些库中的源/汇聚点谓词可以让现有安全查询自动覆盖新框架。2. 按框架新增 QL 模块模型即数据更规范的做法是参照既有框架模块的模式为你的框架新建一个建模模块。从源码结构看标准模式包括用API::moduleImport(包名)定位库的导入点见 Flask.qll 第 37 行对入口类、请求对象、响应对象建模并映射到Concepts.qll中定义的概念如HTTP::Server::Request、SqlInjectionSink将模块接入数据流/污点追踪管道使安全查询无需改动即可受益。Python 侧还广泛采用models-as-data数据驱动的模型方式frameworks目录中的.model.yml文件如 Django.model.yml以 YAML 描述库 API 的源、汇聚点与流转步骤由ModelsAsData见 Flask.qll 第 19 行的 import加载。这意味着扩展支持有时只需要补充 YAML 条目而不必编写 QL 谓词门槛更低、也更便于与社区共享。小结清单的读法与用法判断项目是否被覆盖将项目依赖与各语言 CSV 清单java-frameworks.csv、javascript-typescript-frameworks.csv、python-frameworks.csv比对即可确定 1.19 显式核对的范围。未被覆盖不等于不支持仓库各语言的frameworks目录规模远大于清单且框架模块会随版本持续扩充查询结果的变化如 SQL 注入 sink 的新增往往与清单扩容同步。扩展是官方鼓励的一等路径数据流源/汇聚点扩展与模型即数据YAML 模型两条路线可以让自定义框架在现有查询体系内快速获得分析能力这也是 CodeQL 框架支持体系的设计初衷。赞分享静态分析SAST应用安全漏洞扫描代码质量【免费下载链接】codeqlCodeQL: the libraries and queries that power security researchers around the world, as well as code scanning in GitHub Advanced Security项目地址https://gitcode.com/gh_mirrors/co/codeql点击查看免费下载相关推荐Lidgren Network Gen3可靠传输实现深入理解NetReliableOrdered与消息重传机制Lidgren Network Gen3可靠传输实现深入理解NetReliableOrdered与消息重传机制 Lidgren Network Gen3是一款InstructPix2Pix多语言支持如何扩展指令语言范围的完整指南InstructPix2Pix多语言支持如何扩展指令语言范围的完整指南 InstructPix2Pix是一个革命性的基于指令的图像编辑模型它能够根据文本指令计算机视觉媒体生成AI 应用Deepsec 支持哪些技术栈覆盖 15 语言框架的内置漏洞扫描规则清单一览Deepsec 支持哪些技术栈覆盖 15 语言框架的内置漏洞扫描规则清单一览 如果你正在为项目挑选一款 漏洞扫描工具 最关心的问题之一一定是Deepse应用安全漏洞扫描人工智能AI Agent上一篇Material Dashboard 3 更新日志深度解读从 Bootstrap 4 到 5.3 的版本演进与关键修复下一篇终极指南如何使用免费开源工具快速抢到B站会员购热门票务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
