面试官提问:
为什么说 POST 比 GET 安全?它真的安全吗?
应聘者回答:
从广义上说,POST 的“安全性”相对于 GET 只是相对的、表层的安全性,并不代表 POST 请求是绝对安全的。
一、为什么认为 POST 比 GET 安全?
参数位置不同:
GET:参数附在 URL 后,直接暴露在地址栏中,如:
http://example.com/login?user=admin&pwd=123456
这种形式容易被浏览器记录、日志存储、URL 分享等手段泄露。
POST:参数放在 HTTP 请求体(body) 中,地址栏不会显示;
不会被浏览器自动缓存;不容易被日志系统或服务器代理意外记录。
用户可见性不同:
GET 请求的参数用户肉眼可见、易于修改;POST 请求的参数不会直接暴露,拦截或修改更麻烦。
因此,在传输内容如密码、表单数据、用户身份信息时,推荐使用 POST。
二、POST 的安全性是相对的
尽管 POST 参数不直接暴露在 URL 中,但从网络传输的角度来说:
GET 和 POST 的数据在 HTTP 中都是明文;无论参数放在 URL 还是 body,只要使用的是 HTTP 协议,都可以被抓包工具(如 Wireshark、Fiddler)拦截并完整读取;因此,只使用 POST 不能防止中间人攻击、流量窃听、数据泄露。
三、真正的安全依赖于 HTTPS
HTTPS = HTTP + TLS 加密层;能加密请求的 URL、Header 和 Body 内容,使其在传输过程中不可被解密;只有 HTTPS 才能从根本上保障 GET、POST 的安全性;在敏感数据交互、身份认证、金融支付等场景下,必须使用 HTTPS。
四、总结
比较维度GETPOST参数是否暴露是(URL 可见)否(放在请求体中)是否记录在日志中可能较少(默认不会)网络传输是否加密否(HTTP 明文)否(HTTP 明文)安全保障来源无无推荐加密方式必须使用 HTTPS 才安全必须使用 HTTPS 才安全POST 的安全性只是“看起来更安全”,但只有结合 HTTPS 才能真正实现端到端的加密保护。
😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。