Branch data Line data Source code
1 [ + ]: 2 : import assert from 'node:assert/strict';
2 : 2 : import { XMLHttpRequest } from '../../../lib/whatwg-xhr.js';
3 : 2 :
4 [ + ]: 2 : export default (activeURL) => {
5 : 1 :
6 : 1 : let xhr = new XMLHttpRequest();
7 : 1 :
8 : 1 : xhr.open('POST', `${activeURL}/inspect-headers.py?filter_value=TEST`, false);
9 : 1 :
10 : 1 : xhr.setRequestHeader('Accept-Charset', 'TEST');
11 : 1 : xhr.setRequestHeader('Accept-Encoding', 'TEST');
12 : 1 : xhr.setRequestHeader('Connection', 'TEST');
13 : 1 : xhr.setRequestHeader('Content-Length', 'TEST');
14 : 1 : xhr.setRequestHeader('Cookie', 'TEST');
15 : 1 : xhr.setRequestHeader('Cookie2', 'TEST');
16 : 1 : xhr.setRequestHeader('Date', 'TEST');
17 : 1 : xhr.setRequestHeader('DNT', 'TEST');
18 : 1 : xhr.setRequestHeader('Expect', 'TEST');
19 : 1 : xhr.setRequestHeader('Host', 'TEST');
20 : 1 : xhr.setRequestHeader('Keep-Alive', 'TEST');
21 : 1 : xhr.setRequestHeader('Referer', 'TEST');
22 : 1 : xhr.setRequestHeader('TE', 'TEST');
23 : 1 : xhr.setRequestHeader('Trailer', 'TEST');
24 : 1 : xhr.setRequestHeader('Transfer-Encoding', 'TEST');
25 : 1 : xhr.setRequestHeader('Upgrade', 'TEST');
26 : 1 : xhr.setRequestHeader('Via', 'TEST');
27 : 1 : xhr.setRequestHeader('Proxy-', 'TEST');
28 : 1 : xhr.setRequestHeader('Proxy-LIES', 'TEST');
29 : 1 : xhr.setRequestHeader('Proxy-Authorization', 'TEST');
30 : 1 : xhr.setRequestHeader('Sec-', 'TEST');
31 : 1 : xhr.setRequestHeader('Sec-X', 'TEST');
32 : 1 :
33 : 1 : xhr.send();
34 : 1 : assert.strictEqual(xhr.responseText, '');
35 : 1 :
36 : 1 : let forbiddenMethods = [
37 : 1 : 'TRACE',
38 : 1 : 'TRACK',
39 : 1 : 'CONNECT',
40 : 1 : 'trace',
41 : 1 : 'track',
42 : 1 : 'connect',
43 : 1 : 'trace,',
44 : 1 : 'GET,track ',
45 : 1 : ' connect',
46 : 1 : ];
47 : 1 :
48 : 1 : let overrideHeaders = [
49 : 1 : 'x-http-method-override',
50 : 1 : 'x-http-method',
51 : 1 : 'x-method-override',
52 : 1 : 'X-HTTP-METHOD-OVERRIDE',
53 : 1 : 'X-HTTP-METHOD',
54 : 1 : 'X-METHOD-OVERRIDE',
55 : 1 : ];
56 : 1 :
57 [ + ]: 1 : for (let forbiddenMethod of forbiddenMethods) {
58 [ + ]: 9 : for (let overrideHeader of overrideHeaders) {
59 : 54 : let xhr = new XMLHttpRequest();
60 : 54 :
61 : 54 : xhr.open('POST',
62 : 54 : `${activeURL}/inspect-headers.py?filter_name=${forbiddenMethod}`, false);
63 : 54 :
64 : 54 : xhr.setRequestHeader(overrideHeader, forbiddenMethod);
65 : 54 : xhr.send();
66 : 54 :
67 : 54 : assert.strictEqual(xhr.responseText, '');
68 : 54 : }
69 : 9 : }
70 : 1 :
71 : 1 : let permittedValues = [
72 : 1 : 'GETTRACE',
73 : 1 : 'GET',
74 : 1 : '\",TRACE\",',
75 : 1 : ];
76 : 1 :
77 [ + ]: 1 : for (let permittedValue of permittedValues) {
78 [ + ]: 3 : for (let overrideHeader of overrideHeaders) {
79 : 18 : let xhr = new XMLHttpRequest();
80 : 18 :
81 : 18 : xhr.open('POST',
82 : 18 : `${activeURL}/inspect-headers.py?filter_name=${overrideHeader}`, false);
83 : 18 :
84 : 18 : xhr.setRequestHeader(overrideHeader, permittedValue);
85 : 18 : xhr.send();
86 : 18 :
87 : 18 : assert.strictEqual(xhr.responseText, `${overrideHeader}: ${permittedValue}\n`);
88 : 18 : }
89 : 3 : }
90 : 1 : }
91 : 2 :
92 : 2 : /*
93 : 2 : * setrequestheader-header-forbidden.htm
94 : 2 : *
95 : 2 :
96 : 2 : <!doctype html>
97 : 2 : <html>
98 : 2 : <head>
99 : 2 : <title>XMLHttpRequest: setRequestHeader() - headers that are forbidden</title>
100 : 2 : <script src="/resources/testharness.js"></script>
101 : 2 : <script src="/resources/testharnessreport.js"></script>
102 : 2 : <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method">
103 : 2 :
104 : 2 : </head>
105 : 2 : <body>
106 : 2 : <div id="log"></div>
107 : 2 : <script>
108 : 2 : test(function() {
109 : 2 : var client = new XMLHttpRequest()
110 : 2 : client.open("POST", "resources/inspect-headers.py?filter_value=TEST", false)
111 : 2 : client.setRequestHeader("Accept-Charset", "TEST")
112 : 2 : client.setRequestHeader("Accept-Encoding", "TEST")
113 : 2 : client.setRequestHeader("Connection", "TEST")
114 : 2 : client.setRequestHeader("Content-Length", "TEST")
115 : 2 : client.setRequestHeader("Cookie", "TEST")
116 : 2 : client.setRequestHeader("Cookie2", "TEST")
117 : 2 : client.setRequestHeader("Date", "TEST")
118 : 2 : client.setRequestHeader("DNT", "TEST")
119 : 2 : client.setRequestHeader("Expect", "TEST")
120 : 2 : client.setRequestHeader("Host", "TEST")
121 : 2 : client.setRequestHeader("Keep-Alive", "TEST")
122 : 2 : client.setRequestHeader("Referer", "TEST")
123 : 2 : client.setRequestHeader("TE", "TEST")
124 : 2 : client.setRequestHeader("Trailer", "TEST")
125 : 2 : client.setRequestHeader("Transfer-Encoding", "TEST")
126 : 2 : client.setRequestHeader("Upgrade", "TEST")
127 : 2 : client.setRequestHeader("Via", "TEST")
128 : 2 : client.setRequestHeader("Proxy-", "TEST")
129 : 2 : client.setRequestHeader("Proxy-LIES", "TEST")
130 : 2 : client.setRequestHeader("Proxy-Authorization", "TEST")
131 : 2 : client.setRequestHeader("Sec-", "TEST")
132 : 2 : client.setRequestHeader("Sec-X", "TEST")
133 : 2 : client.send(null)
134 : 2 : assert_equals(client.responseText, "")
135 : 2 : })
136 : 2 :
137 : 2 : test (function() {
138 : 2 :
139 : 2 : let forbiddenMethods = [
140 : 2 : "TRACE",
141 : 2 : "TRACK",
142 : 2 : "CONNECT",
143 : 2 : "trace",
144 : 2 : "track",
145 : 2 : "connect",
146 : 2 : "trace,",
147 : 2 : "GET,track ",
148 : 2 : " connect",
149 : 2 : ];
150 : 2 :
151 : 2 : let overrideHeaders = [
152 : 2 : "x-http-method-override",
153 : 2 : "x-http-method",
154 : 2 : "x-method-override",
155 : 2 : "X-HTTP-METHOD-OVERRIDE",
156 : 2 : "X-HTTP-METHOD",
157 : 2 : "X-METHOD-OVERRIDE",
158 : 2 : ];
159 : 2 :
160 : 2 : for (forbiddenMethod of forbiddenMethods) {
161 : 2 : for (overrideHeader of overrideHeaders) {
162 : 2 : var client = new XMLHttpRequest()
163 : 2 : client.open("POST",
164 : 2 : `resources/inspect-headers.py?filter_value=${forbiddenMethod}`, false)
165 : 2 : client.setRequestHeader(overrideHeader, forbiddenMethod)
166 : 2 : client.send(null)
167 : 2 : assert_equals(client.responseText, "")
168 : 2 : }
169 : 2 : }
170 : 2 :
171 : 2 : let permittedValues = [
172 : 2 : "GETTRACE",
173 : 2 : "GET",
174 : 2 : "\",TRACE\",",
175 : 2 : ];
176 : 2 :
177 : 2 : for (permittedValue of permittedValues) {
178 : 2 : for (overrideHeader of overrideHeaders) {
179 : 2 : var client = new XMLHttpRequest()
180 : 2 : client.open("POST",
181 : 2 : `resources/inspect-headers.py?filter_name=${overrideHeader}`, false)
182 : 2 : client.setRequestHeader(overrideHeader, permittedValue)
183 : 2 : client.send(null)
184 : 2 : assert_equals(client.responseText, overrideHeader + ": " + permittedValue + "\n")
185 : 2 : }
186 : 2 : }
187 : 2 : })
188 : 2 : </script>
189 : 2 : </body>
190 : 2 : </html>
191 : 2 :
192 : 2 : *
193 : 2 : * setrequestheader-header-forbidden.htm
194 : 2 : */
|