+ public function test_more_complex_content_script_escaping_scenarios()
+ {
+ $checks = [
+ "<p>Some script</p><script>alert('cat')</script>",
+ "<div><div><div><div><p>Some script</p><script>alert('cat')</script></div></div></div></div>",
+ "<p>Some script<script>alert('cat')</script></p>",
+ "<p>Some script <div><script>alert('cat')</script></div></p>",
+ "<p>Some script <script><div>alert('cat')</script></div></p>",
+ "<p>Some script <script><div>alert('cat')</script><script><div>alert('cat')</script></p><script><div>alert('cat')</script>",
+ ];
+
+ $this->asEditor();
+ $page = Page::first();
+
+ foreach ($checks as $check) {
+ $page->html = $check;
+ $page->save();
+
+ $pageView = $this->get($page->getUrl());
+ $pageView->assertStatus(200);
+ $pageView->assertElementNotContains('.page-content', '<script>');
+ $pageView->assertElementNotContains('.page-content', '</script>');
+ }
+
+ }
+
+ public function test_iframe_js_and_base64_urls_are_removed()
+ {
+ $checks = [
+ '<iframe src="javascript:alert(document.cookie)"></iframe>',
+ '<iframe SRC=" javascript: alert(document.cookie)"></iframe>',
+ '<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgnaGVsbG8nKTwvc2NyaXB0Pg==" frameborder="0"></iframe>',
+ '<iframe src=" data:text/html;base64,PHNjcmlwdD5hbGVydCgnaGVsbG8nKTwvc2NyaXB0Pg==" frameborder="0"></iframe>',
+ '<iframe srcdoc="<script>window.alert(document.cookie)</script>"></iframe>'
+ ];
+
+ $this->asEditor();
+ $page = Page::first();
+
+ foreach ($checks as $check) {
+ $page->html = $check;
+ $page->save();
+
+ $pageView = $this->get($page->getUrl());
+ $pageView->assertStatus(200);
+ $pageView->assertElementNotContains('.page-content', '<iframe>');
+ $pageView->assertElementNotContains('.page-content', '</iframe>');
+ $pageView->assertElementNotContains('.page-content', 'src=');
+ $pageView->assertElementNotContains('.page-content', 'javascript:');
+ $pageView->assertElementNotContains('.page-content', 'data:');
+ $pageView->assertElementNotContains('.page-content', 'base64');
+ }