여기 정리 유효한 CFScript의 코드가 있다고 할 아래의 방법을 수정할 수 있습니다 입력에 보낼 수 있습니다 우리의 XML에는 더 높은 국제 문자를 지우는 방법과 XML을 깨는 더 낮은 ASCII 문자만을 지우는 방법 두 가지가 있습니다. 더 많은 문자를 찾으면 필터 규칙 만 확장하면됩니다. 또는 OWASP 사이트 https://www.owasp.org/index.php/ESAPI_Overview에서 오래된 CF에 ESAPI 단지를 추가 직접 CF10 함께 제공
https://learn.adobe.com/wiki/display/coldfusionen/EncodeForXML
또는 사용 ESAPI :
<cfscript>
function cleanHighAscii(text){
var buffer = createObject("java", "java.lang.StringBuffer").init();
var pattern = createObject("java", "java.util.regex.Pattern").compile(javaCast("string", "[^\x00-\x7F]"));
var matcher = pattern.Matcher(javaCast("string", text));
while(matcher.find()){
var value = matcher.group();
var asciiValue = asc(value);
if ((asciiValue == 8220) OR (asciiValue == 8221))
value = """";
else if ((asciiValue == 8216) || (asciiValue == 8217))
value = "'";
else if (asciiValue == 8230)
value = "...";
else
value = "&###asciiValue#;";
matcher.AppendReplacement(buffer, javaCast("string", value));
}
matcher.AppendTail(buffer);
return buffer.ToString();
}
function removeSubAscii(text){
return rereplaceNoCase(text, "\x1A","&###26#;", "all");
}
function XMLSafe(text){
text = cleanHighAscii(text);
text = removeSubAscii(text);
return text;
}
</cfscript>
다른 posisbilty 사용자 CF10의 funciton의 encodeForXML()이다
var esapi = createObject("java", "org.owasp.esapi.ESAPI");
var esapiEncoder = esapi.encoder();
return esapiEncoder.encodeForXML(text);
당신이 내 질문에 대해 잘못 이해했습니다. '»'는 그저 하나의 예제 일뿐입니다. 필요한 것은 0x13 코드입니다. 예 : & # 013 (존재하는 경우)와 같이 보일 것입니다 ... – Toby