【发布时间】:2023-12-10 13:45:01
【问题描述】:
我想在浏览器中显示一个带有 HTML 执行(格式化)的文本,这样它就很容易阅读,但不需要任何 JavaScript 执行。这是一个很大的文本,很难在 HTML 标记之间阅读。所以,执行 HTML 而不是 JavaScript。
我做了什么:我将此文本加载到 <iframe> 中,这样我就可以完全控制,我尝试像这样显示文本:
<script>
throw new Error('This is just to abort javascript');
</script>
<?php echo $text ?>
<script>
throw new Error('This is just to abort javascript');
</script>
控制台确实显示错误,但即便如此,如果我有
$text = '<script>alert(1)</script>'; 这个脚本无论如何都会被执行。
另一个我想避免的 XSS 示例。
$text = '<a href="#" onmouseover="alert(1)">this is a fake url</a>';
基本上,中止页面中的任何 JavaScript 执行。
提前致谢!
【问题讨论】:
-
您想完全删除
$text中的任何JS 脚本,还是希望它们在iframe 中显示为文本而不执行? -
您不能仅针对代码的某个区域禁用 javascript 执行。仅适用于整个页面(也只能在浏览器设置中手动设置)。恐怕你不会绕过过滤脚本或逃避它。
-
另一个需要注意的 xss 漏洞可能会破坏过滤掉任何不是“href”的计划...
<a href="javascript:alert(1);void(0);">I'm totally legit, click me.</a> -
@blcook223 - 这个想法是停止执行 any JavaScript 代码,而不仅仅是
<script>标签。正如@samlev 所说,有href="javascript:,我们也可以举办活动(onmouse...、onload和许多其他人)。因此,“解析文本并删除脚本”不是解决方案。我需要强制浏览器中止/停止任何脚本。我得到了我的解决方案:无法完成 :) 谢谢大家!
标签: javascript php html security xss