问题描述
我知道 elm 编译器会阻止您在 HTML 文档中放置 <script>
标签。相反,它会将它们切换到 <p>
s:
node
"script"
[ id "MathJax-script",type_ "text/javascript",src "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"
]
[]
我设法解决了这个问题。编译的 elm 代码(在我的例子中存储在一个 js 文件中),包含一些特殊的代码:
// XSS ATTACK VECTOR CHECKS
function _VirtualDom_noScript(tag)
{
return tag == 'script' ? 'p' : tag;
}
'script'
字符串可以替换为 'scrip'
,并且您可以使用 <script>
标签。
经过一番研究,我发现这可以阻止 XSS 攻击。这种担忧有多严重?我应该使用这个技巧来插入 <script>
标签吗?
解决方法
你应该问自己的一件事是为什么你想要这样做?如果您需要插入脚本,从 Elm 外部执行此操作通常是更可靠的选择(例如,这允许浏览器在您的 Elm 应用程序有机会加载/初始化之前开始加载该资源)。
话虽如此,您应该担心的主要原因是您无法控制的代码。好消息是 Elm 使得对您的代码执行供应链攻击变得非常困难。如果您削弱这些保护措施,您可能会使自己容易受到这些保护。但是,有人不加选择地尝试这种攻击是不太可能的,因为它通常不会对任何试图这样做的人起作用。
(如果您担心成为特定目标,那么您可能不应该考虑削弱任何安全功能)。