Skip to main content

Find web application HTTP route authn and authz security bugs in your code.

Project description

route-detect

CI Python Versions PyPI Version

Find authentication (authn) and authorization (authz) security bugs in web application routes.

Web application HTTP route authn and authz bugs are some of the most common security issues found today. These industry standard resources highlight the severity of the issue:

Routes demo

Routes from koel streaming server

Supported web frameworks (route-detect IDs in parentheses):

  • Python: Django (django, django-rest-framework), Flask (flask), Sanic (sanic)
  • PHP: Laravel (laravel), Symfony (symfony), CakePHP (cakephp)
  • Ruby: Rails (rails), Grape (grape)
  • Java: JAX-RS (jax-rs), Spring (spring)
  • Go: Gorilla (gorilla), Gin (gin), Chi (chi)
  • JavaScript/TypeScript: Express (express), React (react), Angular (angular)

Installing

Use pip to install route-detect:

$ python -m pip install --upgrade route-detect

You can check that route-detect is installed correctly with the following command:

$ echo 'print(1 == 1)' | semgrep --config $(routes which test-route-detect) -
Scanning 1 file.

Findings:

  /tmp/stdin
     routes.rules.test-route-detect
        Found '1 == 1', your route-detect installation is working correctly

          1┆ print(1 == 1)


Ran 1 rule on 1 file: 1 finding.

Using

route-detect provides the routes CLI command and uses semgrep to search for routes.

Use the which subcommand to point semgrep at the correct web application rules:

$ semgrep --config $(routes which django) path/to/django/code

Use the viz subcommand to visualize route information in your browser:

$ semgrep --json --config $(routes which django) --output routes.json path/to/django/code
$ routes viz --browser routes.json

If you're not sure which framework to look for, you can use the special all ID to check everything:

$ semgrep --json --config $(routes which all) --output routes.json path/to/code

If you have custom authn or authz logic, you can copy route-detect's rules:

$ cp $(routes which django) my-django.yml

Then you can modify the rule as necessary and run it like above:

$ semgrep --json --config my-django.yml --output routes.json path/to/django/code
$ routes viz --browser routes.json

Contributing

route-detect uses poetry for dependency and configuration management.

Before proceeding, install project dependencies with the following command:

$ poetry install --with dev

Linting

Lint all project files with the following command:

$ poetry run pre-commit run --all-files

Testing

Run Python tests with the following command:

$ poetry run pytest --cov

Run Semgrep rule tests with the following command:

$ poetry run semgrep --test --config routes/rules/ tests/test_rules/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

route_detect-0.6.0.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

route_detect-0.6.0-py3-none-any.whl (29.1 kB view details)

Uploaded Python 3

File details

Details for the file route_detect-0.6.0.tar.gz.

File metadata

  • Download URL: route_detect-0.6.0.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.7.16 Linux/4.15.0-206-generic

File hashes

Hashes for route_detect-0.6.0.tar.gz
Algorithm Hash digest
SHA256 23b09e841dacd26968a233689b2dbd237bee328f878d284f3212b6ff1c777cf3
MD5 b5d037a065b90086c9bbb1006d4562fa
BLAKE2b-256 0d298658e47060541f7b3988c269ed174bbd74d0fe9f6649c638ff68a6711a6a

See more details on using hashes here.

File details

Details for the file route_detect-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: route_detect-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 29.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.7.16 Linux/4.15.0-206-generic

File hashes

Hashes for route_detect-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cb2ba0375c0bf936f06804d1d7844e496719f0589b48afa7ded76b47b79ee84d
MD5 cae126b8f260852de05ffef8256ba994
BLAKE2b-256 0fd691b271cbb5b4c23677116951a2833a85b453679351b5d33d18d8e0ae653f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page