清理网址以防止CR LF导致攻击

时间:2014-03-19 06:27:57

标签: java security

我在我的应用程序中看到了这段代码。有人可以帮我理解这有助于清理请求URL以防止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 个答案:

答案 0 :(得分:1)

如果存在\n(换行/换行)或\r(回车)字符,则相应的索引(其在字符串中的位置)将为> = 0。如果是这样,substring操作将截断字符串,删除有问题的字符及其后的所有内容。

似乎设置了逻辑,因此如果找到 \n\r {{1}}和{{1}},则只会删除两者中的较晚者(及其之后的任何内容) 。我不知道为什么作者认为这是个好主意;我原本期望截断是从前一个完成的。