0

Add-on SDK を使用して Firefox アドオンを作成しています。リモート URL からデータを取得し、現在の html に挿入したいと考えています。現在、Firefox アドオン SDK のリクエスト モジュールを使用してデータをフェッチすることはできますが、現在のページにデータを挿入することはできません。

例:ウェブサイト「abc.com」から応答を取得しています。応答を取得した後、現在のページに応答を追加します

// main.js

var widgets = require("sdk/widget");
var tabs = require("sdk/tabs");
var Request = require("sdk/request").Request;

//create addon widget
var widget = widgets.Widget({
    id: "div-show",
    label: "Show divs",
    contentURL: "http://www.mozilla.org/favicon.ico",
    onClick: function() {
    //initializing request module to fetch content
    quijote.get();
    }
});

//fetch content of requested page
var quijote = Request({
    url: "http://localhost/abc/",
    overrideMimeType: "text/plain; charset=latin1",
    onComplete: function (response) {
        //check if content is fetched successfully 
        addContent(response);
    }
});

//try and modify current page
function addContent(response){
    //initialize page modification module
    var pageMod = require("sdk/page-mod");
    tabs.activeTab.attach({
       contentScript: 'document.body.innerHTML = ' + ' "<h1>'+response.text+'</h1>";'
    });
}

現在のページを拡張できる方法はありますか???

4

1 に答える 1

1

response.textたとえば、二重引用符が含まれている場合、コードはひどく失敗します。次に、コードは次のようになります(だと仮定します<a href="hello">world</a>):

document.body.innerHTML = "<h1><a href="hello">world</a></h1>";

これは明らかに無効なコードです。

あなたのコードは基本的にサニタイズされていないデータから動的スクリプトを構築しますが、これは悪い考えです (上記のエスケープの問題以外)

  1. そのコードが有効であり、
  2. それが成功した場合、ページはサニタイズされていないコードも実行する可能性があります。

これは、SQL インジェクション攻撃に相当する Web です....

まず、メッセージ( more )を使用して 1.) に取り組みましょう。

var worker = tabs.activeTab.attach({
   contentScript: 'self.port.on("setdom", function(data) { ' +
                    + 'document.body.innerHTML = data; /* still a security issue! */'
                    + '});'
});
worker.port.emit("setdom", response.text);

これにより、コンテンツ スクリプトが有効 (実行可能) であり、任意のコードが実行されないことが保証されます。

ただし、2.) はまだ問題です。DOM 構築と HTML 挿入を読んでください。

于 2013-09-25T08:45:13.067 に答える