如何消除VeraCode檢測中的CRLF Injection Issue(CWE ID 117)

          Veracode是一個檢測應用程序是否存在安全漏洞的工具,更多細節請訪問http://www.veracode.com

          這里主要總結一下如何消除Veracode檢測結果中的CRLF(Carriage Return, Line Feed) Injection Issue(CWE ID 117)。

          首先,先看看VeraCode對CRLF Injection Issue的定義:
          The acronym CRLF stands for "Carriage Return, Line Feed" and refers to the sequence of characters used to denote the end of a line of text.  CRLF injection vulnerabilities occur when data enters an application from an untrusted source and is not properly validated before being used.  For example, if an attacker is able to inject a CRLF into a log file, he could append falsified log entries, thereby misleading administrators or cover traces of the attack.  If an attacker is able to inject CRLFs into an HTTP response header, he can use this ability to carry out other attacks such as cache poisoning.  CRLF vulnerabilities primarily affect data integrity.

          再看卡VeraCode對如何解決這個問題的建議:
          Apply robust input filtering for all user-supplied data, using centralized data validation routines when possible.  Use output filters to sanitize all output derived from user-supplied input, replacing non-alphanumeric characters with their HTML entity equivalents.

          舉例:
          log.debug("xxxxxxxxxxxxxx");
          //這里的xxxxx部分內容可能是從環境變量或者外部獲取的,所以Veracode認為存在CRLF的安全隱患。

          通過對現有系統的實踐證明,對于這類CRLF Injection Issue,消除時主要遵循以下原則:

          1)使用Character.isISOControl去除變量中的ctrl類控制符
          2) 驗證后返回新的字符串變量

            
          public static final String removeControlCharacter(String input)
              {
                  
          if (input == null)
                  {
                      
          return "";
                  }
                  StringBuilder sb 
          = new StringBuilder();
                  
          for (int i=0; i<input.codePointCount(0, input.length()); i++)
                  {
                      
          int codePoint = input.codePointAt(i);
                      
          if(!Character.isISOControl(codePoint))
                      {
                          sb.appendCodePoint(codePoint);
                      }
                  }
                  
          return sb.toString();
              }
              
          修改后如下所示:
          log.debug(FileUtil.removeControlCharacter("xxxxxxxxxxxxxx"));

          posted on 2011-09-06 10:49 想飛就飛 閱讀(2189) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          公告


          導航

          <2011年9月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          統計

          常用鏈接

          留言簿(13)

          我參與的團隊

          隨筆分類(69)

          隨筆檔案(68)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 招远市| 越西县| 新巴尔虎右旗| 额尔古纳市| 曲阳县| 马鞍山市| 南投市| 耒阳市| 临桂县| 郓城县| 广东省| 牟定县| 鄂伦春自治旗| 光山县| 彰武县| 广平县| 柳州市| 宁海县| 府谷县| 新邵县| 新民市| 剑阁县| 凉城县| 灌阳县| 满洲里市| 天全县| 汾阳市| 广东省| 理塘县| 温泉县| 肃宁县| 宁阳县| 遂溪县| 罗江县| 黔西县| 德阳市| 平原县| 永泰县| 准格尔旗| 宜川县| 札达县|