File tree Expand file tree Collapse file tree 3 files changed +26
-28
lines changed Expand file tree Collapse file tree 3 files changed +26
-28
lines changed Original file line number Diff line number Diff line change 11# No ` innerHTML `
22
3- Using ` innerHTML ` poses a potential security risk. It should only be used when clearing content .
3+ Using ` innerHTML ` poses a potential security risk. Prefer using ` textContent ` to set text to an element .
44
55``` js
66// bad
@@ -9,8 +9,8 @@ function setContent(element, content) {
99}
1010
1111// good
12- function clearContent (element ) {
13- element .innerHTML = ' '
12+ function setContent (element , content ) {
13+ element .textContent = content
1414}
1515```
1616
Original file line number Diff line number Diff line change @@ -2,31 +2,19 @@ module.exports = {
22 meta : {
33 type : 'problem' ,
44 docs : {
5- description : 'disallow `Element.prototype.innerHTML``' ,
5+ description : 'disallow `Element.prototype.innerHTML` in favor of `Element.prototype.textContent `' ,
66 url : require ( '../url' ) ( module )
77 } ,
88 schema : [ ]
99 } ,
1010
1111 create ( context ) {
1212 return {
13- AssignmentExpression ( node ) {
14- if ( node . operator === '=' ) {
15- const leftNode = node . left
16- const rightNode = node . right
17-
18- if ( leftNode . property && leftNode . property . name === 'innerHTML' ) {
19- if ( rightNode . type === 'Literal' && rightNode . value === '' ) {
20- return
21- }
22-
23- context . report ( {
24- node,
25- message :
26- 'Using innerHTML poses a potential security risk and should not be used other than clearing content.'
27- } )
28- }
29- }
13+ 'MemberExpression[property.name=innerHTML]' : function ( node ) {
14+ context . report ( {
15+ node : node . property ,
16+ message : 'Using innerHTML poses a potential security risk and should not be used. Prefer using textContent.'
17+ } )
3018 }
3119 }
3220 }
Original file line number Diff line number Diff line change @@ -6,27 +6,37 @@ const ruleTester = new RuleTester()
66ruleTester . run ( 'no-innter-html' , rule , {
77 valid : [
88 {
9- code : 'document.createElement("js-flash-text").innerHTML = ""'
9+ code : 'document.createElement("js-flash-text").textContent = ""'
10+ } ,
11+ {
12+ code : 'document.createElement("js-flash-text").textContent = "foo"'
1013 }
1114 ] ,
1215 invalid : [
1316 {
1417 code : 'document.createElement("js-flash-text").innerHTML = "foo"' ,
1518 errors : [
1619 {
17- message :
18- 'Using innerHTML poses a potential security risk and should not be used other than clearing content.' ,
19- type : 'AssignmentExpression'
20+ message : 'Using innerHTML poses a potential security risk and should not be used. Prefer using textContent.' ,
21+ type : 'Identifier'
2022 }
2123 ]
2224 } ,
2325 {
2426 code : 'document.querySelector("js-flash-text").innerHTML = "<div>code</div>"' ,
2527 errors : [
2628 {
27- message :
28- 'Using innerHTML poses a potential security risk and should not be used other than clearing content.' ,
29- type : 'AssignmentExpression'
29+ message : 'Using innerHTML poses a potential security risk and should not be used. Prefer using textContent.' ,
30+ type : 'Identifier'
31+ }
32+ ]
33+ } ,
34+ {
35+ code : 'document.querySelector("js-flash-text").innerHTML = ""' ,
36+ errors : [
37+ {
38+ message : 'Using innerHTML poses a potential security risk and should not be used. Prefer using textContent.' ,
39+ type : 'Identifier'
3040 }
3141 ]
3242 }
You can’t perform that action at this time.
0 commit comments