Java 清除url以防止因CR LF而引起的攻击
我在我的应用程序中看到了这段代码。有人能帮我理解这是如何帮助清理请求URL以防止因CR/LF而引起的任何攻击的吗Java 清除url以防止因CR LF而引起的攻击,java,security,Java,Security,我在我的应用程序中看到了这段代码。有人能帮我理解这是如何帮助清理请求URL以防止因CR/LF而引起的任何攻击的吗 public static String validaterequestURL(String requestURL) throws EncodingException { Encoder encoder = new DefaultEncoder(new ArrayList<String>()); //canonicalize String clea
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;
}
如果存在\n
(换行符/换行符)或\r
(回车符)字符,则相应的索引(其在字符串中的位置)将>=0。如果是,则子字符串
操作将截断字符串,删除有问题的字符及其后的所有内容
逻辑的设置似乎是这样的:如果同时找到\n
和\r
,则只会删除这两个逻辑中较晚的一个(以及后面的任何内容)。我不知道作者为什么认为这是个好主意;我本以为会从前面的那个截短
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);
}
}