我正在创建一个使用HTTPS的基于API的安全web;然而,如果我允许用户配置它(包括发送密码)使用查询字符串这也将是安全的,或者我应该强制它通过POST?
当前回答
是的,您的查询字符串将被加密。
原因是查询字符串是HTTP协议的一部分,HTTP协议是应用层协议,而安全(SSL/TLS)部分来自传输层。首先建立SSL连接,然后将查询参数(属于HTTP协议)发送到服务器。
在建立SSL连接时,您的客户端将按顺序执行以下步骤。假设您正在尝试登录一个名为example.com的站点,并希望使用查询参数发送凭据。您的完整URL可能如下所示:
https://example.com/login?username=alice&password=12345)
Your client (e.g., browser/mobile app) will first resolve your domain name example.com to an IP address (124.21.12.31) using a DNS request. When querying that information, only domain specific information is used, i.e., only example.com will be used. Now, your client will try to connect to the server with the IP address 124.21.12.31 and will attempt to connect to port 443 (SSL service port not the default HTTP port 80). Now, the server at example.com will send its certificates to your client. Your client will verify the certificates and start exchanging a shared secret key for your session. After successfully establishing a secure connection, only then will your query parameters be sent via the secure connection.
因此,您不会暴露敏感数据。但是,使用这种方法通过HTTPS会话发送凭据并不是最好的方法。你应该另辟蹊径。
其他回答
是的,只要没人越过你的肩膀看显示器。
是的。HTTPS会话的整个文本都由SSL保护。这包括查询和报头。在这方面,POST和GET完全相同。
至于你的方法的安全性,没有经过适当的检查,也很难说。
是的,您的查询字符串将被加密。
原因是查询字符串是HTTP协议的一部分,HTTP协议是应用层协议,而安全(SSL/TLS)部分来自传输层。首先建立SSL连接,然后将查询参数(属于HTTP协议)发送到服务器。
在建立SSL连接时,您的客户端将按顺序执行以下步骤。假设您正在尝试登录一个名为example.com的站点,并希望使用查询参数发送凭据。您的完整URL可能如下所示:
https://example.com/login?username=alice&password=12345)
Your client (e.g., browser/mobile app) will first resolve your domain name example.com to an IP address (124.21.12.31) using a DNS request. When querying that information, only domain specific information is used, i.e., only example.com will be used. Now, your client will try to connect to the server with the IP address 124.21.12.31 and will attempt to connect to port 443 (SSL service port not the default HTTP port 80). Now, the server at example.com will send its certificates to your client. Your client will verify the certificates and start exchanging a shared secret key for your session. After successfully establishing a secure connection, only then will your query parameters be sent via the secure connection.
因此,您不会暴露敏感数据。但是,使用这种方法通过HTTPS会话发送凭据并不是最好的方法。你应该另辟蹊径。
是的,从建立HTTPS连接的那一刻起,一切都是安全的。查询字符串(GET)作为POST通过SSL发送。
From a "sniff the network packet" point of view a GET request is safe, as the browser will first establish the secure connection and then send the request containing the GET parameters. But GET url's will be stored in the users browser history / autocomplete, which is not a good place to store e.g. password data in. Of course this only applies if you take the broader "Webservice" definition that might access the service from a browser, if you access it only from your custom application this should not be a problem.
所以使用post至少密码对话框应该是首选的。另外,正如littlegeek在链接中指出的那样,GET URL更有可能写入你的服务器日志。
推荐文章
- 我可以把我所有的http://链接都改成//吗?
- 如何使用网络强制HTTPS。配置文件
- 摘要认证和基本认证的区别是什么?
- 浏览器会通过https缓存内容吗
- 没有为Android SSL连接找到信任锚
- 使用.htaccess和mod_rewrite强制SSL/https
- REST API最佳实践:查询字符串中的参数vs请求体中的参数
- 在尝试访问HTTPS url时,如何使用cURL处理证书?
- 在Java客户端中接受服务器的自签名ssl证书
- 如何从查询字符串读取值与ASP。网络核心?
- file_get_contents(): SSL operation failed with code 1, failed to enable crypto
- 如何与证书颁发机构签署证书签署请求?
- 通过URL和加密传递的HTTP基本身份验证凭据
- bundle安装失败,SSL证书验证错误
- 转义URL中的&号