对于不安全的POST,返回什么响应代码是不可接受的?

时间:2012-01-08 23:49:57

标签: security http redirect https post-redirect-get

如果有人通过http访问我的服务器(即不是https),那么我将GET请求重定向到https版本。

但我不知道如何处理POST和PUT,因为我无法重定向它们(浏览器在重定向上执行GET我相信)。

我应该返回一个错误代码。 我应该返回什么HTTP错误代码?

3 个答案:

答案 0 :(得分:1)

通常,你会返回403 - 禁止。对此的一般描述是“服务器理解请求,但拒绝授权它”。这适合你的情况。

答案 1 :(得分:0)

技术上正确的答案是使用403.4,但在子状态下,它是仅IIS的功能,nginx不支持它。

因此,我更喜欢返回418“我是茶壶”或451“出于法律原因不可用”(因为使用纯文本http已经不再合法,哈哈,只是在开玩笑:)),这种状态相当异国情调,应该触发客户弄清楚发生了什么。

nginx可以选择返回状态,例如类似文本

# cat /etc/nginx/conf.d/default.conf
server {
    listen       80 default_server;


    location / {
        add_header Content-Type text/plain;
        return 418 "TLS REQUIRED";
    }
}

# curl -v  http://localhost/
* About to connect() to localhost port 80 (#0)
*   Trying ::1...
* Connection refused
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost
> Accept: */*
>
< HTTP/1.1 418
< Server: nginx/1.16.1
< Date: Sat, 15 Feb 2020 07:13:20 GMT
< Content-Type: application/octet-stream
< Content-Length: 12
< Connection: keep-alive
<
* Connection #0 to host localhost left intact
TLS REQUIRED

但是,像Chrome或Firefox这样的浏览器无法处理此权限,Chrome说ERR_INVALID_RESPONSE,而Firefox说“找不到文件”,这种行为无法解决我们的目标。

所以我只剩下状态418。

答案 2 :(得分:-1)

http://www.ietf.org/id/draft-ietf-httpbis-p2-semantics-18.txt解释了HTTP响应代码。如果您需要错误代码,只需在该URL处无法处理请求时返回404。

  

7.4.5。找不到404

     

服务器未找到与有效请求URI匹配的任何内容。      没有说明该病症是暂时的还是      常驻。如果服务器应该使用410(Gone)状态代码      通过一些内部可配置的机制,知道一个旧的      资源永久不可用,没有转发地址。      此状态代码通常在服务器不希望时使用      明确说明请求被拒绝的原因,或者没有其他请求      回应是适用的。