显然,我对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方法同样容易受到攻击。
期待评论和解释。
答案 0 :(得分:0)
是的。在协商了(传输)安全性之后,服务器才知道用户输入/单击的URL,因为它作为请求的数据发送,因此它并不是天生不安全的:
连接现已加密,浏览器通过链接发送请求数据:
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可以单独加密其数据,即使临时观察者可以看到大部分请求,也可以通过这种方式保护数据。它只能由服务器解密,因为服务器保留了密钥对的私有部分