这个PHP登录功能安全吗?

时间:2009-10-20 20:10:57

标签: php login

我目前正在为我的登录系统重写我的函数脚本(PHP)。以下代码是否安全且是一种检查用户是否已登录的“好方法”?

    function loggedin()
    {
        $ID = ($_SESSION['ID']);
        $sql = "SELECT `online` FROM `users` WHERE `ID` = '$ID'";
        $result=mysql_query($sql);
        $count=mysql_num_rows($result);
        $row = mysql_fetch_array( $result );
        if ( $count== 1)
        {
            if ($_SESSION['ID'] && $_SESSION['session_id'])

            {
                if ( $row['online']== 1)
                    return 1;
            }
        }
        else
        {
            return 0;

        }
    }

3 个答案:

答案 0 :(得分:10)

Beware Bobby Tables!

$ID = mysql_real_escape_string($_SESSION['ID']);

使用mysql_real_escape_string()

转义所有输入参数

或者更好的是,使用参数化查询(MySQL)PDO

答案 1 :(得分:5)

绝对值得添加

session_regenerate_id(true);

阻止session fixation

所以这个

if ( $row['online']== 1)
    return 1;

成为这个:

if ( $row['online']== 1)
{
    session_regenerate_id(true);
    return 1;
}

答案 2 :(得分:2)

除了其他答案,请务必先检查会话是否存在。

function loggedin()
{
    if(!isset($_SESSION['ID'])) return 0;
    $ID = ($_SESSION['ID']);
    ..