Go to file
Michael Zhang 5a9b140ec8
Merge pull request #1 from elliott-beach/patch-open2
block doubly-opening open
2017-12-02 14:41:17 -06:00
add-on block doubly-opening open 2017-12-02 13:27:18 -06:00
sources block window.open 2017-12-02 12:19:50 -06:00
test Add ability to add domains to an "allow all" list from the browser action, issue #6 2017-11-12 20:23:02 -06:00
.eslintignore whole lot of clean up to get things valid for mozilla's source hosting requirements 2017-11-11 14:08:32 -05:00
.eslintrc.json Add ability to add domains to an "allow all" list from the browser action, issue #6 2017-11-12 20:23:02 -06:00
.gitignore whole lot of clean up to get things valid for mozilla's source hosting requirements 2017-11-11 14:08:32 -05:00
LICENSE.txt add that text 2017-10-14 14:28:23 -05:00
README.md Updated readme to include build instructions README.md 2017-11-11 09:06:37 -05:00
gulpfile.js further improvements to gulp file, to work out of the box 2017-11-11 14:21:55 -05:00
package-lock.json version bump: 0.9.12 2017-11-13 10:20:59 -06:00
package.json version bump: 0.9.12 2017-11-13 10:20:59 -06:00
test.config.example.js code cleanup, better eslint rules and related test configuration 2017-10-23 03:29:59 -05:00

README.md

Web API Manager

Running the Extension

Download built versions of the extension from each browsers' extension stores:

By default, this extension does not make any changes. No aspects of the Web API are affected until you start creating custom rule sets, or modifying what Web API standards sites have access to by default. You can start creating these rules through the site's configuration pane.

You can find some suggested page configurations in the Wiki.

Overview

This extension allows users to selectively allow different hosts on the web to have access to different types of browser functionality. Doing so allows security and privacy sensitive web users to limit the attack surface presented to websites, and to limit websites to the functionality they actually need to carry out user-serving purposes.

Background

Web browsers gain staggering numbers of new features, without their users knowing what new functionality is being pushed into their trusted base. While some of this functionality is broadly useful for things commonly thought of as "web" related, a large amount of it is useful in only rare situations, if ever. Examples of this rarely-needed functionality includes the low level audio synthesis capabilities of the Web Audio API, the low level graphics capabilities of WebGL, or the light sensing capabilities of the Ambient Light Sensor API. Such complex-but-rarely-used functionality has been often used in attacks on the security and privacy of the web.

Other functionality is frequently used by web sites, but for non-user-serving purposes, like fingerprinting anonymous users and tracking them across websites. Examples of such functionality includes parts of the SVG API, parts of the the Canvas Element's functionality, and the Beacon standard, among many others.

This extension helps users stay private and secure online by limiting websites to only the functionality they need, and prevent them from accessing rarely needed and/or privacy violating functionality.

Functionality

The extension currently includes the following functionality:

  • Creation of domain-specific functionality rules, based on host-matching regular expressions.
  • Blocking of functionality across all domains, with a fallback, "default" blocking rule.
  • A novel method of blocking functionality, designed to minimize the effect of removing functionality on existing code that expects that functionality to be in place.
  • A categorization of approximately 1,400 JavaScript methods into 74 different Web API standards (and, where appropriate, sub-standards).
  • User feedback to alert users how many hosts are executing script every time they visit a site, to ease the creating of new rules.

The following functionality is not currently implemented, but is being considered for future inclusion:

  • The ability to subscribe to blocking rule sets created by trusted third parties, similar to the EasyList / AdBlockPlus model of rule subscriptions.
  • Blocking property accesses on non-global structures through an additional level of interposition on runtime created objects.
  • Adding new Web API standards into the code base.
  • Extend blocking to properties and events (currently only functions and methods are interposed on).

Contributing

Pull requests and contributions of all kinds are greatly appreciated. One thing that would be extremely helpful is help compiling information about new browser standards, such as WebVR and Web Speech API that are not currently part of the extension. If you are interested in building new standard spec files, such as the ~74 that already exist, that would be a terrific, low technical difficulty, high impact improvement.

If thats of interest, please feel free to email (psnyde2@uic.edu) or open an issue for the standard that you're interested in.

Building

You can build the extension with the following steps:

npm install
npm run bundle

# You'll then have a zip'ed up version of the extension at `dist/webapi_manager.zip`

Testing and Development

There is a Mocha and Selenium based test suite in place now. To run it you'll need to provide the test suite with some social networking credentials (to make check for previous regressions related to cookies and logging into sites).

To run the tests, give the following a try:

# install the development libraries
npm install

# copy the skelleton config file to where the test scripts expect it to be.
cp test.config.example.js test.config.js

# edit the new test config file to add github and google account credentials
vim test.config.js

# Run the test suite
npm test

# Or, if you want to watch the tests run...
npm run test:watch

Background

This extension is based on research conducted at the BITSLab at the University of Illinois at Chicago. Further information on the measurements and techniques used in this extension can be found in the following papers.