Hatena::Groupmoz-addon

Ci.nsIZIGOROu

2008-08-11

nsIScriptSecurityManager のメモ

| 15:59 |  nsIScriptSecurityManager のメモ - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  nsIScriptSecurityManager のメモ - Ci.nsIZIGOROu

危険な URL を判別する為の XPCOM が存在すると言うのを先ほど知ったのでメモ。

使い方

nsIScriptSecurityManager のメソッド ( noscript 以外 )
  • void checkLoadURI ( nsIURI from , nsIURI uri , PRUint32 flags )
  • void checkLoadURIStr ( AUTF8String from , AUTF8String uri , PRUint32 flags )

ここらへんは from から読み出す前提で、uri はどうよってのを確認するメソッドのようだ。flags の部分は nsIScriptSecurityManager の定数。

  • void checkLoadURIStrWithPrincipal ( nsIPrincipal principal , AUTF8String uri , PRUint32 flags )
  • void checkLoadURIWithPrincipal ( nsIPrincipal principal , nsIURI uri , PRUint32 flags )

from の代わりに nsIPrincipal が使えるようになる。Firefox 3 からだと document.nodePrincipal を用いて、任意のページの制限が取れるっぽぃ。

  • void checkSameOriginPrincipal ( nsIPrincipal sourcePrincipal , nsIPrincipal targetPrincipal )
  • void checkSameOriginURI ( nsIURI sourceURI , nsIURI targetURI , PRBool reportError )

XHR 系か?same origin policy に反してるかどうかをチェックするんだろう、きっと。

  • void disableCapability ( char* capability )
  • void enableCapability ( char* capability )

分からない。あとで。

  • nsIPrincipal getChannelPrincipal ( nsIChannel channel )
  • nsIPrincipal getCodebasePrincipal ( nsIURI URI )
  • PRBool isCapabilityEnabled ( char* capability )
  • PRBool isSystemPrincipal ( nsIPrincipal principal )
  • void revertCapability ( char* capability )
  • void setCanEnableCapability ( AUTF8String certificateFingerprint , char* capability , PRInt16 canEnable )

><

使われ方

http://mxr.mozilla.org/firefox/source/toolkit/content/contentAreaUtils.js#56 とか見るといいです。

function urlSecurityCheck(aURL, aPrincipal, aFlags)
{
  const nsIScriptSecurityManager =
    Components.interfaces.nsIScriptSecurityManager;
  var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
                         .getService(nsIScriptSecurityManager);
  if (aFlags === undefined)
    aFlags = nsIScriptSecurityManager.STANDARD;

  try {
    if (aURL instanceof Components.interfaces.nsIURI)
      secMan.checkLoadURIWithPrincipal(aPrincipal, aURL, aFlags);
    else
      secMan.checkLoadURIStrWithPrincipal(aPrincipal, aURL, aFlags);
  } catch (e) {
    // XXXmano: dump the principal url here too
    throw "Load of " + aURL + " denied.";
  }
}

関連リンク

JaylynnJaylynn2011/12/30 15:44You've got to be kdiding me-it's so transparently clear now!

cihkqonnncihkqonnn2011/12/31 17:09QECXVo <a href="http://eyjqeqncluyu.com/">eyjqeqncluyu</a>

twgxckytwgxcky2011/12/31 22:47Nd72Oe , [url=http://pqvzzcatthaj.com/]pqvzzcatthaj[/url], [link=http://ymbrvznkcolt.com/]ymbrvznkcolt[/link], http://hfquuyoupfdu.com/

utczioutczio2012/01/01 22:33I53GJv <a href="http://gpmloblunvmv.com/">gpmloblunvmv</a>

ivsuvegsivsuvegs2012/01/02 03:26mE8149 , [url=http://zopvzvpgbsrz.com/]zopvzvpgbsrz[/url], [link=http://dmdirlxxmhtw.com/]dmdirlxxmhtw[/link], http://dabigaimaqjd.com/

2008-03-19

mozJSSubScriptLoaderで読み込めるJSファイルはchromeだけになる

| 11:41 |  mozJSSubScriptLoaderで読み込めるJSファイルはchromeだけになる - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  mozJSSubScriptLoaderで読み込めるJSファイルはchromeだけになる - Ci.nsIZIGOROu

XUL Explorerなどで有名なMark Finkleさんのブログより

The mozIJSSubScriptLoader interface can be used from JS to load and run JavaScript code from the given URL at run-time. Previously, the URL could be chrome:, file:, data: or resource:, but due to a security fix, the URL is now limited to chrome: only. Extension Developers - Breaking News, Part 2

つまるところ以前はfile, resource, dataなどなど色々なURIからいけましたが、これからはchromeからじゃないと読めないぜって事ですね。

まぁ原文のまんまだけど、

  • mozJSSubScriptLoader使うならばchromeにする
  • Components.utils.import使うならばresourceにする

のいずれかにすると。

mozJSSubScriptLoader使ってる人は自分のコードをチェックしる。

ちなむとMozLabで提供してるMozReplももろにmozJSSubScriptLoader使ってる部分があって、その辺りどう対応していくのかも見頃ですね。

追記

そうかuserChromeなんかも被害あるのかー。

追記2

mal_blue@tumblrによればchrome, file, resourceはOKでdataがダメに変更となったみたい。

関連リンク