PHP靜態分析與跨站指令碼檢測(四)

來源:互聯網
上載者:User
今天繼續提交讀程式筆記,這次比較少,而且相對簡單些。
ConnectorComputation
    - compute()
        如果workList還有元素,就繼續迴圈,但是第一次進入迴圈時候根據構造方法來看workList只有一個元素<mainFunction, emptyCallString>。然後從workList中取出第一個元素,擷取TacFunction和CallString(gamma),根據TacFunction(p)從function2ECS中得到ECS(ecs_p),實際上此時functions2ECS中第一個元素對應的TacFunction即為_main。得到gamma在ecs_p中的位置,即是在一個CallString的鏈表中的位置
        隨後,將p這個TacFunction包含的所有的CfgNodeCall迭代一遍,對於每一個callNode,得到其callee(即被調用的函數q),在q!=null的情況下,以callNode建立一個新的CallString(gamma_2),從function2ECS中得到q對應的ECS(ecs_q),擷取ecs_q中gamma_2的位置,如果為-1,就將gamma_2添加到ecs_q的CallStrings隊列中去,並以q和gamma_2建立元素添加到workList中去,expand it。
        接下來擴充什麼ConnectorFunction因為都在for迴圈裡邊,是對局部變數的操作,所以沒有什麼用處。
        在while迴圈結束之後,調用makeCallGraph()方法。
    - makeCallGraph()
        首先以mainFunction初始化一個CallGraph,獲得mainFunction所包含的方法調用列表processUs<CfgNodeCall>,並建立一個以訪問的集合visited,將mainFunction添加進集合裡邊。
        當processUs不為空白,依次取出元素callNode,得到它的caller和callee,如果callee!=null,向callGraph中添加元素。如果callee還沒有被處理過,則將其所包含的所有函數調用添加進processUs,並將其放進visited。

Checker
    根據初始提供的run-all.bat的參數來看,實際上aliases analyze和literal analyze並沒有進行,只是gta.analyze()進行了,實際上也就是只有dependance analyze執行了。通過以來關係最後決定vulns。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.