通过GET参数进行管理员访问

时间:2012-09-27 11:17:09

标签: security login

我正在开发一个非常简单的网站。我通常会做一个完整的管理员来编辑网站,但这次我考虑到编辑到位(contenteditable =“true”)。

为了简化用户的登录,我想给他一个密码,他可以在地址栏中输入密码来登录,而不是通常的登录表单。所以他会访问domain.com/page?p=the_password然后我会将他的数据存储在会话中并给他一个带有会话ID的cookie(通常的东西)并将他重定向到domain.com/page。

这有多安全/不安全?我在PHP中这样做,但我想它适用于任何服务器端语言。

2 个答案:

答案 0 :(得分:2)

您的登录想法不安全:请求的URL最终会出现在Web服务器日志和其他地方,这意味着密码最终会出现在Web服务器日志中。

你的“contentedittable”想法可能不安全,但是更加微妙。它(也可能)不符合HTTP规范。

GET请求应始终是幂等的。这是因为允许用户代理(浏览器,缓存等)在未经用户同意的情况下多次重新发出相同的GET请求。浏览器可能会这样做的一个原因是用户按下后退按钮而前一页不再位于缓存中。如果请求不是幂等的,那么第二次发出请求可能会产生意外和不必要的副作用。

听起来你的“编辑到位”功能可能并不总是幂等的。有很多种简单的编辑实际上是幂等的,所以我可能是错的,但是一旦你有了通过这种界面将新项目添加到列表的能力,它就不是。

非幂等请求应通过PUTPOSTDELETE等方式发出。

答案 1 :(得分:1)

添加到@Celada答案。 URL将存储在浏览器历史记录或网络缓存/代理中,因此密码可能以这种方式泄漏。此外,以其他人(登录跨站请求伪造攻击)登录随机互联网用户也是微不足道的,例如,有一个网站的img元素指向domain.com/page?p=the_password

您不会写这个,但是一旦用户登录您的方案需要防止跨站点请求伪造(因此随机页面无法对登录用户的行为执行管理操作)。