PHP页面安全性损坏

时间:2016-02-06 09:12:08

标签: php security

我将它放在导航文件的顶部,该文件包含在每个页面上:

if (!is_logged_in()){
        login_error_redirect();
}

以下是这个功能:

function is_logged_in(){
    if(isset($_SESSION['GBuser']) && $_SESSION['GBuser'] > 0){
        return true;
    }
        return false;
}

现在这种情况很有效,因为如果您尝试浏览受保护的页面,您将被重定向到登录页面,但由于某些原因,如果您提供GET请求,它不会适用,这样您就可以完全绕过整件事情。例如,刚刚注销(调用session_destroy();),我可以输入以下地址并删除项目:

../site/products.php?delete=20

我在这里缺少什么?该产品页面包含与上面的安全检查相同的导航文件,但是传入GET变量会因某种原因完全跳过它。

编辑:这里是products.php的顶部:

require_once $_SERVER['DOCUMENT_ROOT'].'/shopping/core/init.php';
include 'includes/head.php';
include 'includes/navigation.php';

//if the delete product button was clicked
if(isset($_GET['delete'])){
    $delete_id = (int)($_GET['delete']);
    $db->query("UPDATE products SET deleted = 1 WHERE id = '$delete_id'");
    header('Location: products.php');
}

在navigation.php的最顶部是检查:

if (!is_logged_in()){
        login_error_redirect();
}

1 个答案:

答案 0 :(得分:5)

假设login_error_redirect()实际重定向,您必须添加exit以在调用该函数后停止脚本。默认情况下,无论您是否在顶部重定向,PHP都将在页面上运行您的所有代码。

if (!is_logged_in()){
        login_error_redirect();
        exit;
}