【问题标题】:HTML/Javascript app that runs on the filesystem, security issue在文件系统上运行的 HTML/Javascript 应用程序,安全问题
【发布时间】:2010-09-14 21:38:18
【问题描述】:

我正在组装一个小工具,一些业务人员可以在他们的本地文件系统上运行,因为我们不想为它设置主机。

基本上,它只是 HTML + Javascript(使用 jQuery)使用 REST 从第 3 方提取一些报告。

问题是,FF3和IE不允许ajax调用,我明白了:

Access to restricted URI denied" code: "1012

显然这是一个 XSS 问题...我该如何解决?返回的数据为 XML 格式。

我试图这样做:

$.get(productUrl, function (data){
    alert (data);
});

编辑:要明确...我没有为此设置内部主机(繁文缛节),由于正在检索数据,我们不能在外部托管它。

编辑#2:小测试表明我可以使用 IFRAME 来发出请求。有谁知道使用隐藏的 IFRAME 是否有任何缺点?

【问题讨论】:

    标签: jquery ajax xss filesystems


    【解决方案1】:

    在类似的情况下,我的解决方案是使用 Web 标记,这是 IE 识别的特殊 HTML 注释。它将页面放置在不同的安全区域中。

    参考:MSDN

    【讨论】:

    • "..启用 Internet Explorer 以强制网页在保存页面的位置的安全区域中运行——只要该安全区域比本地计算机区域更严格”所以不那不是不行吗?
    • 好点。我对哪个区域或多或少“限制性”感到有些困惑,因为添加 MOTW 将允许您的代码运行,这不会减少限制吗?看你怎么看。
    • “更严格”意味着它不能从本地文件系统加载。
    【解决方案2】:

    如果您安装了 Python,则提供文件的网络服务器可以很简单

    python -c “import SimpleHTTPServer;SimpleHTTPServer.test()”
    

    编辑:原始发帖人不能使用这种方法,但总的来说,我认为这是为未来有此问题的用户解决此特定问题的方法。

    【讨论】:

    • 我们在工作站上没有服务器政策......这是为了保护用户免受他们自己的伤害。
    【解决方案3】:

    您是否控制提供数据的服务器?如果是这样,您可以设置回调。基本思想是您在脚本中有一个处理传入数据的函数(在您的情况下是一个 XML 字符串)。然后服务器使用您的回调函数的 JavaScript sn-p 响应请求,并将字符串作为参数。而不是使用 AJAX,而是向页面添加一个新的脚本标记。这是 JSONP 的基础。它看起来像这样。

    本地页面。

    <script>
        function callback(str) {
            alert(str);
        }
        function makeRequest(param) {
            var s = document.createElement('script');
            s.src = 'http://serveranywhere/script.bla?' + params;
            document.getElementsByTagName[0].appendChild(s);
        }
    </script>
    

    远程服务器返回

    callback('<xml><that><does><something></something></does></that></xml>');
    

    现在,当脚本添加到页面时,函数回调将根据您提供的字符串执行。 jQuery 调用在 $.ajax 调用中使用 JSONP 为您完成所有这些工作。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-28
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2014-01-14
      • 1970-01-01
      • 2011-08-06
      相关资源
      最近更新 更多