1

悪い HTTP クライアントはハッシュ記号をエスケープせず、次のように nginx に送信しています。

GET /foo/escaped#stuff

それ以外の:

GET /foo/escaped%23stuff

#nginxはproxy_passディレクティブの の後のテキストを削除するため、これにより nginx の構成が壊れます。ハッシュ記号をエスケープするにはどうすればよいですか?

  • 使用return 200 "$request_uri";すると、nginxがそれを読んでいることがわかりますので、可能のようです。ただし、Nginx はlocationブロック単位で無視するため、実際には何とも一致しません。
  • 以下のコードを使用して、Python でエスケープされていない HTTP GET 要求を送信できます。

    import socket
    
    def get(host, port, uri):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((host, port))
        sock.send('GET {} HTTP/1.0\r\nHost: {}\r\n\r\n'.format(uri, host))
    
        return sock.recv(1000)
    
4

0 に答える 0