2013-03-07 79 views
3

我正在嘗試編寫一個能夠識別易受攻擊代碼塊的正則表達式。代碼中經常被忽略的典型位置是代碼中的TODO,FIXME,CVE和BUG註釋。正則表達式匹配來識別易受攻擊代碼

在應用程序上執行安全代碼審查時,我的目標是使用合適的正則表達式在註釋中優化「相關」TODO和FIXME和BUG聲明的結果。

也許我試圖瞄準這個寵物項目太大。然後再次,這是堆棧溢出。如果某人在這裏不知道答案,那麼很有可能,沒有人會(尚)。

樣例文本


1. //TODO - autogenerated catch block. This could be a security flaw 
2. 
3. // But this could be a CVE also. 
4. 
5. String val = "empty"; 
6. /* 
7. * TODO bug fix later 
8. * Fixme although it probably does not need it 
9. */ 
10. 
11. //TODO autogenerated 
12. //security problem. Too hard to fix 
13. Integer int4 = 1; 
14. Object o = null; 
15. //TODO dummy block 

這裏就是我希望的。我想正則表達式:

  1. FLAG 1號線在單個註釋TODO和安全
  2. FLAG線7 TODO和bug單註釋行
  3. FLAG線11 & 12,因爲它有TODO和安全在相同的評論塊中,即在實際的代碼行之前。
  4. FLAG第3行,因爲它提到了CVE。
  5. IGNORE 15號線,因爲它似乎是一個虛擬的TODO,因此是噪音。

免責聲明 - 我知道沒有一個統一的MAGIC正則表達式,可以完全退出這個功能,但我希望得到儘可能接近。

謝謝!

+0

你遇到了難題。 – alestanis 2013-03-07 22:46:35

+0

謝謝!但是如果解決了這個問題,那麼對於安全行業中的所有人來說都是有價值的。這是一個不幸的現實,現在的靜態分析工具在分離小麥和穀殼方面做得不好。 – raTM 2013-03-07 22:51:23

+1

那麼,這個問題當然可以解決,但恕我直言不與正則表達式。已經有一些工具可以進行代碼解析(考慮doxygen),並將註釋中的內容分開(這已經不是那麼容易了)。一旦你有評論的內容,你可以做一些[NLP](http://en.wikipedia.org/wiki/Natural_language_processing)?或者只是尋找關鍵詞,因爲你建議 – alestanis 2013-03-07 22:56:49

回答

2

的事實,顯示的邏輯是所有基於評論去,至少應該輕移你破譯密碼向下的方向:

preg_match_all('#// .* | /[*] [\s\S]*? [*]/#x', 
    $body, $matches, PREG_OFFSET_CAPTURE 
); 

這將匹配所有的意見,並在那裏出現;它匹配內部字符串以及雖然,這只是其中的一個東西;-)

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => //TODO - autogenerated catch block. This could be a security flaw 
        [1] => 3 
       ) 

      [1] => Array 
       (
        [0] => // But this could be a CVE also. 
        [1] => 76 
       ) 

      [2] => Array 
       (
        [0] => /* 
7. * TODO bug fix later 
8. * Fixme although it probably does not need it 
9. */ 
        [1] => 141 
       ) 

      [3] => Array 
       (
        [0] => //TODO autogenerated 
        [1] => 232 
       ) 

      [4] => Array 
       (
        [0] => //security problem. Too hard to fix 
        [1] => 257 
       ) 

      [5] => Array 
       (
        [0] => //TODO dummy block 
        [1] => 340 
       ) 

     ) 

) 
+0

謝謝@Jack - 絕對讓我想到那個。非常感激。不太熟悉正則表達式原語,但是用於分析和組織匹配的分組? – raTM 2013-03-08 03:30:32

+0

@raTM沒有,沒有分組;只有兩個表達式用'|'替代,意思是匹配行註釋或塊註釋。 – 2013-03-08 03:35:07