如何停止任何下一个 JavaScript 事件以避免 XSS
How to stop any next JavaScript events to avoid XSS
我想在浏览器中显示带有 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 执行。
提前致谢!
不幸的是,这实际上是不可能的。这不起作用的原因是错误停止 该脚本 的执行,但不会停止页面上所有脚本的执行。
如果您信任来自用户的 HTML 输入,您只会遇到 XSS 漏洞,除非您尝试解析他们的输入并删除任何可能导致 javascript 事件的内容开火。不要尝试这个,如果你这样做,你会很心痛。
最终,这就是 MarkDown and Textile 之类的东西存在的原因。
我想 "what you should do" 的答案取决于您期望用户实际发送给您的内容,但最终您应该 运行 通过 htmlentities and/or strip_tags[= 的任何用户输入12=]
您可以指定 Content Security Policy 以防止任何内联 JavaScript 执行。
See here 浏览器兼容性。
还建议 运行 任何用户输入也通过 HTML 清理器,因为这将有助于保护不支持 CSP 的浏览器。还建议使用 BBcode 或类似 MarkDown 的东西,而不是让用户输入原始 HTML,因为这要简单得多(复杂性是安全的敌人)。
我想在浏览器中显示带有 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 执行。
提前致谢!
不幸的是,这实际上是不可能的。这不起作用的原因是错误停止 该脚本 的执行,但不会停止页面上所有脚本的执行。
如果您信任来自用户的 HTML 输入,您只会遇到 XSS 漏洞,除非您尝试解析他们的输入并删除任何可能导致 javascript 事件的内容开火。不要尝试这个,如果你这样做,你会很心痛。
最终,这就是 MarkDown and Textile 之类的东西存在的原因。
我想 "what you should do" 的答案取决于您期望用户实际发送给您的内容,但最终您应该 运行 通过 htmlentities and/or strip_tags[= 的任何用户输入12=]
您可以指定 Content Security Policy 以防止任何内联 JavaScript 执行。
See here 浏览器兼容性。
还建议 运行 任何用户输入也通过 HTML 清理器,因为这将有助于保护不支持 CSP 的浏览器。还建议使用 BBcode 或类似 MarkDown 的东西,而不是让用户输入原始 HTML,因为这要简单得多(复杂性是安全的敌人)。