mozilla

Compare Revisions

Safely accessing content DOM from chrome

Change Revisions

Revision 98920:

Revision 98920 by Mgjbot on

Revision 98921:

Revision 98921 by Johnjbarton on

Title:
Safely accessing content DOM from chrome
Safely accessing content DOM from chrome
Slug:
Safely_accessing_content_DOM_from_chrome
Safely_accessing_content_DOM_from_chrome
Tags:
DOM, Extensions, Add-ons, Security, XPCNativeWrapper
DOM, Extensions, Add-ons, Security, XPCNativeWrapper
Content:

Revision 98920
Revision 98921
nn7    <p>
8      &nbsp;
9    </p>
n11      Applications and extensions that script DOM interfaces on un14      Applications and extensions that script DOM interfaces on u
>ntrusted (web page) content need to be careful that the informati>ntrusted (web page) content need to be careful that the informati
>on that they use is really coming from the DOM API and not from J>on that they use is really coming from the DOM API and not from J
>avaScript properties, getter functions, and setter functions defi>avaScript properties, getter functions, and setter functions defi
>ned by a malicious page. Firefox 1.0.3 and Mozilla 1.7.7 make it >ned by a malicious page.
>harder for web pages to trick XUL applications and extensions by  
>ensuring that when chrome JavaScript accesses a DOM property or m 
>ethod on an object, it will get the DOM property or method rather 
> than the Web page's override. <a href="en/Firefox_1.5">Firefox 1 
>.5</a> has a more general solution that's enabled by default; ext 
>ensions have to explicitly opt out to perform insecure DOM access 
>. 
15    </p>
16    <h3>
17      Firefox 2.0 and Newer
18    </h3>
19    <p>
20      Advances in Firefox technology allow safe control over web 
 >pages with some limitations. In the following "<strong><code>win<
 >/code></strong>" refers to a web page DOM&nbsp;window object in a
 >n extension function, but the rules apply to any property deeper 
 >in the DOM.
21    </p>
22    <ul>
23      <li>Read access: access to&nbsp; <strong><code>win</code></
 >strong> objects is safe. calling <code><strong>win</strong></code
 >> functions is prevented.
24      </li>
25      <li>Write access: you can set properties on <strong><code>w
 >in</code></strong>, but the wrappers will prevent these changes f
 >rom being seen in the page (silent failure).&nbsp;
26      </li>
27      <li>
28        <code><strong>win.wrappedJSObject</strong></code>:&nbsp; 
 >You can delete properties and add properties that are strings and
 > numbers by using <strong><code>win.wrappedJSObject</code></stron
 >g>. <strong>Do not</strong> add objects created in your extension
 >: this is <a class="internal" href="/%20https://bugzilla.mozilla.
 >org/show_bug.cgi?id=464527%20" title=" https://bugzilla.mozilla.o
 >rg/show bug.cgi?id=464527 "><strong>currently unsafe</strong></a>
 >. This includes adding function objects.&nbsp; For this reason, s
 >trictly limit the scope of operations on <code><strong>wrappedJSO
 >bject</strong></code>, so you don't pass it in to a method an lat
 >er operation on it unsafely.
29      </li>
30    </ul>
31    <h3>
32      Old Versions of Firefox
33    </h3>
34    <p>
35      Firefox 1.0.3 and Mozilla 1.7.7 make it harder for web page
 >s to trick XUL applications and extensions by ensuring that when 
 >chrome JavaScript accesses a DOM property or method on an object,
 > it will get the DOM property or method rather than the Web page'
 >s override. <a href="/en/Firefox_1.5_for_developers" title="en/Fi
 >refox_1.5_for_developers">Firefox 1.5</a> has a more general solu
 >tion that's enabled by default; extensions have to explicitly opt
 > out to perform insecure DOM access.
n14      There are only two "correct" ways for chrome code to accessn38      There are only two "correct" ways for chrome code to access
> the content's DOM: direct access, and explicit use of <a href="#> the content's DOM: direct access, and explicit use of <a href="#
>About_XPCNativeWrapper">XPCNativeWrapper</a>. In particular, the >About_XPCNativeWrapper">XPCNativeWrapper</a>. In particular, the 
>commonly used <code>__proto__</code> trick is not secure in any v>formerly commonly used <code>__proto__</code> trick is not secure
>ersion (see "Examples of what NOT to do" below).> in any version (see "Examples of what NOT to do" below).
nn46          <th>
47            &nbsp;
22          <th></th>48          </th>
n78      In Firefox 1.5, direct access is always secure unless your n104      In Firefox 1.5, direct access is always secure unless your 
>extension uses the <code>xpcnativewrappers=no</code> flag in <a h>extension uses the <code>xpcnativewrappers=no</code> flag in <a h
>ref="en/Chrome_Registration">its manifest</a>. If that flag is no>ref="/en/Chrome_Registration" title="en/Chrome_Registration">its 
>t set, then use of <a href="#About_XPCNativeWrapper">XPCNativeWra>manifest</a>. If that flag is not set, then use of <a href="#Abou
>pper</a> is implicit.>t_XPCNativeWrapper">XPCNativeWrapper</a> is implicit.
n102      <code><a href="en/XPCNativeWrapper">XPCNativeWrapper</a></cn128      <code><a href="/en/XPCNativeWrapper" title="en/XPCNativeWra
>ode> is a way to wrap up an object so that it's safe to access fr>pper">XPCNativeWrapper</a></code> is a way to wrap up an object s
>om privileged code.>o that it's safe to access from privileged code.
n105      There are two ways to use <code>XPCNativeWrapper</code>. Thn131      There are two ways to use <code>XPCNativeWrapper</code>. Th
>e old way is to use it explicitly. The new way, xpcnativewrappers>e old way is to use it explicitly. The new way, xpcnativewrappers
>=yes, is available starting with <a href="en/Firefox_1.5">Firefox>=yes, is available starting with <a href="/en/Firefox_1.5_for_dev
> 1.5</a> and its Deer Park alpha and beta pre-releases.>elopers" title="en/Firefox_1.5_for_developers">Firefox 1.5</a> an
 >d its Deer Park alpha and beta pre-releases.
n144      <br>n170      &nbsp;
tt172    <p>
146    <div class="noinclude"></div>{{ languages( { "fr": "fr/Acc\u0173      {{ languages( { "fr": "fr/Acc\u00e8s_s\u00e9curis\u00e9_au_
>0e8s_s\u00e9curis\u00e9_au_contenu_DOM_depuis_le_chrome", "ja": ">contenu_DOM_depuis_le_chrome", "ja": "ja/Safely_accessing_content
>ja/Safely_accessing_content_DOM_from_chrome", "pl": "pl/Bezpieczn>_DOM_from_chrome", "pl": "pl/Bezpieczny_dost\u0119p_do_sk\u0142ad
>y_dost\u0119p_do_sk\u0142adnik\u00f3w_DOM_z_poziomu_chrome" } ) }>nik\u00f3w_DOM_z_poziomu_chrome" } ) }}
>} 
174    </p>

Back to History