gpt4 book ai didi

http - 我应该接受所有资源的 POST 方法吗?

转载 作者:可可西里 更新时间:2023-11-01 16:34:58 25 4
gpt4 key购买 nike

在这个问题中,我谈论的是 HTTP 请求方法。有关 HTTP 请求方法的详细说明,请参阅 RFC 2616 ,尤其是第 5.1.1 节和第 9 节。

请求资源(URI、URL、网页)的常用方法是 GET 方法(如果您只需要 header ,则为 HEAD)。

通常,只有在客户端向服务器发送的数据不应出现在 URI 中时才使用 POST 方法。帐户名和密码或其他敏感表单数据通常以这种方式传输。 (当然,您仍然需要 SSL,因为它本身不提供加密。)

我的大部分资源 (URI) 都不需要 POST 方法。例如,包含我的文章的页面应该通过 GET 检索。正确请求行的示例:

GET /myarticles HTTP/1.1
GET /copyrightnotice HTTP/1.1
GET /blog/2011/03/14/something.html HTTP/1.1

唯一需要 POST 的是登录页面(在表单中输入的帐户和密码在 POST 正文中发送)和某些其他特殊页面。示例:

POST /performlogin HTTP/1.1
POST /formtarget HTTP/1.1
POST /savevote HTTP/1.1

我的问题是,我是否应该在不需要它的页面(例如/myarticles、/copyrightnotice 等)上禁止 POST 方法?

换句话说,如果我得到这个请求行:

POST /blog/2011/03/14/something.html HTTP/1.1

我应该

a) 发送回 405(方法不允许)错误代码,连同 Allow: header ,如下所示:

HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
Date: ...

b) - 或者 - 我应该将 POST 请求简单地视为 GET 请求吗?

HTTP/1.1 200 OK
Date: ...

HTML-content-here

重要还是完全取决于我?使用选项 b) 时是否有任何注意事项/安全风险?我正在努力保持尽可能多的标准合规性。

最佳答案

一点都不重要。有一个(非常小的)论点认为,限制允许的请求方法可能会使您的网站更不容易被黑客入侵,但不是在任何真正意义上。您唯一需要注意的是限制(并且可能完全禁止)PUT 和 DELETE 的使用,因为它们会直接更改您服务器的文件系统。

如果一个 POST 请求被接收到一个期望 GET 的页面,很可能是有人在四处查看您的站点将接受什么,可能是为了试图找到一个安全漏洞。话虽如此,不太可能存在任何 GET 请求也无法利用的潜在漏洞。

如果您不小心放置了 method="post",则允许两者可能会有用。在 <form> 上你不是故意的,但同样,如果你这样做,可能会更难找到一个问题,这个问题会进一步出现。如果您有一个脚本可以处理来自站点上多个表单的表单提交,那么接受这两个表单可能是个好主意,但对于普通页面来说,应该没有必要。

您在问题中忘记提及的一件事(这并不重要)是通过 HTML 表单上传文件时也需要 POST 请求 - POST 请求的要点不仅仅是隐藏 URL 中的数据(虽然这是一个有用的副作用),但允许客户端向服务器发送一个对象。这个对象可以是表单数据,也可以是一个文件、一个 XML 文档等等。例如,许多 XML-HTTP API 使用 POST(所以他们应该 - 我过去遇到过一个使用 GET 的,它是一场噩梦,因为这意味着文档中不能有任何空白,或者它破坏了请求,您必须对 XML 文档进行 urlencode,这是耗时/资源且毫无意义的)。

这真的需要您自行决定。

关于http - 我应该接受所有资源的 POST 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7149181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com