WebSocket

Since v0.6.0, Burp-UI supports WebSockets for better/smarter notifications. In order to use this feature, you need some extra requirements:

pip install "burp-ui[websocket]"

It is highly recommended to use a Redis Broker for the websocket server to interact with the celery workers and other pieces of the code. It is also advised to run one or several dedicated WebSocket servers behind a reverse-proxy because gunicorn does not play well with it.

The details of the configuration may be found in the WebSocket section.

Dedicated Server

You can choose to either run an embedded WebSocket server though this is not recommended in production or you can run one or several dedicated WebSocket servers through the bui-manage command like this:

bui-manage websocket --bind 0.0.0.0 --port 5001

If you are running the above command, you’ll need to set the url option under the [WebSocket] section to "document.domain + ':5001'" (unless you use a reverse-proxy, see bellow).

Warning

The quotes are MANDATORY in this case.

Alternatively, you can setup a reverse-proxy as explained bellow.

Note

A systemd service example file is shiped in the contrib directory

Reverse-proxy

Running one or several dedicated WebSocket server is the recommended setup in production. You will find more details on this in the Flask-SocketIO documentation.

Running a dedicated server on a dedicated port and/or IP may be a pain. That’s the reason why you can/should setup a reverse-proxy in front of this using a configuration like:

server {
        listen 80;
        server_name _;

        location / {
                proxy_pass http://127.0.0.1:5000;
        }

        location /socket.io {
                proxy_http_version 1.1;
                proxy_buffering off;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "Upgrade";
                proxy_pass http://127.0.0.1:5001/socket.io;
        }
}

If you ran several servers, you can use this config:

upstream socketio_nodes {
        ip_hash;

        server 127.0.0.1:5001;
        server 127.0.0.1:5002;
        # to scale the app, just add more nodes here!
}

server {
        listen 80;
        server_name _;

        location / {
                proxy_pass http://127.0.0.1:5000;
        }

        location /socket.io {
                proxy_http_version 1.1;
                proxy_buffering off;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "Upgrade";
                proxy_pass http://socketio_nodes/socket.io;
        }
}