コベリティスキャン結果「PATH_MANIPULATION」ソリューション

1.背景

 パブリック 静的文字列読み取り(文字列のパス){
       // 与えられた位置からファイルを取得する 
     ファイルファイル= 新しい新しいファイル(パス); 
} 
  
CID 1565229(数1):システム制御ファイルパス、ファイル名またはURI。(PATH_MANIPULATION)。5 シンク:.汚染パスまたはURIパスの値を使用して構成。これは、変更または重要または機密ファイルの存在をテストし、アクセスする攻撃を可能にすることができます。
適切な入力検証溶液を介して脆弱性経路。これは、安全でないパストラバーサル文字ブラックリストに文字セットは入力の安全性を向上させることができますが、推奨される方法は、文字セットのホワイトリストを期待することができます。私たちは、絶対パスとディレクトリトラバーサルのアップを除外する必要があります。

2.ソリューション

 2.1シナリオ1

1つの パブリック クラスCleanPathUtil {
 2      パブリック 静的文字列cleanString(文字列str){
 3          であれば(STR == NULL戻り ヌル4          StringBuilderのSB = 新規のStringBuilder();
5          のためのINT iは= 0; iは<str.length(); ++ I){
 6              sb.append(cleanChar(str.charAt(I)))。
7          }
 8          リターンsb.toString()。
9      }
 10  
11      プライベート 静的 チャーcleanChar(チャーCH){
 12  
13          // 0から9まで
14          INTは I 48 =; I <58; ++ I){
 15              であれば(CH == I)リターンCHAR )I。
16          }
 17  
18          // 'A' - 'Z' 
19          INT I 65 =; I <91; ++ i)が{
 20              であれば(CH == I)リターンCHAR )I。
21          }
 22  
23          // '' - 'Z' 
24          int型私は97を=。I <123; ++ I){
 25              であれば(CH == I)リターンCHAR )I。
26          }
 27  
28          // 他の有効な文字
29          スイッチ(CH){
 30              ケース '/' 31                  リターン '/' 32              ケース '' 33                  リターン '' ;
34              ケース ' - ' 35                  リターン ' - ' 36              ケース '_' 37                  リターン'_' ;
38              ケース '' 39                  リターン '' ;
40              ケース '' 41                  リターン '' ;
42              ケース '!' 43                  リターン '!' ;
44              ケース '@' 45                  リターン '@' ;
46              ケース '#' 47                  リターン '#' ;
48              ケース '$' 49                  リターン '$' ;
             '%' 51                  リターン '%' 52              ケース '^' 53                  リターン '^' 54              ケース '&' 55                  リターン '&' ;
56              ケース '*' 57                  リターン '*' ;
58              ケース '(' 59                  リターン '(' ;
 60              ケース '') 61                  リターン '') 62              ケース '+'                  '+' ;
64              ケース '=' 65                  リターン '=' 66              ケース ':' 67                  リターン ':' ;
68              ケース ';' 69                  リターン ';' ;
70              ケース '?' 71                  リターン '?' ;
72              ケース ' "' 73                  リターン '"' ;
74              ケース '<' 75                  リターン '<' ;
76              ケース'>' 77                  リターン '>' ;
 78              ケース ''' 79                  リターン ''' ;
 80          }
 81          IF (isChineseChar(CH))
 82              リターンCH;
 83          log.error(「[ALARM]認識されない文字、チェックしてくださいファイルINPUTのパス名" );
 84          リターン '%' ;
 85      }
 86  
87      // 中国語の文字や記号の分析は、Unicodeに従って符号化された
88      のプライベート 静的 ブール isChineseChar(チャーC){
 89         Character.UnicodeBlock UB = Character.UnicodeBlock.of(C);
90          リターン UB == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || UB == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
 91                  || UB == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || UB == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
 92                  || UB == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || UB == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
 93                  || UB == Character.UnicodeBlock.GENERAL_PUNCTUATION。
94      }
 95  
96 }

 2.2シナリオ2 

1つの パブリック クラスStringVerifyUtil {
 2      パブリック 静的文字列verifyNonNullString(文字入力){
 3          のchar [] originalChars = input.toCharArray()。
4          のchar []文字= 新しい CHAR [originalChars.length]。
5          のためのINT I 0 =; I <originalChars.length; iが++ ){
 6つの              文字[I] = purifyChar(originalChars [I])。
7          }
 8          リターン 新しい文字列(文字)。
9      }
 10  
11      民間 静的 チャー purifyChar(チャーinputc){
 12          リターンinputc。
13      }
 14 }

3使用

1  パブリック 静的文字列読み取り(文字列のパス){
 2        // 指定された場所からファイルを取得
3。       文字列cleanpath = StringVerifyUtil.verifyNonNullString(パス);
 4       ファイルファイル= 新しい新ファイル(cleanpath);
 5 }

 

おすすめ

転載: www.cnblogs.com/dukedu/p/12522553.html