@@ -43,6 +43,80 @@ var m_window_removeEventListener = window.removeEventListener;
43
43
var documentEventHandlers = { } ;
44
44
var windowEventHandlers = { } ;
45
45
46
+ /**
47
+ * Mitigation for Event Listener Hijacking
48
+ */
49
+ ( function ( ) {
50
+ var originalDocumentAddEventListener = document . addEventListener ;
51
+ var originalWindowAddEventListener = window . addEventListener ;
52
+ var documentEventHandlers = { } ;
53
+ var windowEventHandlers = { } ;
54
+
55
+ document . addEventListener = function ( evt , handler , capture ) {
56
+ var e = evt . toLowerCase ( ) ;
57
+ if ( typeof documentEventHandlers [ e ] !== 'undefined' ) {
58
+ if ( typeof documentEventHandlers [ e ] . subscribe === 'function' ) {
59
+ documentEventHandlers [ e ] . subscribe ( handler ) ;
60
+ } else {
61
+ console . warn ( 'No subscribe function defined for event:' , e ) ;
62
+ }
63
+ } else {
64
+ originalDocumentAddEventListener . call ( document , evt , handler , capture ) ;
65
+ }
66
+ } ;
67
+
68
+ window . addEventListener = function ( evt , handler , capture ) {
69
+ var e = evt . toLowerCase ( ) ;
70
+ if ( typeof windowEventHandlers [ e ] !== 'undefined' ) {
71
+ if ( typeof windowEventHandlers [ e ] . subscribe === 'function' ) {
72
+ windowEventHandlers [ e ] . subscribe ( handler ) ;
73
+ } else {
74
+ console . warn ( 'No subscribe function defined for event:' , e ) ;
75
+ }
76
+ } else {
77
+ originalWindowAddEventListener . call ( window , evt , handler , capture ) ;
78
+ }
79
+ } ;
80
+
81
+ // Securely define your event handlers
82
+ documentEventHandlers [ 'click' ] = {
83
+ subscribe : function ( handler ) {
84
+ var secureHandler = function ( event ) {
85
+ // Perform necessary checks or actions before invoking the handler
86
+ if ( event && event . target ) {
87
+ var allowedElements = [ 'button' , 'a' , 'div' ] ;
88
+ if ( allowedElements . includes ( event . target . tagName . toLowerCase ( ) ) ) {
89
+ handler ( event ) ;
90
+ } else {
91
+ console . warn ( 'Click event handler ignored for disallowed element:' , event . target . tagName ) ;
92
+ }
93
+ } else {
94
+ console . warn ( 'Invalid event object in secure handler.' ) ;
95
+ }
96
+ } ;
97
+ originalDocumentAddEventListener . call ( document , 'click' , secureHandler , false ) ;
98
+ }
99
+ } ;
100
+
101
+ windowEventHandlers [ 'resize' ] = {
102
+ subscribe : function ( handler ) {
103
+ var secureHandler = function ( event ) {
104
+ // Perform necessary checks or actions before invoking the handler
105
+ if ( event && event . target ) {
106
+ if ( event . target === window ) {
107
+ handler ( event ) ;
108
+ } else {
109
+ console . warn ( 'Resize event handler ignored for disallowed target:' , event . target ) ;
110
+ }
111
+ } else {
112
+ console . warn ( 'Invalid event object in secure handler.' ) ;
113
+ }
114
+ } ;
115
+ originalWindowAddEventListener . call ( window , 'resize' , secureHandler , false ) ;
116
+ }
117
+ } ;
118
+ } ) ( ) ;
119
+
46
120
document . addEventListener = function ( evt , handler , capture ) {
47
121
var e = evt . toLowerCase ( ) ;
48
122
if ( typeof documentEventHandlers [ e ] !== 'undefined' ) {
0 commit comments