Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  test_referrer.js   Sprache: JAVA

 
"use strict";

const ReferrerInfo = Components.Constructor(
  "@mozilla.org/referrer-info;1",
  "nsIReferrerInfo",
  "init"
);

function getTestReferrer(server_uri, referer_uri, isPrivate = false) {
  var uri = NetUtil.newURI(server_uri);
  let referrer = NetUtil.newURI(referer_uri);
  let principal = Services.scriptSecurityManager.createContentPrincipal(
    referrer,
    { privateBrowsingId: isPrivate ? 1 : 0 }
  );
  var chan = NetUtil.newChannel({
    uri,
    loadingPrincipal: principal,
    contentPolicyType: Ci.nsIContentPolicy.TYPE_OTHER,
    securityFlags: Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
  });

  chan.QueryInterface(Ci.nsIHttpChannel);
  chan.referrerInfo = new ReferrerInfo(
    Ci.nsIReferrerInfo.EMPTY,
    true,
    referrer
  );
  var header = null;
  try {
    header = chan.getRequestHeader("Referer");
  } catch (NS_ERROR_NOT_AVAILABLE) {}
  return header;
}

function run_test() {
  var prefs = Services.prefs;

  var server_uri = "http://bar.examplesite.com/path2";
  var server_uri_2 = "http://bar.example.com/anotherpath";
  var referer_uri = "http://foo.example.com/path";
  var referer_uri_2 = "http://bar.examplesite.com/path3?q=blah";
  var referer_uri_2_anchor = "http://bar.examplesite.com/path3?q=blah#anchor";
  var referer_uri_idn = "http://sub1.\xe4lt.example/path";

  // for https tests
  var server_uri_https = "https://bar.example.com/anotherpath";
  var referer_uri_https = "https://bar.example.com/path3?q=blah";
  var referer_uri_2_https = "https://bar.examplesite.com/path3?q=blah";

  // tests for sendRefererHeader
  prefs.setIntPref("network.http.sendRefererHeader", 0);
  Assert.equal(null, getTestReferrer(server_uri, referer_uri));
  prefs.setIntPref("network.http.sendRefererHeader", 2);
  Assert.equal(
    getTestReferrer(server_uri, referer_uri),
    "http://foo.example.com/"
  );

  // test that https ref is not sent to http
  Assert.equal(null, getTestReferrer(server_uri_2, referer_uri_https));

  // tests for referer.defaultPolicy
  prefs.setIntPref("network.http.referer.defaultPolicy", 0);
  Assert.equal(null, getTestReferrer(server_uri, referer_uri));
  prefs.setIntPref("network.http.referer.defaultPolicy", 1);
  Assert.equal(null, getTestReferrer(server_uri, referer_uri));
  Assert.equal(getTestReferrer(server_uri, referer_uri_2), referer_uri_2);
  prefs.setIntPref("network.http.referer.defaultPolicy", 2);
  Assert.equal(null, getTestReferrer(server_uri, referer_uri_https));
  Assert.equal(
    getTestReferrer(server_uri_https, referer_uri_https),
    referer_uri_https
  );
  Assert.equal(
    getTestReferrer(server_uri_https, referer_uri_2_https),
    "https://bar.examplesite.com/"
  );
  Assert.equal(getTestReferrer(server_uri, referer_uri_2), referer_uri_2);
  Assert.equal(
    getTestReferrer(server_uri, referer_uri),
    "http://foo.example.com/"
  );
  prefs.setIntPref("network.http.referer.defaultPolicy", 3);
  Assert.equal(getTestReferrer(server_uri, referer_uri), referer_uri);
  Assert.equal(null, getTestReferrer(server_uri_2, referer_uri_https));

  // tests for referer.defaultPolicy.pbmode
  prefs.setIntPref("network.http.referer.defaultPolicy.pbmode", 0);
  Assert.equal(null, getTestReferrer(server_uri, referer_uri, true));
  prefs.setIntPref("network.http.referer.defaultPolicy.pbmode", 1);
  Assert.equal(null, getTestReferrer(server_uri, referer_uri, true));
  Assert.equal(getTestReferrer(server_uri, referer_uri_2, true), referer_uri_2);
  prefs.setIntPref("network.http.referer.defaultPolicy.pbmode", 2);
  Assert.equal(null, getTestReferrer(server_uri, referer_uri_https, true));
  Assert.equal(
    getTestReferrer(server_uri_https, referer_uri_https, true),
    referer_uri_https
  );
  Assert.equal(
    getTestReferrer(server_uri_https, referer_uri_2_https, true),
    "https://bar.examplesite.com/"
  );
  Assert.equal(getTestReferrer(server_uri, referer_uri_2, true), referer_uri_2);
  Assert.equal(
    getTestReferrer(server_uri, referer_uri, true),
    "http://foo.example.com/"
  );
  prefs.setIntPref("network.http.referer.defaultPolicy.pbmode", 3);
  Assert.equal(getTestReferrer(server_uri, referer_uri, true), referer_uri);
  Assert.equal(null, getTestReferrer(server_uri_2, referer_uri_https, true));

  // tests for referer.spoofSource
  prefs.setBoolPref("network.http.referer.spoofSource"true);
  Assert.equal(getTestReferrer(server_uri, referer_uri), server_uri);
  prefs.setBoolPref("network.http.referer.spoofSource"false);
  Assert.equal(getTestReferrer(server_uri, referer_uri), referer_uri);

  // tests for referer.XOriginPolicy
  prefs.setIntPref("network.http.referer.XOriginPolicy", 2);
  Assert.equal(null, getTestReferrer(server_uri_2, referer_uri));
  Assert.equal(getTestReferrer(server_uri, referer_uri_2), referer_uri_2);
  prefs.setIntPref("network.http.referer.XOriginPolicy", 1);
  Assert.equal(getTestReferrer(server_uri_2, referer_uri), referer_uri);
  Assert.equal(null, getTestReferrer(server_uri, referer_uri));
  // https test
  Assert.equal(
    getTestReferrer(server_uri_https, referer_uri_https),
    referer_uri_https
  );
  prefs.setIntPref("network.http.referer.XOriginPolicy", 0);
  Assert.equal(getTestReferrer(server_uri, referer_uri), referer_uri);

  // tests for referer.trimmingPolicy
  prefs.setIntPref("network.http.referer.trimmingPolicy", 1);
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_2),
    "http://bar.examplesite.com/path3"
  );
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_idn),
    "http://sub1.xn--lt-uia.example/path"
  );
  prefs.setIntPref("network.http.referer.trimmingPolicy", 2);
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_2),
    "http://bar.examplesite.com/"
  );
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_idn),
    "http://sub1.xn--lt-uia.example/"
  );
  // https test
  Assert.equal(
    getTestReferrer(server_uri_https, referer_uri_https),
    "https://bar.example.com/"
  );
  prefs.setIntPref("network.http.referer.trimmingPolicy", 0);
  // test that anchor is lopped off in ordinary case
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_2_anchor),
    referer_uri_2
  );

  // tests for referer.XOriginTrimmingPolicy
  prefs.setIntPref("network.http.referer.XOriginTrimmingPolicy", 1);
  Assert.equal(
    getTestReferrer(server_uri, referer_uri),
    "http://foo.example.com/path"
  );
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_idn),
    "http://sub1.xn--lt-uia.example/path"
  );
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_2),
    "http://bar.examplesite.com/path3?q=blah"
  );
  prefs.setIntPref("network.http.referer.trimmingPolicy", 1);
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_2),
    "http://bar.examplesite.com/path3"
  );
  prefs.setIntPref("network.http.referer.XOriginTrimmingPolicy", 2);
  Assert.equal(
    getTestReferrer(server_uri, referer_uri),
    "http://foo.example.com/"
  );
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_idn),
    "http://sub1.xn--lt-uia.example/"
  );
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_2),
    "http://bar.examplesite.com/path3"
  );
  prefs.setIntPref("network.http.referer.trimmingPolicy", 0);
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_2),
    "http://bar.examplesite.com/path3?q=blah"
  );
  // https tests
  Assert.equal(
    getTestReferrer(server_uri_https, referer_uri_https),
    "https://bar.example.com/path3?q=blah"
  );
  Assert.equal(
    getTestReferrer(server_uri_https, referer_uri_2_https),
    "https://bar.examplesite.com/"
  );
  prefs.setIntPref("network.http.referer.XOriginTrimmingPolicy", 0);
  // test that anchor is lopped off in ordinary case
  Assert.equal(
    getTestReferrer(server_uri, referer_uri_2_anchor),
    referer_uri_2
  );

  // test referrer length limitation
  // referer_uri's length is 27 and origin's length is 23
  prefs.setIntPref("network.http.referer.referrerLengthLimit", 27);
  Assert.equal(getTestReferrer(server_uri, referer_uri), referer_uri);
  prefs.setIntPref("network.http.referer.referrerLengthLimit", 26);
  Assert.equal(
    getTestReferrer(server_uri, referer_uri),
    "http://foo.example.com/"
  );
  prefs.setIntPref("network.http.referer.referrerLengthLimit", 22);
  Assert.equal(getTestReferrer(server_uri, referer_uri), null);
  prefs.setIntPref("network.http.referer.referrerLengthLimit", 0);
  Assert.equal(getTestReferrer(server_uri, referer_uri), referer_uri);
  prefs.setIntPref("network.http.referer.referrerLengthLimit", 4096);
  Assert.equal(getTestReferrer(server_uri, referer_uri), referer_uri);

  // combination test: send spoofed path-only when hosts match
  var combo_referer_uri = "http://blah.foo.com/path?q=hot";
  var dest_uri = "http://blah.foo.com:9999/spoofedpath?q=bad";
  prefs.setIntPref("network.http.referer.trimmingPolicy", 1);
  prefs.setBoolPref("network.http.referer.spoofSource"true);
  prefs.setIntPref("network.http.referer.XOriginPolicy", 2);
  Assert.equal(
    getTestReferrer(dest_uri, combo_referer_uri),
    "http://blah.foo.com:9999/spoofedpath"
  );
  Assert.equal(
    null,
    getTestReferrer(dest_uri, "http://gah.foo.com/anotherpath")
  );
}

Messung V0.5
C=96 H=100 G=97

¤ Dauer der Verarbeitung: 0.19 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge