Repository files navigation

Build Status

image

PerimeterX Python Middleware

Latest stable version: v2.3.2 Table of Contents


Installation

PerimeterX Python middleware is installed via PIP: $ pip install perimeterx-python-wsgi

Upgrading

Contact [PerimeterX Support](mailto: support@perimeterx.com) for details.

Required Configurations

To use PerimeterX middleware on a specific route follow this example:

fromperimeterx.middlewareimportPerimeterXpx_config= {
'app_id': 'APP_ID',
'cookie_key': 'COOKIE_KEY',
'auth_token': 'AUTH_TOKEN',
}
application=get_wsgi_application()
application=PerimeterX(application, px_config)
  • The PerimeterX Application ID / AppId and PerimeterX Token / Auth Token can be found in the Portal, in Applications.
  • PerimeterX Risk Cookie / Cookie Key can be found in the portal, in Policies. The Policy from where the Risk Cookie / Cookie Key is taken must correspond with the Application from where the Application ID / AppId and PerimeterX Token / Auth Token. For details on how to create a custom Captcha page, refer to the documentation

Optional Configuration

In addition to the basic installation configuration above, the following configurations options are available:

Module Enabled

A boolean flag to enable/disable the PerimeterX Enforcer. Default: true

config= {
...
module_enabled: False
...
}

Module Mode

Sets the working mode of the Enforcer. Possible values:

  • active_blocking - Blocking Mode
  • monitor - Monitoring Mode Default:monitor - Monitor Mode
config= {
...
module_mode: 'active_blocking'
...
}

Blocking Score

Sets the minimum blocking score of a request. Possible values:

  • Any integer between 0 and 100. Default: 100
config= {
...
blocking_score: 100
...
}

Send Page Activities

Enable/disable sending activities and metrics to PerimeterX with each request.
Enabling this feature allows data to populate the PerimeterX Portal with valuable information, such as the number of requests blocked and additional API usage statistics. Default: true

config= {
...
send_page_activities: True
...
}

Debug Mode

Enable/disable the debug log messages. Default: False

config= {
...
debug_mode: True
...
}

Sensitive Routes

An array of route prefixes that trigger a server call to PerimeterX servers every time the page is viewed, regardless of viewing history. Default: Empty

config= {
...
sensitive_routes: ['/login', '/user/checkout']
...
}

Whitelist Routes

An array of route prefixes which will bypass enforcement (will never get scored). Default: Empty

config= {
...
whitelist_routes: ['/about-us', '/careers']
...
}

Sensitive Headers

An array of headers that are not sent to PerimeterX servers on API calls. Default: ['cookie', 'cookies']

config= {
...
sensitive_headers: ['cookie', 'cookies', 'x-sensitive-header']
...
}

IP Headers

An array of trusted headers that specify an IP to be extracted. Default: Empty

config= {
...
ip_headers: ['x-user-real-ip']
...
}

First-Party Enabled

Enable/disable First-Party mode. Default: True

config= {
...
first_party_enabled: False
...
}

Custom Request Handler

A Python function that adds a custom response handler to the request.
You must declare the function before using it in the config.
The Custom Request Handler is triggered after PerimeterX's verification. The custom function should handle the response (most likely it will create a new response) Default: Empty

config= {
...
custom_request_handler: custom_request_handler_function,
...
}

Additional Activity Handler

A Python function that allows interaction with the request data collected by PerimeterX before the data is returned to the PerimeterX servers. Does not alter the response. Default: Empty

config= {
...
additional_activity_handler: additional_activity_handler_function,
...
}

PerimeterX Data Enrichment

This is a cookie we make available for our costumers, that can provide extra data about the request

context.pxdecontext.pxde_verified

Px Disable Request

This is a property that allows the developer to disable the module for a single request. Its value should be True for disabling, and False for enabling

...
environ['px_disable_request'] =False#The request shall be passed to the enforcer.orenviron['px_disable_request'] =True#The enforcer shall be disabled for that request.

About

PerimeterX WSGI Middleware

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Build Status

image

PerimeterX Python Middleware

Latest stable version: v2.3.2 Table of Contents


Installation

PerimeterX Python middleware is installed via PIP: $ pip install perimeterx-python-wsgi

Upgrading

Contact [PerimeterX Support](mailto: support@perimeterx.com) for details.

Required Configurations

To use PerimeterX middleware on a specific route follow this example:

fromperimeterx.middlewareimportPerimeterXpx_config= {
'app_id': 'APP_ID',
'cookie_key': 'COOKIE_KEY',
'auth_token': 'AUTH_TOKEN',
}
application=get_wsgi_application()
application=PerimeterX(application, px_config)
  • The PerimeterX Application ID / AppId and PerimeterX Token / Auth Token can be found in the Portal, in Applications.
  • PerimeterX Risk Cookie / Cookie Key can be found in the portal, in Policies. The Policy from where the Risk Cookie / Cookie Key is taken must correspond with the Application from where the Application ID / AppId and PerimeterX Token / Auth Token. For details on how to create a custom Captcha page, refer to the documentation

Optional Configuration

In addition to the basic installation configuration above, the following configurations options are available:

Module Enabled

A boolean flag to enable/disable the PerimeterX Enforcer. Default: true

config= {
...
module_enabled: False
...
}

Module Mode

Sets the working mode of the Enforcer. Possible values:

  • active_blocking - Blocking Mode
  • monitor - Monitoring Mode Default:monitor - Monitor Mode
config= {
...
module_mode: 'active_blocking'
...
}

Blocking Score

Sets the minimum blocking score of a request. Possible values:

  • Any integer between 0 and 100. Default: 100
config= {
...
blocking_score: 100
...
}

Send Page Activities

Enable/disable sending activities and metrics to PerimeterX with each request.
Enabling this feature allows data to populate the PerimeterX Portal with valuable information, such as the number of requests blocked and additional API usage statistics. Default: true

config= {
...
send_page_activities: True
...
}

Debug Mode

Enable/disable the debug log messages. Default: False

config= {
...
debug_mode: True
...
}

Sensitive Routes

An array of route prefixes that trigger a server call to PerimeterX servers every time the page is viewed, regardless of viewing history. Default: Empty

config= {
...
sensitive_routes: ['/login', '/user/checkout']
...
}

Whitelist Routes

An array of route prefixes which will bypass enforcement (will never get scored). Default: Empty

config= {
...
whitelist_routes: ['/about-us', '/careers']
...
}

Sensitive Headers

An array of headers that are not sent to PerimeterX servers on API calls. Default: ['cookie', 'cookies']

config= {
...
sensitive_headers: ['cookie', 'cookies', 'x-sensitive-header']
...
}

IP Headers

An array of trusted headers that specify an IP to be extracted. Default: Empty

config= {
...
ip_headers: ['x-user-real-ip']
...
}

First-Party Enabled

Enable/disable First-Party mode. Default: True

config= {
...
first_party_enabled: False
...
}

Custom Request Handler

A Python function that adds a custom response handler to the request.
You must declare the function before using it in the config.
The Custom Request Handler is triggered after PerimeterX's verification. The custom function should handle the response (most likely it will create a new response) Default: Empty

config= {
...
custom_request_handler: custom_request_handler_function,
...
}

Additional Activity Handler

A Python function that allows interaction with the request data collected by PerimeterX before the data is returned to the PerimeterX servers. Does not alter the response. Default: Empty

config= {
...
additional_activity_handler: additional_activity_handler_function,
...
}

PerimeterX Data Enrichment

This is a cookie we make available for our costumers, that can provide extra data about the request

context.pxdecontext.pxde_verified

Px Disable Request

This is a property that allows the developer to disable the module for a single request. Its value should be True for disabling, and False for enabling

...
environ['px_disable_request'] =False#The request shall be passed to the enforcer.orenviron['px_disable_request'] =True#The enforcer shall be disabled for that request.

About

PerimeterX WSGI Middleware

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build Status

image

PerimeterX Python Middleware

Latest stable version: v2.3.2 Table of Contents


Installation

PerimeterX Python middleware is installed via PIP: $ pip install perimeterx-python-wsgi

Upgrading

Contact [PerimeterX Support](mailto: support@perimeterx.com) for details.

Required Configurations

To use PerimeterX middleware on a specific route follow this example:

fromperimeterx.middlewareimportPerimeterXpx_config= {
'app_id': 'APP_ID',
'cookie_key': 'COOKIE_KEY',
'auth_token': 'AUTH_TOKEN',
}
application=get_wsgi_application()
application=PerimeterX(application, px_config)
  • The PerimeterX Application ID / AppId and PerimeterX Token / Auth Token can be found in the Portal, in Applications.
  • PerimeterX Risk Cookie / Cookie Key can be found in the portal, in Policies. The Policy from where the Risk Cookie / Cookie Key is taken must correspond with the Application from where the Application ID / AppId and PerimeterX Token / Auth Token. For details on how to create a custom Captcha page, refer to the documentation

Optional Configuration

In addition to the basic installation configuration above, the following configurations options are available:

Module Enabled

A boolean flag to enable/disable the PerimeterX Enforcer. Default: true

config= {
...
module_enabled: False
...
}

Module Mode

Sets the working mode of the Enforcer. Possible values:

  • active_blocking - Blocking Mode
  • monitor - Monitoring Mode Default:monitor - Monitor Mode
config= {
...
module_mode: 'active_blocking'
...
}

Blocking Score

Sets the minimum blocking score of a request. Possible values:

  • Any integer between 0 and 100. Default: 100
config= {
...
blocking_score: 100
...
}

Send Page Activities

Enable/disable sending activities and metrics to PerimeterX with each request.
Enabling this feature allows data to populate the PerimeterX Portal with valuable information, such as the number of requests blocked and additional API usage statistics. Default: true

config= {
...
send_page_activities: True
...
}

Debug Mode

Enable/disable the debug log messages. Default: False

config= {
...
debug_mode: True
...
}

Sensitive Routes

An array of route prefixes that trigger a server call to PerimeterX servers every time the page is viewed, regardless of viewing history. Default: Empty

config= {
...
sensitive_routes: ['/login', '/user/checkout']
...
}

Whitelist Routes

An array of route prefixes which will bypass enforcement (will never get scored). Default: Empty

config= {
...
whitelist_routes: ['/about-us', '/careers']
...
}

Sensitive Headers

An array of headers that are not sent to PerimeterX servers on API calls. Default: ['cookie', 'cookies']

config= {
...
sensitive_headers: ['cookie', 'cookies', 'x-sensitive-header']
...
}

IP Headers

An array of trusted headers that specify an IP to be extracted. Default: Empty

config= {
...
ip_headers: ['x-user-real-ip']
...
}

First-Party Enabled

Enable/disable First-Party mode. Default: True

config= {
...
first_party_enabled: False
...
}

Custom Request Handler

A Python function that adds a custom response handler to the request.
You must declare the function before using it in the config.
The Custom Request Handler is triggered after PerimeterX's verification. The custom function should handle the response (most likely it will create a new response) Default: Empty

config= {
...
custom_request_handler: custom_request_handler_function,
...
}

Additional Activity Handler

A Python function that allows interaction with the request data collected by PerimeterX before the data is returned to the PerimeterX servers. Does not alter the response. Default: Empty

config= {
...
additional_activity_handler: additional_activity_handler_function,
...
}

PerimeterX Data Enrichment

This is a cookie we make available for our costumers, that can provide extra data about the request

context.pxdecontext.pxde_verified

Px Disable Request

This is a property that allows the developer to disable the module for a single request. Its value should be True for disabling, and False for enabling

...
environ['px_disable_request'] =False#The request shall be passed to the enforcer.orenviron['px_disable_request'] =True#The enforcer shall be disabled for that request.

About

PerimeterX WSGI Middleware

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build Status

image

PerimeterX Python Middleware

Latest stable version: v2.3.2 Table of Contents


Installation

PerimeterX Python middleware is installed via PIP: $ pip install perimeterx-python-wsgi

Upgrading

Contact [PerimeterX Support](mailto: support@perimeterx.com) for details.

Required Configurations

To use PerimeterX middleware on a specific route follow this example:

fromperimeterx.middlewareimportPerimeterXpx_config= {
'app_id': 'APP_ID',
'cookie_key': 'COOKIE_KEY',
'auth_token': 'AUTH_TOKEN',
}
application=get_wsgi_application()
application=PerimeterX(application, px_config)
  • The PerimeterX Application ID / AppId and PerimeterX Token / Auth Token can be found in the Portal, in Applications.
  • PerimeterX Risk Cookie / Cookie Key can be found in the portal, in Policies. The Policy from where the Risk Cookie / Cookie Key is taken must correspond with the Application from where the Application ID / AppId and PerimeterX Token / Auth Token. For details on how to create a custom Captcha page, refer to the documentation

Optional Configuration

In addition to the basic installation configuration above, the following configurations options are available:

Module Enabled

A boolean flag to enable/disable the PerimeterX Enforcer. Default: true

config= {
...
module_enabled: False
...
}

Module Mode

Sets the working mode of the Enforcer. Possible values:

  • active_blocking - Blocking Mode
  • monitor - Monitoring Mode Default:monitor - Monitor Mode
config= {
...
module_mode: 'active_blocking'
...
}

Blocking Score

Sets the minimum blocking score of a request. Possible values:

  • Any integer between 0 and 100. Default: 100
config= {
...
blocking_score: 100
...
}

Send Page Activities

Enable/disable sending activities and metrics to PerimeterX with each request.
Enabling this feature allows data to populate the PerimeterX Portal with valuable information, such as the number of requests blocked and additional API usage statistics. Default: true

config= {
...
send_page_activities: True
...
}

Debug Mode

Enable/disable the debug log messages. Default: False

config= {
...
debug_mode: True
...
}

Sensitive Routes

An array of route prefixes that trigger a server call to PerimeterX servers every time the page is viewed, regardless of viewing history. Default: Empty

config= {
...
sensitive_routes: ['/login', '/user/checkout']
...
}

Whitelist Routes

An array of route prefixes which will bypass enforcement (will never get scored). Default: Empty

config= {
...
whitelist_routes: ['/about-us', '/careers']
...
}

Sensitive Headers

An array of headers that are not sent to PerimeterX servers on API calls. Default: ['cookie', 'cookies']

config= {
...
sensitive_headers: ['cookie', 'cookies', 'x-sensitive-header']
...
}

IP Headers

An array of trusted headers that specify an IP to be extracted. Default: Empty

config= {
...
ip_headers: ['x-user-real-ip']
...
}

First-Party Enabled

Enable/disable First-Party mode. Default: True

config= {
...
first_party_enabled: False
...
}

Custom Request Handler

A Python function that adds a custom response handler to the request.
You must declare the function before using it in the config.
The Custom Request Handler is triggered after PerimeterX's verification. The custom function should handle the response (most likely it will create a new response) Default: Empty

config= {
...
custom_request_handler: custom_request_handler_function,
...
}

Additional Activity Handler

A Python function that allows interaction with the request data collected by PerimeterX before the data is returned to the PerimeterX servers. Does not alter the response. Default: Empty

config= {
...
additional_activity_handler: additional_activity_handler_function,
...
}

PerimeterX Data Enrichment

This is a cookie we make available for our costumers, that can provide extra data about the request

context.pxdecontext.pxde_verified

Px Disable Request

This is a property that allows the developer to disable the module for a single request. Its value should be True for disabling, and False for enabling

...
environ['px_disable_request'] =False#The request shall be passed to the enforcer.orenviron['px_disable_request'] =True#The enforcer shall be disabled for that request.

About

PerimeterX WSGI Middleware

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Build Status

image

PerimeterX Python Middleware

Latest stable version: v2.3.2 Table of Contents


Installation

PerimeterX Python middleware is installed via PIP: $ pip install perimeterx-python-wsgi

Upgrading

Contact [PerimeterX Support](mailto: support@perimeterx.com) for details.

Required Configurations

To use PerimeterX middleware on a specific route follow this example:

fromperimeterx.middlewareimportPerimeterXpx_config= {
'app_id': 'APP_ID',
'cookie_key': 'COOKIE_KEY',
'auth_token': 'AUTH_TOKEN',
}
application=get_wsgi_application()
application=PerimeterX(application, px_config)
  • The PerimeterX Application ID / AppId and PerimeterX Token / Auth Token can be found in the Portal, in Applications.
  • PerimeterX Risk Cookie / Cookie Key can be found in the portal, in Policies. The Policy from where the Risk Cookie / Cookie Key is taken must correspond with the Application from where the Application ID / AppId and PerimeterX Token / Auth Token. For details on how to create a custom Captcha page, refer to the documentation

Optional Configuration

In addition to the basic installation configuration above, the following configurations options are available:

Module Enabled

A boolean flag to enable/disable the PerimeterX Enforcer. Default: true

config= {
...
module_enabled: False
...
}

Module Mode

Sets the working mode of the Enforcer. Possible values:

  • active_blocking - Blocking Mode
  • monitor - Monitoring Mode Default:monitor - Monitor Mode
config= {
...
module_mode: 'active_blocking'
...
}

Blocking Score

Sets the minimum blocking score of a request. Possible values:

  • Any integer between 0 and 100. Default: 100
config= {
...
blocking_score: 100
...
}

Send Page Activities

Enable/disable sending activities and metrics to PerimeterX with each request.
Enabling this feature allows data to populate the PerimeterX Portal with valuable information, such as the number of requests blocked and additional API usage statistics. Default: true

config= {
...
send_page_activities: True
...
}

Debug Mode

Enable/disable the debug log messages. Default: False

config= {
...
debug_mode: True
...
}

Sensitive Routes

An array of route prefixes that trigger a server call to PerimeterX servers every time the page is viewed, regardless of viewing history. Default: Empty

config= {
...
sensitive_routes: ['/login', '/user/checkout']
...
}

Whitelist Routes

An array of route prefixes which will bypass enforcement (will never get scored). Default: Empty

config= {
...
whitelist_routes: ['/about-us', '/careers']
...
}

Sensitive Headers

An array of headers that are not sent to PerimeterX servers on API calls. Default: ['cookie', 'cookies']

config= {
...
sensitive_headers: ['cookie', 'cookies', 'x-sensitive-header']
...
}

IP Headers

An array of trusted headers that specify an IP to be extracted. Default: Empty

config= {
...
ip_headers: ['x-user-real-ip']
...
}

First-Party Enabled

Enable/disable First-Party mode. Default: True

config= {
...
first_party_enabled: False
...
}

Custom Request Handler

A Python function that adds a custom response handler to the request.
You must declare the function before using it in the config.
The Custom Request Handler is triggered after PerimeterX's verification. The custom function should handle the response (most likely it will create a new response) Default: Empty

config= {
...
custom_request_handler: custom_request_handler_function,
...
}

Additional Activity Handler

A Python function that allows interaction with the request data collected by PerimeterX before the data is returned to the PerimeterX servers. Does not alter the response. Default: Empty

config= {
...
additional_activity_handler: additional_activity_handler_function,
...
}

PerimeterX Data Enrichment

This is a cookie we make available for our costumers, that can provide extra data about the request

context.pxdecontext.pxde_verified

Px Disable Request

This is a property that allows the developer to disable the module for a single request. Its value should be True for disabling, and False for enabling

...
environ['px_disable_request'] =False#The request shall be passed to the enforcer.orenviron['px_disable_request'] =True#The enforcer shall be disabled for that request.

About

PerimeterX WSGI Middleware

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build Status

image

PerimeterX Python Middleware

Latest stable version: v2.3.2 Table of Contents


Installation

PerimeterX Python middleware is installed via PIP: $ pip install perimeterx-python-wsgi

Upgrading

Contact [PerimeterX Support](mailto: support@perimeterx.com) for details.

Required Configurations

To use PerimeterX middleware on a specific route follow this example:

fromperimeterx.middlewareimportPerimeterXpx_config= {
'app_id': 'APP_ID',
'cookie_key': 'COOKIE_KEY',
'auth_token': 'AUTH_TOKEN',
}
application=get_wsgi_application()
application=PerimeterX(application, px_config)
  • The PerimeterX Application ID / AppId and PerimeterX Token / Auth Token can be found in the Portal, in Applications.
  • PerimeterX Risk Cookie / Cookie Key can be found in the portal, in Policies. The Policy from where the Risk Cookie / Cookie Key is taken must correspond with the Application from where the Application ID / AppId and PerimeterX Token / Auth Token. For details on how to create a custom Captcha page, refer to the documentation

Optional Configuration

In addition to the basic installation configuration above, the following configurations options are available:

Module Enabled

A boolean flag to enable/disable the PerimeterX Enforcer. Default: true

config= {
...
module_enabled: False
...
}

Module Mode

Sets the working mode of the Enforcer. Possible values:

  • active_blocking - Blocking Mode
  • monitor - Monitoring Mode Default:monitor - Monitor Mode
config= {
...
module_mode: 'active_blocking'
...
}

Blocking Score

Sets the minimum blocking score of a request. Possible values:

  • Any integer between 0 and 100. Default: 100
config= {
...
blocking_score: 100
...
}

Send Page Activities

Enable/disable sending activities and metrics to PerimeterX with each request.
Enabling this feature allows data to populate the PerimeterX Portal with valuable information, such as the number of requests blocked and additional API usage statistics. Default: true

config= {
...
send_page_activities: True
...
}

Debug Mode

Enable/disable the debug log messages. Default: False

config= {
...
debug_mode: True
...
}

Sensitive Routes

An array of route prefixes that trigger a server call to PerimeterX servers every time the page is viewed, regardless of viewing history. Default: Empty

config= {
...
sensitive_routes: ['/login', '/user/checkout']
...
}

Whitelist Routes

An array of route prefixes which will bypass enforcement (will never get scored). Default: Empty

config= {
...
whitelist_routes: ['/about-us', '/careers']
...
}

Sensitive Headers

An array of headers that are not sent to PerimeterX servers on API calls. Default: ['cookie', 'cookies']

config= {
...
sensitive_headers: ['cookie', 'cookies', 'x-sensitive-header']
...
}

IP Headers

An array of trusted headers that specify an IP to be extracted. Default: Empty

config= {
...
ip_headers: ['x-user-real-ip']
...
}

First-Party Enabled

Enable/disable First-Party mode. Default: True

config= {
...
first_party_enabled: False
...
}

Custom Request Handler

A Python function that adds a custom response handler to the request.
You must declare the function before using it in the config.
The Custom Request Handler is triggered after PerimeterX's verification. The custom function should handle the response (most likely it will create a new response) Default: Empty

config= {
...
custom_request_handler: custom_request_handler_function,
...
}

Additional Activity Handler

A Python function that allows interaction with the request data collected by PerimeterX before the data is returned to the PerimeterX servers. Does not alter the response. Default: Empty

config= {
...
additional_activity_handler: additional_activity_handler_function,
...
}

PerimeterX Data Enrichment

This is a cookie we make available for our costumers, that can provide extra data about the request

context.pxdecontext.pxde_verified

Px Disable Request

This is a property that allows the developer to disable the module for a single request. Its value should be True for disabling, and False for enabling

...
environ['px_disable_request'] =False#The request shall be passed to the enforcer.orenviron['px_disable_request'] =True#The enforcer shall be disabled for that request.

About

PerimeterX WSGI Middleware

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build Status

image

PerimeterX Python Middleware

Latest stable version: v2.3.2 Table of Contents


Installation

PerimeterX Python middleware is installed via PIP: $ pip install perimeterx-python-wsgi

Upgrading

Contact [PerimeterX Support](mailto: support@perimeterx.com) for details.

Required Configurations

To use PerimeterX middleware on a specific route follow this example:

fromperimeterx.middlewareimportPerimeterXpx_config= {
'app_id': 'APP_ID',
'cookie_key': 'COOKIE_KEY',
'auth_token': 'AUTH_TOKEN',
}
application=get_wsgi_application()
application=PerimeterX(application, px_config)
  • The PerimeterX Application ID / AppId and PerimeterX Token / Auth Token can be found in the Portal, in Applications.
  • PerimeterX Risk Cookie / Cookie Key can be found in the portal, in Policies. The Policy from where the Risk Cookie / Cookie Key is taken must correspond with the Application from where the Application ID / AppId and PerimeterX Token / Auth Token. For details on how to create a custom Captcha page, refer to the documentation

Optional Configuration

In addition to the basic installation configuration above, the following configurations options are available:

Module Enabled

A boolean flag to enable/disable the PerimeterX Enforcer. Default: true

config= {
...
module_enabled: False
...
}

Module Mode

Sets the working mode of the Enforcer. Possible values:

  • active_blocking - Blocking Mode
  • monitor - Monitoring Mode Default:monitor - Monitor Mode
config= {
...
module_mode: 'active_blocking'
...
}

Blocking Score

Sets the minimum blocking score of a request. Possible values:

  • Any integer between 0 and 100. Default: 100
config= {
...
blocking_score: 100
...
}

Send Page Activities

Enable/disable sending activities and metrics to PerimeterX with each request.
Enabling this feature allows data to populate the PerimeterX Portal with valuable information, such as the number of requests blocked and additional API usage statistics. Default: true

config= {
...
send_page_activities: True
...
}

Debug Mode

Enable/disable the debug log messages. Default: False

config= {
...
debug_mode: True
...
}

Sensitive Routes

An array of route prefixes that trigger a server call to PerimeterX servers every time the page is viewed, regardless of viewing history. Default: Empty

config= {
...
sensitive_routes: ['/login', '/user/checkout']
...
}

Whitelist Routes

An array of route prefixes which will bypass enforcement (will never get scored). Default: Empty

config= {
...
whitelist_routes: ['/about-us', '/careers']
...
}

Sensitive Headers

An array of headers that are not sent to PerimeterX servers on API calls. Default: ['cookie', 'cookies']

config= {
...
sensitive_headers: ['cookie', 'cookies', 'x-sensitive-header']
...
}

IP Headers

An array of trusted headers that specify an IP to be extracted. Default: Empty

config= {
...
ip_headers: ['x-user-real-ip']
...
}

First-Party Enabled

Enable/disable First-Party mode. Default: True

config= {
...
first_party_enabled: False
...
}

Custom Request Handler

A Python function that adds a custom response handler to the request.
You must declare the function before using it in the config.
The Custom Request Handler is triggered after PerimeterX's verification. The custom function should handle the response (most likely it will create a new response) Default: Empty

config= {
...
custom_request_handler: custom_request_handler_function,
...
}

Additional Activity Handler

A Python function that allows interaction with the request data collected by PerimeterX before the data is returned to the PerimeterX servers. Does not alter the response. Default: Empty

config= {
...
additional_activity_handler: additional_activity_handler_function,
...
}

PerimeterX Data Enrichment

This is a cookie we make available for our costumers, that can provide extra data about the request

context.pxdecontext.pxde_verified

Px Disable Request

This is a property that allows the developer to disable the module for a single request. Its value should be True for disabling, and False for enabling

...
environ['px_disable_request'] =False#The request shall be passed to the enforcer.orenviron['px_disable_request'] =True#The enforcer shall be disabled for that request.

About

PerimeterX WSGI Middleware

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Build Status

image

PerimeterX Python Middleware

Latest stable version: v2.3.2 Table of Contents


Installation

PerimeterX Python middleware is installed via PIP: $ pip install perimeterx-python-wsgi

Upgrading

Contact [PerimeterX Support](mailto: support@perimeterx.com) for details.

Required Configurations

To use PerimeterX middleware on a specific route follow this example:

fromperimeterx.middlewareimportPerimeterXpx_config= {
'app_id': 'APP_ID',
'cookie_key': 'COOKIE_KEY',
'auth_token': 'AUTH_TOKEN',
}
application=get_wsgi_application()
application=PerimeterX(application, px_config)
  • The PerimeterX Application ID / AppId and PerimeterX Token / Auth Token can be found in the Portal, in Applications.
  • PerimeterX Risk Cookie / Cookie Key can be found in the portal, in Policies. The Policy from where the Risk Cookie / Cookie Key is taken must correspond with the Application from where the Application ID / AppId and PerimeterX Token / Auth Token. For details on how to create a custom Captcha page, refer to the documentation

Optional Configuration

In addition to the basic installation configuration above, the following configurations options are available:

Module Enabled

A boolean flag to enable/disable the PerimeterX Enforcer. Default: true

config= {
...
module_enabled: False
...
}

Module Mode

Sets the working mode of the Enforcer. Possible values:

  • active_blocking - Blocking Mode
  • monitor - Monitoring Mode Default:monitor - Monitor Mode
config= {
...
module_mode: 'active_blocking'
...
}

Blocking Score

Sets the minimum blocking score of a request. Possible values:

  • Any integer between 0 and 100. Default: 100
config= {
...
blocking_score: 100
...
}

Send Page Activities

Enable/disable sending activities and metrics to PerimeterX with each request.
Enabling this feature allows data to populate the PerimeterX Portal with valuable information, such as the number of requests blocked and additional API usage statistics. Default: true

config= {
...
send_page_activities: True
...
}

Debug Mode

Enable/disable the debug log messages. Default: False

config= {
...
debug_mode: True
...
}

Sensitive Routes

An array of route prefixes that trigger a server call to PerimeterX servers every time the page is viewed, regardless of viewing history. Default: Empty

config= {
...
sensitive_routes: ['/login', '/user/checkout']
...
}

Whitelist Routes

An array of route prefixes which will bypass enforcement (will never get scored). Default: Empty

config= {
...
whitelist_routes: ['/about-us', '/careers']
...
}

Sensitive Headers

An array of headers that are not sent to PerimeterX servers on API calls. Default: ['cookie', 'cookies']

config= {
...
sensitive_headers: ['cookie', 'cookies', 'x-sensitive-header']
...
}

IP Headers

An array of trusted headers that specify an IP to be extracted. Default: Empty

config= {
...
ip_headers: ['x-user-real-ip']
...
}

First-Party Enabled

Enable/disable First-Party mode. Default: True

config= {
...
first_party_enabled: False
...
}

Custom Request Handler

A Python function that adds a custom response handler to the request.
You must declare the function before using it in the config.
The Custom Request Handler is triggered after PerimeterX's verification. The custom function should handle the response (most likely it will create a new response) Default: Empty

config= {
...
custom_request_handler: custom_request_handler_function,
...
}

Additional Activity Handler

A Python function that allows interaction with the request data collected by PerimeterX before the data is returned to the PerimeterX servers. Does not alter the response. Default: Empty

config= {
...
additional_activity_handler: additional_activity_handler_function,
...
}

PerimeterX Data Enrichment

This is a cookie we make available for our costumers, that can provide extra data about the request

context.pxdecontext.pxde_verified

Px Disable Request

This is a property that allows the developer to disable the module for a single request. Its value should be True for disabling, and False for enabling

...
environ['px_disable_request'] =False#The request shall be passed to the enforcer.orenviron['px_disable_request'] =True#The enforcer shall be disabled for that request.

About

PerimeterX WSGI Middleware

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages