collab/mermaid/cypress/platform/xss2.htmlblame
View source
6dd74de1<html>
6dd74de2 <head>
6dd74de3 <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
6dd74de4 <style>
6dd74de5 .malware {
6dd74de6 position: fixed;
6dd74de7 bottom: 0;
6dd74de8 left: 0;
6dd74de9 right: 0;
6dd74de10 height: 150px;
6dd74de11 background: red;
6dd74de12 color: black;
6dd74de13 display: flex;
6dd74de14 display: flex;
6dd74de15 justify-content: center;
6dd74de16 align-items: center;
6dd74de17 font-family: monospace;
6dd74de18 font-size: 72px;
6dd74de19 }
6dd74de20 </style>
6dd74de21 <script>
6dd74de22 function xssAttack() {
6dd74de23 const div = document.createElement('div');
6dd74de24 div.id = 'the-malware';
6dd74de25 div.className = 'malware';
6dd74de26 div.innerHTML = 'XSS Succeeded';
6dd74de27 document.getElementsByTagName('body')[0].appendChild(div);
6dd74de28 throw new Error('XSS Succeeded');
6dd74de29 }
6dd74de30 </script>
6dd74de31 </head>
6dd74de32 <body>
6dd74de33 <pre class="mermaid">
6dd74de34 %%{init: { 'theme':'base', '__proto__': {'polluted': 'asdf'}} }%%
6dd74de35 graph LR
6dd74de36 A --> B
6dd74de37 </pre>
6dd74de38 <pre class="mermaid">
6dd74de39 %%{init: { 'theme':'base', '__proto__': {'polluted': 'asdf'}} }%%
6dd74de40 %%{init: { 'theme':'base', '__proto__': {'polluted': 'asdf'}} }%%
6dd74de41 graph LR
6dd74de42 A --> B
6dd74de43 </pre>
6dd74de44 <pre class="mermaid">
6dd74de45 %%{init: { 'prototype': {'__proto__': {'polluted': 'test'}}} }%%
6dd74de46 %%{init: { 'prototype': {'__proto__': {'polluted': 'test'}}} }%%
6dd74de47 sequenceDiagram
6dd74de48 Alice->>Bob: Hi Bob
6dd74de49 Bob->>Alice: Hi Alice
6dd74de50 </pre>
6dd74de51 <script type="module">
6dd74de52 import mermaid from './mermaid.esm.mjs';
6dd74de53 mermaid.initialize({
6dd74de54 startOnLoad: true,
6dd74de55 useMaxWidth: true,
6dd74de56 });
6dd74de57 let cnt = 0;
6dd74de58 let a;
6dd74de59 const handler = setInterval(() => {
6dd74de60 cnt++;
6dd74de61 a = {};
6dd74de62 if (a.polluted !== undefined) {
6dd74de63 clearInterval(handler);
6dd74de64 xssAttack();
6dd74de65 }
6dd74de66 if (cnt > 20) {
6dd74de67 clearInterval(handler);
6dd74de68 }
6dd74de69 }, 100);
6dd74de70 </script>
6dd74de71 </body>
6dd74de72</html>