【问题标题】:Notice: Undefined index: on session variables possible to ignore?注意:未定义的索引:会话变量可能被忽略?
【发布时间】:2020-05-25 08:18:22
【问题描述】:

背景故事

我曾经在 GoDaddy 专用服务器上托管我的网站。通常我会(在成功的用户登录时)将一些东西应用于_SESSION 变量以确定用户是否成功登录

if ($_SESSION['user_logged_in'] == true) {
    // did stuff here
}

我通常会在页面顶部应用这样的内容,这样如果用户没有登录,它会将他们重定向到其他地方,比如...

<?php
if ($_SESSION['user_logged_in'] != true) {
    // direct them to log in
    header("Location: http://www.example.com/login");
    die();
} else {
    // user is logged in so show them stuff
}
?>

我正在从 GoDaddy 迁移到 AWS,并使用 Apache 等构建了我自己的 EC2 实例。现在,当我在用户未登录的情况下访问页面时,我会收到类似的错误

Notice: Undefined index: user_logged_in in /var/www/html/index.php on line X

我理解为什么我会收到此消息,因为从技术上讲,因为用户未登录且会话变量尚未创建。

但是....

我的第一个问题是,apache 中是否存在忽略会话变量是否已设置为不显示错误的设置?我在使用 GoDaddy 时从未收到此消息,所以我假设是这样。

其次,不使用if (isset($_SESSION['variable'])之类的东西来判断会话变量是否存在有什么安全风险?

使用if ($_SESSION['user_logged_in'] != true) { 之类的东西不是一样的吗?

【问题讨论】:

标签: php arrays variables warnings undefined-index


【解决方案1】:

您可以使用error_reporting 关闭Notice 级别错误:

error_reporting(error_reporting() & ~E_NOTICE);

但从长远来看,最好使用 Null Coalescing 运算符 ?? 之类的东西来修复代码,例如

if (($_SESSION['user_logged_in'] ?? false) != true) {

【讨论】:

  • 但是,如果有的话,简单地忽略这些错误是否会带来任何安全风险?
  • @CesarBielich 问题在于,如果您将未定义的变量与false(例如$_SESSION['user_logged_in'] !== false)进行比较,它将通过,这可能会导致您的代码认为有人被登录in,这将是一个安全问题。只要你不使用那种编程风格,你应该没问题。 3v4l.org/FT8SR
猜你喜欢
  • 2017-02-02
  • 2015-08-26
  • 2016-06-07
  • 2021-03-07
相关资源
最近更新 更多