php - 将身份验证凭据作为 GET 参数发送时的安全问题

标签 php security post yii get

我通过向他发送带有他的登录名/密码的直接链接来对用户进行一些身份验证,以便他能够按下它并通过 URL 中的 GET 参数登录。

例如: http://example.com/index.php?r=site/login&p=password&email=igor.savinkin%40gexample.com

我的问题是关于安全问题。如果有人将网络嗅探器与互联网线路并行放置,从而复制凭据或获取缓存数据怎么办? 我用的是Yii框架,所以安全维护还是不错的;登录最初是通过 POST 参数完成的。 我听说过 POST 与 GET 请求:

  • 在处理敏感数据时使用 POST。
  • 使用 GET 进行安全操作,使用 POST 进行不安全操作。

最佳答案

不要在 url 中使用密码!

这真的很糟糕,任何嗅探(或监控)流量的人都可以获得密码。另外,任何有权访问电子邮件收件箱的人都会知道密码。

另一种方法是使用仅有效一次的 token 。在发送邮件之前,您会生成一个与用户电子邮件地址相关联的唯一 token 。

你会有这样一个 url

http://hostname.com/index.php?r=site/login&token=544a0a62e280e3.83969641&email=igor.savinkin%40gmail.com

当用户使用你的url时

  • 检查提供的 token 是否与您数据库中的 givn 地址相关联
  • 丢弃 token 以确保没有人会使用相同的 url 登录。

最好是不提供任何使用给定 url 登录的方法。因为我假设您将通过电子邮件发送链接,而 SMTP 协议(protocol)并不安全。

关于php - 将身份验证凭据作为 GET 参数发送时的安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26543879/

相关文章:

javascript - 如何使用getJson将变量发送到php文件

php - Mysql不为空时按列排序然后按其他列排序

php - 终极清洁/安全功能

javascript - JQuery 后回调不起作用

php - 如何在正确的 'Codeigniter way' 中编写此 SQL 查询?

ios - 钥匙串(keychain):项目报告为 errSecItemNotFound,但在添加时收到 errSecDuplicateItem

c++ - 如何在 C++ 中调用 LsaRemoveAccountRights

rest - 如何在 POST 请求正文中给出当前时间

php - 使用 XMLHttpRequest 模拟类型 ="file"INPUT

PhP 5.4 中的 PhP 上传进度不起作用。未设置 session 变量