areebmajeed / Man-in-the-Middle

Firefox Extension: Man in the Middle — Allow user to block or redirect requests, modify request headers and responses, inject JavaScript and CSS into pages.

Home Page:https://addons.mozilla.org/en-US/firefox/addon/man-in-the-middle/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Man in the Middle

Firefox Extension.


Allow user to block or redirect requests, modify headers and response body, inject JavaScript and CSS into pages.


Get Man in the Middle on Firefox Add-ons.
Get help writing rules.

Use cases:

  • Block or redirect websites and requests;
  • Add, modify or remove request headers;
  • Modify request responses;
  • Inject JavaScript into pages to make pages function as desired;
  • Inject CSS into pages to style pages as desired.

Screenshots

Block or redirect requests Use Blocking Rules to block or redirect requests.

Modify request and response headers Use Header Rules to modify request and response headers.

Use JavaScript to modify request headers Headers can be modified using JavaScript.

Use JavaScript to modify response body Use Response Rules to modify network responses.

Inject JavaScript and CSS into pages Use Content Scripts to inject JavaScript and CSS codes into pages.

Man in the Middle dark theme Content Scripts can even be injected to the extension's pages.

Rules

Select rule properties for more details.

Blocking Rules

Rules to block or redirect requests.

Header Rules

Rules to modify request and response headers.

Response Rules

Rules to modify network responses.

Content Scripts

Rules to inject JavaScript and CSS into pages.

Properties

URL filters

Filter request URLs or document URLs.

Method

Filters request methods.

Redirect URL

A URL to redirect requests to.

  • If not set, matched requests are blocked.
  • Parameters '$n' (1 <= <int>n <= 100), in a redirect URL are replaced with capture groups from RegExp pattern URL filter.
  • Examples:
    Force HTTPS for all network requests.
    URL filter:   /^http:(.*)/
    Redirect URL: https:$1
    
  • Rules: Blocking Rules.

Origin URL filters

Filter document URLs.

Text headers

To modify request or response headers.

  • Format: Plaintext or Restricted JavaScript.
  • Type Plaintext:
    Pairs of headers.
    • Separator: line break, i.e, '\n', '\r' or '\r\n'.
    • A Pair is of the format: name: value.
      • If name is empty, the header is omitted.
      • If value is empty, the header with the name name is removed if it exists, or the header is omitted.
      • If a header with the name name exists, the header is modified. If there're more than one existing, the first is modified.
      • If no header with the name name exists, a new header is added.
    • Examples:
      This overrides the default Accept header
      Accept: *
      
      This removes Referer header if it exists
      Referer:
      
      This adds new headers to the request
      Test-0: On
      Test-1: Off
      
  • Type Restricted JavaScript:
    Returns request or response headers.
    • The code must return an array of objects, each objects has two properties: 'name' and 'value'.
    • Depending on Header type, the code will be passed an argument requestHeaders or responseHeaders, which is the list of the existing headers.
    • Examples:
      // Header type: Request headers
      const acceptHeader = requestHeaders.find(({name}) => (
          name.toLowerCase() === 'accept'
      ));
      // Accept: *
      acceptHeader && acceptHeader.value = '*';
      return requestHeaders; 
      // Header type: Request headers
      const refererHeaderIndex = requestHeaders.findIndex(({name}) => (
          name.toLowerCase() === 'referer'
      ));
      // Remove Referer header
      if (refererHeaderIndex !== -1) {
          requestHeaders.splice(refererHeaderIndex, 1);
      }
      return requestHeaders;
      // Header type: Response headers
      responseHeaders.push({
          name: 'Set-Cookie',
          value: 'Firefox-Extension=Man in the Middle; HttpOnly',
      });
      return responseHeaders;
  • Rule: Header Rules.

Text type

'Plaintext' or'JavaScript'.

Header type

'Request headers' or 'Response headers'.

Text response

To modify network responses.

  • Format: Plaintext or Restricted JavaScript.
  • Type Plaintext:
    Any text as response body.
  • Type Restricted JavaScript:
    Returns response body.
    • The code must return a string which is the response body.
    • The code will be passed an argument responseBody, which is the response from the server.
    • Examples:
      // Site: http://internetbadguys.com/
      return `<!DOCTYPE html>
      <html>
      <head>
          <meta charset="utf-8">
      </head>
      <body>
      <h1>Bad guys are ${(
          responseBody.includes('phish.opendns.com/?url=') ? 'blocked' : 'coming'
      )}!</h1>
      </body>
      </html>`;
  • Rule: Response Rules.

Code

JavaScript or CSS code to be injected.

Script type

'JavaScript' or 'CSS'.

DOM event

A stage of the DOM loading on which the code is injected.

  • Can be one of the following values:
    • Loading;
    • Loaded;
    • Completed.
  • Rule: Content Scripts.

Formats

RegExp pattern

Begins with a slash '/' and ends with a slash '/'.

String filter

A string that is not a RegExp pattern.

Restricted JavaScript

A JavaScript function body that will be executed inside a sandbox.

  • The code may access only built-in objects and some APIs, which are:
    • Object, Array, String, RegExp, JSON, Map, Set, Promise, ...built-in objects;
    • isFinite, isNaN, parseInt, parseFloat;
    • encodeURI, encodeURIComponent, decodeURI, decodeURIComponent;
    • crypto, performance, atob, btoa, fetch and XMLHttpRequest.
  • The function is async, hence, await can be used to perform asynchronous tasks.
  • The code should always return a value.
  • Properties: Text headers and Text response.

Others

About

Firefox Extension: Man in the Middle — Allow user to block or redirect requests, modify request headers and responses, inject JavaScript and CSS into pages.

https://addons.mozilla.org/en-US/firefox/addon/man-in-the-middle/

License:Mozilla Public License 2.0


Languages

Language:JavaScript 87.9%Language:HTML 7.8%Language:CSS 4.3%