PHP会话安全

PHP Session Security

一些有关维护负责会话使用 PHP 的安全指导原则有哪些?没有信息网络各处,这一切奠定了在一个地方时间大约 !

2008-08-02 02:41:34
问题评论:

回答:

有几个要做以保证您的会话的安全事项︰

  1. 对用户进行身份验证时使用 SSL 或执行敏感操作。
  2. 将安全级别更改 (如日志记录) 时,请重新生成会话 id。可以甚至生成会话 id 的每个请求如果您愿意的话。
  3. 有会话超时
  4. 不使用全局寄存器
  5. 在服务器上存储的身份验证的详细信息。也就是说,不要在 cookie 中发送详细信息,如用户名。
  6. 检查$_SERVER['HTTP_USER_AGENT']这将向会话劫持一个小障碍。您还可以检查 IP 地址。但这会导致这些用户具有更改 IP 地址,因为多个互联网连接等 (这是这种情况在我们这里的环境) 上的负载平衡的问题。
  7. 锁定文件系统上的会话的访问或使用自定义会话处理
  8. 为敏感操作,请考虑需要登录用户再次提供其身份验证详细信息

对于某些操作仅使用 SSL 是不够的除非您具有单独的会话加密和未加密的通信。如果您通过 HTTPS 和 HTTP 使用单个会话,攻击者会带走它第一次非 HTTPS 请求。

-1 是一件小事,欺骗用户代理。您描述浪费代码并不是一种安全系统。

@The 车,它可能是 (攻击者可以捕获受害者的用户代理使用他们自己的站点) 的重要屏障,依赖于通过隐匿性来实现安全,但它仍然是一个额外的障碍。如果用户代理 HTTP 会话使用过程中更改,它会非常可疑,很可能发生了攻击。我从未说过您可以使用它本身。如果将其与其他技术相结合可以更安全的站点。

我认为它类似于 @grom 将一条苏格兰磁带放在您的门,并说它将会阻止人破坏中。

如果正在检查用户代理,您将阻止来自 IE8 用户的所有请求时他们切换兼容性模式。我有我自己的代码中的此问题跟踪的乐趣,请参阅︰ serverfault.com/questions/200018/http-302-problem-on-ie7因为它是这种微不足道的事情欺骗,如其他人已经说过,我采取用户代理签出。

一项规定是每次会话的安全级别更改时调用session_regenerate_id这有助于防止会话劫持。

我的两个 (或更多) 分︰

  • 信任任何人
  • 筛选器输入、 输出进行转义 (cookie,会话数据也是您的输入)
  • 避免 XSS (保持您的 HTML 格式正确,是PHPTALHTMLPurifier看看)
  • 纵深防御
  • 不公开数据

在此主题上没有微小但好书︰ Chris Shiflett 通过基本的 PHP 安全性.

Essential PHP Security

在本书的主页上,您会发现一些有趣的代码示例和示例章节。

(IP 和用户代理),上面提到的技术,您可以使用此处所述︰如何避免身份信息被窃取

有关 XSS 预防 + 1。如果没有,就无法避免︰ CSRF,因而有人可以"乘坐公共"会话而不会甚至获得会话 id。

我认为 (这要解决在 PHP 6) 的主要问题之一是 register_globals。现在用来避免register_globals的标准方法之一是使用$_REQUEST $_GET$_POST数组。

"正确"的方式 (如 5.2,虽然有小错误的存在,但 6 年稳定,这即将推出) 是通过筛选器.

因此,而不是︰

$username = $_POST["username"];

您可以执行的操作︰

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

或甚至只是︰

$username = filter_input(INPUT_POST, 'username');

这根本的问题没有关系。

真的吗?然后为什么接受应答中做他们提到不能使用注册全局变量?不会就最普通开发人员担心,全局寄存器和窗体变量处理落在"会话"的保护伞下,即使它不是从技术上讲的"会话"对象的一部分?

-1 这不回答问题。

我同意,这不完全回答的问题,但是这的确是问题的答案的一部分。再次,这 fleshes 接受的答案,"不使用注册全局"中的项目符号点出。这会告诉有什么解决办法。

此会话 fixation 纸具有很好的攻击可能是哪里的指针。请参阅会话 fixation 在维基百科的页面.

内容来源于Stack Overflow PHP Session Security
请输入您的翻译

PHP Session Security

确认取消