sanic icon indicating copy to clipboard operation
sanic copied to clipboard

sanic 23 `FORWARDED_SECRET` value with `-` or `_` behavior weired

Open yurenchen000 opened this issue 4 weeks ago • 2 comments

Is there an existing issue for this?

  • [x] I have searched the existing issues

Describe the bug

app.config.FORWARDED_SECRET='chen-secret' FORWARDED_SECRET='chen_secret'
curl -H 'forwarded: secret=chen-secret' fail work
curl -H 'forwarded: secret=chen_secret' work fail

it behavior weired

Code snippet

https://sanic.dev/en/guide/advanced/proxy-headers.html#forwarded-header

# test fwd
from sanic import Sanic
from sanic.response import json

# sanic app
app = Sanic(__name__)

## tested on sanic 23.12.1, 23.3.0

### FORWARDED_SECRET behavior weird
# app.config.FORWARDED_SECRET = 'chen-secret' 	## WARN: need client 'chen_secret'
app.config.FORWARDED_SECRET = 'chen_secret' 	## WARN: need client 'chen-secret

### REAL_IP_HEADER behavior as expected
app.config.REAL_IP_HEADER = 'chen-realip'
# app.config.REAL_IP_HEADER = 'chen_realip'
app.config.PROXIES_COUNT = 1

print('--config_fwd_secret:', app.config.FORWARDED_SECRET)

@app.route("/fwd")
async def forwarded(request):
    return json(
        {
            "remote_addr": request.remote_addr,
            "scheme": request.scheme,
            "server_name": request.server_name,
            "server_port": request.server_port,
            "forwarded": request.forwarded,
            "config_fwd_secret": app.config.FORWARDED_SECRET,
        }
    )

'''
test1:
  curl -s localhost:8080/fwd -H 'forwarded: secret=chen-secret' -H 'chen-realip: 123.45.6.7'
test2:
  curl -s localhost:8080/fwd -H 'forwarded: secret=chen_secret' -H 'chen-realip: 123.45.6.7'
'''

Expected Behavior

maybe, client and server use same value?

$ curl -s localhost:8080/fwd -H 'forwarded: secret=chen_secret' -H 'chen-realip: 123.45.6.7' | jq
{
  "remote_addr": "123.45.6.7",
  "scheme": "http",
  "server_name": "localhost",
  "server_port": 8080,
  "forwarded": {
    "for": "123.45.6.7"
  },
  "config_fwd_secret": "chen_secret"
}

$ curl -s localhost:8080/fwd -H 'forwarded: secret=chen-secret' -H 'chen-realip: 123.45.6.7' | jq
{
  "remote_addr": "123.45.6.7",
  "scheme": "http",
  "server_name": "localhost",
  "server_port": 8080,
  "forwarded": {
    "for": "123.45.6.7"
  },
  "config_fwd_secret": "chen-secret"
}

How do you run Sanic?

Sanic CLI

Operating System

Linux

Sanic Version

23.12.1, 23.3.0

Additional context

//test result:

run server

$ ~/.local/bin/sanic test_fwd --port 8080

client test

$ curl -s localhost:8080/fwd -H 'forwarded: secret=chen_secret' -H 'chen-realip: 123.45.6.7' | jq
{
  "remote_addr": "",
  "scheme": "http",
  "server_name": "localhost",
  "server_port": 8080,
  "forwarded": {
    "secret": "chen_secret"
  },
  "config_fwd_secret": "chen_secret"
}

$ curl -s localhost:8080/fwd -H 'forwarded: secret=chen-secret' -H 'chen-realip: 123.45.6.7' | jq
{
  "remote_addr": "123.45.6.7",
  "scheme": "http",
  "server_name": "localhost",
  "server_port": 8080,
  "forwarded": {
    "for": "123.45.6.7"
  },
  "config_fwd_secret": "chen_secret"
}

yurenchen000 avatar Jun 08 '24 12:06 yurenchen000