[英]Escaping special characters in Java
我支持的應用程序正在接受安全審查,並且有一些有關轉義特殊字符的問題。 我已經很長時間沒有為該應用程序提供支持了,而且我對轉義特殊字符也不了解。 我被問到的問題是: “為什么要先對值進行JavaScript編碼,然后再對其進行HTML編碼?該值是否在需要兩個上下文都進行編碼的上下文中寫出?”
使用的JavaScript編碼和使用的HTML編碼有什么區別? 為什么我的代碼中同時需要兩者?
任何有關此的信息將不勝感激!
public class HTMLEncodedResultSet extends ResultSetWrapper {
public HTMLEncodedResultSet(ResultSet resultSet) {
super(resultSet);
}
public String getString(int columnIndex) throws SQLException {
return StringEscapeUtils.escapeHtml(StringEscapeUtils.escapeJavaScript(super.getString(columnIndex)));
}
public String getString(String columnName) throws SQLException {
return StringEscapeUtils.escapeHtml(StringEscapeUtils.escapeJavaScript(super.getString(columnName)));
}
}
從官方文檔中:
使用HTML實體轉義字符串中的字符。
例如:
“牛油面包”
變成:“面包”和“黃油”。
使用JavaScript字符串規則轉義字符串中的字符。
將找到的所有值轉義為JavaScript String形式。 正確處理引號和控制字符(制表符,反斜杠,cr,ff等)
因此,制表符變為字符“ \\”和“ t”。
例:
輸入字符串:他沒有說“停止!” 輸出字符串:他沒有說“停止!”
因此,鑒於JS和HTML保留字符不同,在您的情況下,如果輸入包含HTML和JS代碼,則可能有必要同時調用這兩種方法。
您的應用程序似乎已將JavaScript代碼段存儲在數據庫中。 這些片段可能創建或包含HTML部分(即,用於基於交互生成動態HTML)。 在Java中將這些摘要作為字符串從DB加載時,需要JavaScript和HTML編碼。
這里是一個可以存儲在數據庫中的值的示例。
var obj = $('#fire');
var fps = 200;
var letters = obj.html().split('');
obj.empty();
$.each(letters,function(el){
obj.append($('<span>'+this+'</span>'));
});
var animateLetters = obj.find('span');
setInterval(function(){
animateLetters.each(function(){
$(this).css('fontSize', 80+(Math.floor(Math.random()*50)));
});
},fps);
參考文檔:
escapeHTML :使用HTML實體轉義字符串中的字符。
例如:
“牛油面包”
變成:
"bread" & "butter"
"bread" & "butter"
。
和
escapeJavaScript :將找到的所有值轉入其JavaScript String形式。 正確處理引號和控制字符(制表符,反斜杠,cr,ff等)
因此,制表符變為字符“ \\”和“ t”。
Java字符串和JavaScript字符串之間的唯一區別是,在JavaScript中,必須轉義單引號。
例:
輸入字符串:他沒有說“停止!” 輸出字符串:他沒有說“停止!”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.