关于GET和POST的误解

时间:2019-06-27 03:51:33

标签: post networking get

显然,我对GET和POST方法有所不同的误解是,查询参数以纯文本形式作为GET方法中URL的一部分放置,并且查询参数存在于ENCODED(ENCRYPTED)FORM中的URL中。 。

但是,我意识到这是一个严重的误解。并且经过:

https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9

,然后在python中编写一个简单的套接字服务器并发送GET和POST(通过表单提交)并在服务器端打印请求

我知道,只有在GET中,URL中才有参数,而在POST中,请求正文中才有参数。

我也经历了以下问题,以查看在较低级别(C级)发送GET和POST是否有任何区别:

Simple C example of doing an HTTP POST and consuming the response

因此,在上面的上述问题中,我看到没有对POST请求应用特殊的加密。

因此,我想确认以下内容:

1。与GET和POST相关联的不安全性仅是由于GET方法在URL中附加了参数。

对于可以拥有整个请求正文的人来说,GET和POST方法同样容易受到攻击。

  1. 在网络上,发送GET和POST正文的加密程度相同。

期待评论和解释。

1 个答案:

答案 0 :(得分:0)

是的。在协商了(传输)安全性之后,服务器才知道用户输入/单击的URL,因为它作为请求的数据发送,因此它并不是天生不安全的:

  • 您在浏览器中输入:https://myhost.com/a.page?param=value
  • 浏览器对myhost.com进行DNS查找
  • 浏览器连接到检索到的ip的https端口443
  • 浏览器协商安全性,如果服务器使用SNI证书,则可能包括myhost.com
  • 连接现已加密,浏览器通过链接发送请求数据:

    GET /a.page?param=value HTTP / 1.1 主持人:my host.com (其他标题)

    //可能没有正文数据

    ----或----

    POST /a.page HTTP / 1.1 主持人:my host.com (其他标题)

    param = value //身体数据

您可以看到所有数据都是通过加密连接发送的,标题和正文由空白行分隔。 GET不必具有身体,但也不能阻止它具有一个身体。 POST通常具有主体,但我要说明的是,与请求相关的已发送数据(param=value)(用户键入的内容,可能是敏感信息)包含在请求中-在标头或正文中-但所有内容均已加密

从安全角度来看,唯一真正的区别是浏览器历史记录倾向于保留完整的URL,因此在GET请求的情况下,历史记录中的param=value会显示给下一个阅读它的人。无论是GET还是POST,传输中的数据都是安全的,但是在客户端浏览器的历史记录上下文中,将敏感数据放置在POST上的趋势集中在“静态数据”概念上。如果浏览器没有任何历史记录(并且地址栏上没有显示要肩负冲浪者的参数),则任何一种方法都将近似于另一种方法

保护浏览器和服务器之间的连接非常简单,然后意味着现有的发送/接收数据功能都可以在没有单独注意的情况下正常工作,但这绝不是确保连接安全的唯一方法。可以想象,可能不需要传输,而是让服务器在某处的页面上发送一段JavaScript和公共/私有密钥对的公共部分,然后每次请求页面[脚本都会导致浏览器] make可以单独加密其数据,即使临时观察者可以看到大部分请求,也可以通过这种方式保护数据。它只能由服务器解密,因为服务器保留了密钥对的私有部分