在PHP中安全地替代HTTP请求动词(GET,POST)

时间:2014-01-22 11:39:00

标签: php security http https

我在PHP.net文档中阅读了以下有关HTTP请求动词的信息:

  

所选的HTTP请求动词(例如POST,GET)不一定   使请求“安全”。任何未传输的信息   通过加密通道(使用SSL,即HTTPS)进行传输   计划文本。

     

用于通过HTTP安全传输敏感/私人信息   考虑使用SSL,因为这可以防止eve丢弃信息   通过HTTP传输。

这是什么意思?方法 - GET / POST不安全吗?如果是,如何使用SSL通过HTTP安全传输敏感信息?

3 个答案:

答案 0 :(得分:1)

HTTP不安全,因为数据包是以纯文本形式发送的。 HTTPS在双方使用加密方法,因此数据是安全的,除非第三方有权访问私钥来解密消息。

对于HTTPS,您需要私钥和证书,可以是自签名证书,也可以是许多证书颁发公司之一。一旦你有了一个,你可以告诉你的网络服务器使用这个证书,并加密所有通信,如果通过适当的端口发送。默认情况下,HTTP端口为80,如果您不提供此处http://google.com/之类的端口,浏览器将自动假设您正在查询端口80。实际上是http://google.com:80/

SSL(HTTPS)端口为443,当您将浏览器指向例如https://google.com/。这意味着您需要确保网站在端口443上提供内容,否则它将不会被加密。

有大量的教程将指导您完成使您的网络服务器使用SSL证书的过程。

此处的示例:http://www.apache.com/tag/apache-ssl-tutorials/

答案 1 :(得分:0)

以Google搜索为例:如果您在Google上搜索“foobar”,地址栏会显示

http://www.google.com/search?q=foobar

所以用户立即以明文方式看到该信息(这是GET方法)。

现在,假设您正在登录网站。那可能会使用POST方法,你会看到地址栏上的

http://www.example.com/login.php

用户名和密码不会直接显示给用户,而是在请求正文中发送。

但是,POST和GET请求仍然以明文形式发送到服务器,因此网络上的攻击者可以“嗅探”连接并窃取它们。

使用SSL可以保护URLS,标题,页面正文甚至服务器地址,因此攻击者只会看到随机数据。

PHP文档试图教导的是,即使用户看不到地址栏上的值,也不意味着这些值以某种方式加密。

希望这有帮助。

答案 2 :(得分:0)

每当网页使用

(GET/POST method) 

不使用

传输值
SSL/HTTPS

数据以纯文本形式传输。

使用POST的GET和POST表单之间的主要区别不是显示URL中的值(但它以纯文本形式传输),而GET在URL中显示值(以纯文本形式传输)。

回答您的另一个question