<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 以下內容來自官方文檔 #### **1. 軟件架構和關系** **1. 1 CodeQL能干什么?** > GitHub出品,codeql.github.com。CodeQL是語義代碼分析引擎,可以像查詢數據庫一樣查詢代碼,編寫查詢以查找漏洞的《所有變體》,從而消除它,分享查詢也可以幫助別人這樣做。tip:也可以用別人的查詢幫助自己。 > 使用LGTM.com上的CodeQL查詢控制臺,對流行的開源代碼庫運行實際查詢。tip:用github代碼演練 **1.2 什么是LGTM?** > 用戶查找0day漏洞和放置關鍵漏洞的代碼分析平臺,對開源項目是完全免費的 #### **2. 技術細節** **CodeQL** > 在CodeQL中,代碼被視為數據。安全漏洞、錯誤和其他錯誤被《建模》,可以針對從代碼中提取的數據庫執行查詢,可以運行標準查詢也可以自定義分析。 **變異分析** > 變體分析是使用一直的安全漏洞作為種子,在代碼中發現類似問題的過程,使用CodeQL查詢代碼是執行變體分析的最有效方式。可以使用CodeQL查詢來識別種子漏洞,或通過編寫自定義的CodeQL查詢來查找新漏洞。然后開發和迭代查詢,以自動查找傳統手動技術可能遺漏的同一錯誤邏輯變體。 2.1 支持的語言和框架 [CodeQL 支持的語言和框架](https://codeql.github.com/docs/codeql-overview/supported-languages-and-frameworks/) 2.2 CodeQL工具 > GitHub提供了CodeQL命令行接口和 基于VS Code的CodeQL插件,用于在開源代碼庫上執行CodeQL分析。 CLI > CodeQL命令行接口主要用于創建用戶安全研究的數據庫。您可以直接從命令行或使用VS Code擴展查詢CodeQL數據庫。 VC Code擴展 > 使用VS Code擴展分析CodeQL數據庫,該擴展為編寫和用戶自定義查詢以及查看結果提供了增強的環境。 #### **3. CodeQL分析的三個步驟** > 1. 準備代碼,通過CodeQL創建數據庫 > 2. 對數據庫運行CodeQL查詢 > 3. 解釋查詢結果 **3.1 數據庫創建** > 為了創建數據庫,CodeQL首先提取代碼庫中每個源文件的單個關系表示 對于編譯語言 > 通過監視正常的構建過程來工作。每次調用編譯器來處理源文件是,都會制作該文件的副本,并收集有關源代碼的所有相關信息。這包括有關抽象語法書的句法數據和有關名稱綁定和類型信息的語義數據。 對于解釋語言 > 提取器直接在元馬上運行,解析依賴關系以提供代碼庫的準確表示。 > CodeQL支持的每種語言都有一個提取器,以確保提取過程盡可能準確。對于多語言代碼庫,數據庫一次生成一種語言。 > 提取后,分析所需要的所有數據(關系數據、復制的源文件和特定語言的數據庫模式,它指定數據中的相互關系),被導入到一個目錄中,稱為CodeQL數據庫 > tip: 基于語義與句法的Java類庫檢索方法與系統。 **3.2 查詢結果** > 最后一步將查詢執行期間產生的結果轉換為源代碼上下文中更有意義的形式。也就是說,結果的解釋方式突出了查詢旨在發現的潛在問題。 > 查詢包括指示應如何解釋結果的元數據屬性。例如,某些查詢在代碼中的單個位置顯示為一條簡單的消息。其他則顯示一系列代表數據流或控制流路徑上的步驟的位置,以及解釋結果重要性的消息。沒有元數據的查詢不會被解釋——他們的結果作為表格數據而不顯示在源代碼中。 > Question:數據流、控制流是什么? > 在解釋后,結果被輸出用于代碼審查和分類。在CodeQL for Visual Studio Code中,解釋的查詢會自動顯示在源代碼中。CodeQL CLI生成的結果可以輸出為多種不同格式,以供不同工具使用。 #### **4. CodeQL packs和QL packs區別** > CodeQL包:CodeQL包《**使用CodeQL CLI創建的**》,用于創建、依賴、發布和運行CodeQL查詢和庫。 > QL包: QL包用于《**組織**》CodeQL分析中使用的文件。他們包括查詢、庫文件、查詢套件和重要元數據。 **4.1 關于CodeQL packs** > CodeQL包管理(新項目,和CodeQL不同)功能目前為測試版本提供,Beta版本期間使僅可以使用GitHub > CodeQL包用戶創建、共享、依賴和運行CodeQL查詢和庫,可以發布自己的CodeQL包,也可以下載他人創建的包。CodeQL包包含查詢、庫文件、查詢套件和元數據。 > CodeQL包有兩種類型:查詢包和庫包 > 查詢旨在運行。打不查詢包時,該包包含所有傳遞依賴項和編譯緩存。這確保保重查詢的一致和高效執行 > 庫包旨在提供查詢寶(或其他庫包)使用,并不包含查詢本身。庫未編譯,并且在發布包時不包含編譯緩存 > 可以使用CodeQL CLI中的包管理命令來創建CodeQL包、向包添加依賴項以及安裝或更新依賴項。 CodeQL包結構 > CodeQL包必須在其根目錄包含一個《qlpack.yml》的文件。在qlpack.yml文件中,name:字段的值必須遵循<scope>/<pack>格式,其中<scope>是發布包的GitHub《組織或者用戶賬戶》,<pack>是包的名稱。包中的其他文件和目錄應該著邏輯組織,通常: > 1. 查詢被組織到特定類別的目錄中 > 2. 對特定產品、庫和框架的查詢被組織到他們自己的頂級目錄中 關于CodeQL的qlpack.yml文件 > 再執行與查詢相關的命令式,CodeQL受限再安裝目錄(及其子目錄)的兄弟目錄中查找qlpack.yml文件。然后他會檢查已下載的CodeQL包的寶緩存。這意味著當再本地開發查詢時,安裝目錄中的本地包會覆蓋包緩存中的通明白,以便可以測試本地更改。tip: 安裝目錄查看8.1.4章節 > 每個qlpack.yml文件中的元數據告訴CodeQL如何編譯保重的任何查詢、包依賴的庫以及在哪可以查詢套件定義。 > **CodeQL包的內容(CodeQL分析使用的查詢或庫)包含在與qlpack.yml相同的目錄或其子目錄中** > qlpack.yml的位置定義了CodeQL包內容的庫路徑。也就是說,對于包中的所有.ql和.qll文件,CodeQL將解析與包根目錄下的qlpack.yml相關的所有導入語句 [About CodeQL packs 配置選項](https://codeql.github.com/docs/codeql-cli/about-codeql-packs/) #### 關于QL packs > QL包用于組織CodeQL分析中使用的文件。他們包含查詢、庫文件、查詢套件和重要的元數據。 > CodeQL存儲庫包含C/C++、C#、Java、JavaScript、Python和Ruby的QL包。CodeQL for Go存儲庫包含用戶Go分析的QL包。還可以制作自定義QL包以包含自定義查詢和庫。 **4.2 QL包結構** > QL包必須在其根目錄包含一個名為qlpack.yml的文件。包中的其他文件和目錄應該按邏輯組織。通常: > 1. 查詢被組織到特定類別的目錄中 > 2. 對特定茶品、庫、和框架的查詢被組織到他們自己的頂級目錄中。 > 3. 查詢庫(.qll)文件有一個名為<owner>/<language>的頂級目錄。此目錄中,.qll文件硬組織到特定類別的子目錄中 關于QL包中的qlpack.yml文件 > 再執行命令時,CodeQL會掃描安裝目錄(及子目錄)的兄弟目錄中的qlpack.yml文件。文件中的元數據告訴CodeQL如何編譯查詢、包依賴的庫以及在哪里可以找到查詢套件定義。 > QL包的內容(CodeQL分析中使用的查詢和庫)與qlpack.yml或其子目錄包含在同一目錄中。 > qlpack.yml的位置定義了QL包內容的庫路徑。也就是說,對于QL包中的所有.ql和.qll文件,CodeQL將解析與包根目錄下的qlpack.yml相關的所有導入語句。 > 例如在包含以下內容的QL包中,可以通過聲明import mycompany.java.CustomSinks從包中的任何位置導入CustomSinks.qll ``` qlpack.yml mycompany/ java/ security/ CustomSinks.qll Security/ CustomQuery.ql ``` #### **Question: 自定義QL包**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看