代码之家  ›  专栏  ›  技术社区  ›  too much php

$\u会话数组的安全性

  •  5
  • too much php  · 技术社区  · 15 年前

    当低权限非管理员用户成功登录到我的web应用时,我将以下数据存储在 $_SESSION 数组:

    $_SESSION = array(
        'user_id'     => 2343,  // whatever their user_id number is from the DB
        'allow_admin' => false, // don't give them access to admin tools
        'allow_edit'  => false, // don't let them edit stuff
        );
    

    /tmp ? (以上代码是添加这些项目的唯一位置。) 美元会议

    6 回复  |  直到 15 年前
        1
  •  9
  •   Community CDub    8 年前

    会话的内容仅在服务器端可见和可修改。

    只有当您的应用程序或服务器包含某些漏洞时,才能以“未经授权”的方式修改它们。

    你也应该意识到这样的事情 session fixation attacks

    缓解这些问题的一种方法是 regenerate the session id 无论何时更改会话的特权级别。

        2
  •  4
  •   OIS    15 年前

    如果您想避免JavaScript读取cookie和中间人攻击,则需要使用具有HTTPS的服务器,并设置会话Cookie仅通过HTTPS传输。

    session.cookie\u secure指定是否应仅通过安全连接发送cookie。默认为关闭。此设置是在PHP4.0.4中添加的。另请参见会话获取cookie参数()和会话设置cookie参数()。

    session.cookie\u httponly将cookie标记为只能通过HTTP协议访问。这意味着脚本语言(如JavaScript)无法访问cookie。此设置可以有效地帮助减少通过XSS攻击进行的身份盗窃(尽管并非所有浏览器都支持此设置)。

    为了更好地保护管理员权限,让计算机无人看守几分钟,您应该在最后一次(管理员)登录时设置计时器。如果时间超过x个时间单位,用户必须再次登录才能使用管理员权限。

    较短的会话也比较长的会话更安全。

        3
  •  3
  •   Community CDub    5 年前

    服务器

    会议 存储在服务器上。如果用户可以直接访问存储会话的目录,则可以更改会话数据。解决这个问题的一个方法是保护目录。并确保php代码中没有漏洞,允许用户id由$\u POST或$\u GET设置。

    客户

    但是在客户端,操纵会话是非常困难的 通过 hijacking 某人的会话id。这将使劫机者冒充该用户。并代表他们发出请求。

    还有 跨站点请求伪造 . 这是黑客欺骗用户发送请求的时候 him . 比如让他点击一个链接。你可以用代币来对付它。令牌是生成的字符串,作为隐藏字段放入$\u会话数组和每个HTML表单中。当用户提交表单时,这些值会相互检查。每次用户请求新页面时,令牌都会发生变化。通过这种方式,攻击者必须尝试预测令牌,这相当困难,取决于您如何生成令牌。

    这些链接还将显示这些攻击的示例。

        4
  •  2
  •   RaYell    15 年前

    如果您的脚本中没有提供这样的访问权限,那么用户对此无能为力。因此,会话数据应该非常安全。用户唯一能做的就是操纵URL中传递的会话cookie或会话id,但他不太可能找到另一个用户的现有会话id。

        5
  •  1
  •   Richy B.    15 年前

    除非您在某个地方留下了安全漏洞(例如允许用户以某种方式添加/更改$\u会话数据)。

        6
  •  1
  •   Deniss Kozlovs    15 年前

    据我所知,不会,除非用户猜到您的会话id并将其替换到他的cookie中。您应该至少在服务器端添加额外的IP检查,以防止出现这种情况。