控制器安全问题中的代码点火器认证码

时间:2010-06-17 01:15:48

标签: php security authentication codeigniter

我有一个主控制器来处理我的身份验证系统的前端,它处理登录,注销,更新用户信息等等我期望通过POST /来自视图/表单调用的函数。那么像“delete_user”函​​数呢?我的想法是某个管理员面板上的按钮会说“删除帐户”,它会发布到“/ auth / delete”,该功能会根据用户的会话用户名或ID删除用户。这似乎有点开放,你可以发送一个链接给某人,当他们在该应用程序中打开它时,它将删除他们的帐户..什么是最好的方法来处理这个?

4 个答案:

答案 0 :(得分:1)

您关注的实际上是Cross Site Request Forgery或XSRF。您可以在OWASP Website上了解更多相关信息。

你应该做的一些事情可以解决这个问题 -

  1. 使用POST进行删除操作。这不能保护您免受XSRF的侵害,但会保护您免受链接关注者/页面加速器的侵害。它也是http最佳实践。
  2. 将您的会话标识符发布到请求的正文中。在服务器端,比较来自cookie和请求的会话标识符 - 如果它们不同,则拒绝该请求。这是防止XSRF的“double submit cookie”方法。
  3. 或者,您可以要求用户解决验证码。
  4. 此外,Tom提到的“软删除”也是一个好主意。

答案 1 :(得分:1)

听起来好像在函数中添加其他一些信息就是答案。这是有问题的功能:

function delete()   {
        $id = $this->session->userdata('user_id');
        $this->auth->delete_user($id);
        redirect('home');   
    }

在代码点火器中,只需访问site.com/class/delete即可访问,这是我的问题。我认为一个好的计划是使用删除按钮发布身份验证令牌(保存在cookie中),因此无法通过URL进行操作:

function delete()   {
        if($this->input->post("token") == $this->session->userdata('token'))    {
            $id = $this->session->userdata('user_id');
            $this->auth->delete_user($id);
        }
        redirect('home');   
    }

我认为我现在不需要软删除,但是谢谢你的好消息!如果您发现任何其他问题,请解释,谢谢。

答案 2 :(得分:0)

我处理这个的方式如下。在您的帐户页面上,您有一个删除帐户的链接。他们点击该页面并向另一个页面询问是否确实如此,如果是,请输入他们的密码以确认他们是否确定。

他们这样做后,我停用他们的帐户(不删除)并发送一封电子邮件说他们的帐户已停用,如果是这样的话,他们不需要采取任何其他行动。如果不打算他们可以登录他们的帐户,它将重新激活它。 (48小时内)48小时后我删除了他们的帐户和信息。

答案 3 :(得分:0)

查看CodeIgniter的一个更着名的身份验证库:

https://github.com/benedmunds/CodeIgniter-Ion-Auth

如果您不决定只使用它,您至少可以获得一些关于如何创建自己的好主意