如何将存储的JS脚本添加到iframe

问题描述 投票:0回答:0

我有在数据库中存储 html 和 Js 的 ASP.NET MVC 应用程序。应用程序需要呈现存储的 HTML 并在该 HTML 上执行存储的 JS。基本上它应该像 JSFiddle 一样工作。
但这样的东西是开放的 XSS 攻击。所以为了最小化爆炸半径,我找到的解决方案是使用

iframe
sandbox
属性。我能够让它工作。下面是我的示例主 html 页面。

<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8" />        
        <script src="~/lib/jquery/dist/jquery.min.js"></script>    
    </head>
    <body>
        <div id='myOuterDiv'></div>
        <iframe src="/home/html" sandbox="allow-scripts">
            
        </iframe>
    </body>
    </html>


    [HttpGet]
    public IActionResult Html()
    {
        var storedHtml = "<div id='myInnerDiv'></div>";
        var storedJsScript = "<script>$(function(){$('#myInnerDiv').html('foo bar');})</script>";
        var jq = "<script src='/lib/jquery/dist/jquery.min.js'></script>";

        var content = jq+ storedHtml + storedJsScript;

        return Content(content, "text/html");
    }

问题
1> 主页有一个使用jQuery的JS脚本。所以我必须在主页的标题中包含 jQuery。存储的脚本也使用 jQuery。但是,由于存储的脚本在 iframe 内执行,因此它不能从主页使用 jQuery。所以在 Html() 方法中,我再次将 jQuery 包含在存储的 HTML 中。这里还有其他解决方案而不是下载 jQuery 两次吗?

2> 在 iframe 内部运行的脚本是否可以访问 iframe 外部的其他 DOM 元素,如本例中的

myOuterDiv
(我不希望存储的脚本访问其他元素所以只是确认)

html asp.net asp.net-core iframe xss
© www.soinside.com 2019 - 2024. All rights reserved.