Skip to main content

uri-blocker

The uri-blocker Plugin is used to intercept and block requests that match specific URI patterns defined in block_rules. It allows you to secure Routes or Services by rejecting unwanted requests based on custom rules.

Attributes

NameTypeRequiredDefaultValid valuesDescription
block_rulesarray[string]TrueA list of regex rules to match against request URIs. If a match is found, the request is terminated with the specified rejected_code. For example: ["root.exe", "root.m+"].
rejected_codeintegerFalse403[200, ...]HTTP status code returned when the request matches any block_rules.
rejected_msgstringFalsenon-emptyCustom message to include in the HTTP response body when a request is blocked.
case_insensitivebooleanFalsefalseIf true, the match is case-insensitive.

Enable Plugin

The example below demonstrates how to enable the uri-blocker Plugin on a specific Route:

Step 1: Retrieve the Admin Key

Fetch the admin_key from config.yaml and store it as an environment variable:

admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 's/"//g')

Step 2: Configure the Plugin

Enable the uri-blocker Plugin with a set of block rules:

curl -i http://127.0.0.1:9180/api/stargate/v1/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
{
"uri": "/*",
"plugins": {
"uri-blocker": {
"block_rules": ["root.exe", "root.m+"]
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'

Example Usage

Once configured, requests matching the specified block_rules will be blocked.

Case 1: Request Matching a Block Rule

If the requested URI matches one of the block_rules (e.g., root.exe), the request is rejected:

curl -i http://127.0.0.1:9080/root.exe?a=a
HTTP/1.1 403 Forbidden
Date: Wed, 17 Jun 2020 13:55:41 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 150
Connection: keep-alive
Server: Stargate web server

... ...

Case 2: Custom Rejection Message

If rejected_msg is specified in the configuration, it will appear in the response body:

{
"plugins": {
"uri-blocker": {
"block_rules": ["root.exe", "root.m+"],
"rejected_msg": "Access is not allowed"
}
}
}

The response:

HTTP/1.1 403 Forbidden
Date: Wed, 17 Jun 2020 13:55:41 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 150
Connection: keep-alive
Server: Stargate web server

{"error_msg":"Access is not allowed"}

Delete Plugin

To disable the uri-blocker Plugin, remove its configuration from the Route. Stargate will automatically reload the changes without requiring a restart:

curl http://127.0.0.1:9180/api/stargate/v1/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
{
"uri": "/*",
"plugins": {},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'