提问人:Cesar Bielich 提问时间:2/10/2020 更新时间:2/10/2020 访问量:794
注意:未定义的索引:在会话变量上可以忽略吗?
Notice: Undefined index: on session variables possible to ignore?
问:
背景故事
我曾经在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) {
答:
1赞
Nick
2/10/2020
#1
您可以使用error_reporting
关闭级别错误:Notice
error_reporting(error_reporting() & ~E_NOTICE);
但从长远来看,最好使用 Null Coalescing 运算符之类的东西来修复代码??
if (($_SESSION['user_logged_in'] ?? false) != true) {
评论
0赞
Cesar Bielich
2/10/2020
但是,如果有的话,简单地忽略这些错误是否涉及任何安全风险?
0赞
Nick
2/10/2020
@CesarBielich问题是,如果你比较一个未定义的变量,它不严格等于(例如),它将通过,这可能会导致你的代码认为有人登录了,这将是一个安全问题。只要你不使用这种编程风格,你应该没问题。3v4l.org/FT8SRfalse
$_SESSION['user_logged_in'] !== false
评论