@@ -58,8 +58,9 @@ function getDefaultWhiteList() {
58
58
header : [ ] ,
59
59
hr : [ ] ,
60
60
i : [ ] ,
61
- img : [ "src" , "alt" , "title" , "width" , "height" ] ,
61
+ img : [ "src" , "alt" , "title" , "width" , "height" , "loading" ] ,
62
62
ins : [ "datetime" ] ,
63
+ kbd : [ ] ,
63
64
li : [ ] ,
64
65
mark : [ ] ,
65
66
nav : [ ] ,
@@ -456,6 +457,7 @@ exports.onIgnoreTagStripAll = onIgnoreTagStripAll;
456
457
exports . StripTagBody = StripTagBody ;
457
458
exports . stripCommentTag = stripCommentTag ;
458
459
exports . stripBlankChar = stripBlankChar ;
460
+ exports . attributeWrapSign = '"' ;
459
461
exports . cssFilter = defaultCSSFilter ;
460
462
exports . getDefaultCSSWhiteList = getDefaultCSSWhiteList ;
461
463
@@ -910,6 +912,8 @@ function FilterXSS(options) {
910
912
options . whiteList = DEFAULT . whiteList ;
911
913
}
912
914
915
+ this . attributeWrapSign = options . singleQuotedAttributeValue === true ? "'" : DEFAULT . attributeWrapSign ;
916
+
913
917
options . onTag = options . onTag || DEFAULT . onTag ;
914
918
options . onTagAttr = options . onTagAttr || DEFAULT . onTagAttr ;
915
919
options . onIgnoreTag = options . onIgnoreTag || DEFAULT . onIgnoreTag ;
@@ -947,6 +951,7 @@ FilterXSS.prototype.process = function (html) {
947
951
var onIgnoreTagAttr = options . onIgnoreTagAttr ;
948
952
var safeAttrValue = options . safeAttrValue ;
949
953
var escapeHtml = options . escapeHtml ;
954
+ var attributeWrapSign = me . attributeWrapSign ;
950
955
var cssFilter = me . cssFilter ;
951
956
952
957
// remove invisible characters
@@ -1000,7 +1005,7 @@ FilterXSS.prototype.process = function (html) {
1000
1005
// call `safeAttrValue()`
1001
1006
value = safeAttrValue ( tag , name , value , cssFilter ) ;
1002
1007
if ( value ) {
1003
- return name + '=" ' + value + '"' ;
1008
+ return name + '=' + attributeWrapSign + value + attributeWrapSign ;
1004
1009
} else {
1005
1010
return name ;
1006
1011
}
0 commit comments