使用会话中的id向数据库插入数据是否安全?

时间:2014-10-12 21:25:39

标签: php mysql security session

从这里开始:PHP $_SESSION is server side or local?我知道会话只是服务器端,客户端无法修改它。

所以我假设从数据库到客户端会话ID设置id是一种安全的方法,并将其作为标识插入到数据库中?

例如,我现在正在这样做以便在我的所有页面上进行识别:login.php

    $result = mysqli_query($con, "SELECT id, name, password FROM user_data WHERE email_address = '$email' AND status = '1'") or die(mysqli_error($con));

        $row = mysqli_fetch_assoc($result);

            if (password_verify($password, $row["password"])) {

                $userinfo = array();
                $userinfo['id'] = $row["id"];
                $userinfo['name'] = $row["name"];
                $_SESSION['userinfo'] = $userinfo;
                header ("Location: insert.php");    

            }

insert.php

$result = mysqli_query($con,"INSERT INTO client_data (`data`, `id`) VALUES ('$value', ".$_SESSION['userinfo']['id'].")");

1 个答案:

答案 0 :(得分:1)

$_SESSION['userinfo']['id']只有你做得安全。 信任其中的任何内容意味着信任所有可公开访问的PHP脚本才能正常工作,不可能滥用它们将$_SESSION['userinfo']['id']设置为令人讨厌的东西。

这真的很有信心。 我觉得这不算实惠。 特别是当使用准备好的陈述可以更安全地完成这项工作时。

if ($stmt = $mysqli->prepare("INSERT INTO client_data (`data`, `id`) VALUES (?, ?)")) {

    /* bind parameters for markers */
    $stmt->bind_param("s", $value);
    $stmt->bind_param("s", $_SESSION['userinfo']['id']);

    /* execute query */
    $stmt->execute();

    /* bind result variables */
    $stmt->bind_result($result);

    /* fetch value */
    $stmt->fetch();

    /* close statement */
    $stmt->close();
}

使用预准备语句还可以获得RDBMS优化查询的额外好处,使重复查询更快。