Fotify掃描問題Dynamic Code Evaluation:Code Injection

GirlsBoy發表於2024-07-31

  在使用fotify程式碼掃描時,程式中JavaScript 的 eval() 函式使用的地方會報Dynamic Code Evaluation:Code Injection,解釋為動態程式碼評估、程式碼注入,Web 開發中。這兩種風險都可能導致嚴重的安全問題.

  其安全問題大致描述為

1、動態執行的程式碼可能會包含惡意程式碼,導致安全漏洞。
2、程式碼注入,透過各種方式注入惡意程式碼,這些程式碼可能會執行有害的操作,如竊取資料、篡改應用邏輯等。
3、動態生成的程式碼可能難以除錯和維護,因為它可能依賴於執行時的資料。
4、遠端執行指令碼等風險

  透過在網上搜尋相關解決方案,最終形成解決方案為替換掉使用eval的地方。首先來看一下eval函式的強大功能

1、eval()可以執行任何有效的JavaScript程式碼,包括變數宣告、表示式、語句、函式定義等
2、eval()可以用於動態執行程式碼、動態建立函式、動態解析JSON等
3、透過eval()函式,可以將字串轉換為可執行的程式碼,從而實現動態程式設計和程式碼的靈活性

  根據對工程中所使用到的eval函式的分析,最終,使用JSON.parse()來替換,但替換過程也需要根據實際情況進行相應的修改。

  一、動態JSON解析

  當解析後端返回值形如var data = {datacount:1,datas:[{"t":1,"w":2}]}這種串時,由於此串並不是標準的json(標準的json鍵使用雙引號包住)。當使用eval函式處理時,可以透過eval("(" + data+ ")")方式處理【由於該data字串是以{}開始和結尾,當使用eval函式時,會將其當作一個語句塊處理,所以需要使用括號表示式(expression),將其轉化為物件】,轉化為物件之後便可以方便的獲取其中的屬性。如果直接使用JSON.parse(),會解析錯誤。這樣就需要對返回值的字元進行加工處理,可透過以下方法替換

var date = "{datacount:1,datas:[{\"t\":1,\"w\":2}]}";
data = data.replace(/(\w+):/g, '"$1":');
var relVal = JSON.parse(data);

  處理之後,獲取又可透過物件呼叫方式獲取,如relVal.datacount。

  二、透過eval函式轉化為可執行程式碼

  如eval(2*"2"),需要返回4,可以使用JSON.parse(2*"2")替換。

  當然還有更有效的安全方法作為替換方案解決fotify掃描問題,此僅作為一種方案介紹,如有疑問,歡迎討論交流。

相關文章