2014-03-19 32 views
0

我在我的應用程序中看到此代碼。有人可以幫我理解這是如何幫助清理請求URL以防止任何由CR/LF引起的攻擊嗎?清潔網址以防止由於CR引起的攻擊LF

public static String validaterequestURL(String requestURL) throws EncodingException { 
    Encoder encoder = new DefaultEncoder(new ArrayList<String>()); 
    //canonicalize 
    String clean = encoder.canonicalize(requestURL).trim(); 
    clean = encoder.decodeFromrequestURL(clean);   
    int idxR = clean.indexOf('\r'); 
    int idxN = clean.indexOf('\n'); 
    if(idxN >= 0 || idxR>=0){ 
     if(idxN>idxR){    
      clean = clean.substring(0,idxN-1); 
     } 
     else{    
     clean = clean.substring(0,idxR-1); 
     } 
    }  
    return clean; 
} 

我特別想了解下面幾行是如何工作的?

int idxR = clean.indexOf('\r'); 
    int idxN = clean.indexOf('\n'); 
    if(idxN >= 0 || idxR>=0){ 
     if(idxN>idxR){    
      clean = clean.substring(0,idxN-1); 
     } 
     else{    
     clean = clean.substring(0,idxR-1); 
     } 
    }  

回答

1

如果\n(換行/行)或​​\r(回車)字符存在,則相應的索引(其在字符串中的位置)將是> = 0。如果是這樣,則substring操作會截斷字符串,刪除違規字符及其後的所有內容。

的邏輯似乎是設立這樣如果\n\r被發現,只有兩個(和之後的任何東西)將被刪除以後。我不知道爲什麼作者認爲這是一個好主意,我本來希望能從早先的截斷中完成截斷。