在PHP中设置httpPnly并保护PHPSESSID cookie

时间:2011-07-25 20:23:07

标签: php security session-cookies

建议的方法是在PHPSESSID cookie上设置httponly和安全标志吗?

我找到了http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly。还有更好的建议吗?

感谢

8 个答案:

答案 0 :(得分:19)

ini_set('session.cookie_httponly', 1);
PHP文档上的

more information here

答案 1 :(得分:18)

我无法获得使用session_set_cookie_params(...)的安全标记,因此我所做的是,在session_start()设置PHPSESSID Cookie后,我将其重置为setcookie(...)。最后一个参数true,使cookie具有安全标记。

<?php  
session_start();  
$currentCookieParams = session_get_cookie_params();  
$sidvalue = session_id();  
setcookie(  
    'PHPSESSID',//name  
    $sidvalue,//value  
    0,//expires at end of session  
    $currentCookieParams['path'],//path  
    $currentCookieParams['domain'],//domain  
    true //secure  
);  
?>

当我在Firefox中检查PHPSESSID cookie时,其“发送”属性设置为“仅限加密连接”,其“过期”属性设置为“会话结束时”。

答案 2 :(得分:12)

在我看来,最好的是:http://www.php.net/manual/en/function.session-set-cookie-params.php

void session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]] )

答案 3 :(得分:2)

我通过HTTPS使用Apache httpd,设置session.cookie_httponly = 1&amp; session.cookie_secure = 1适合我。

答案 4 :(得分:2)

对于WordPress网站,我使用以下PHP代码对其进行了修复:

add_action('init', 'start_session', 1);
function start_session() {
    if(!session_id()) {
        session_start();
        $currentCookieParams = session_get_cookie_params();
        $sidvalue = session_id();
        setcookie(
            'PHPSESSID',//name
            $sidvalue,//value
            0,//expires at end of session
            $currentCookieParams['path'],//path
            $currentCookieParams['domain'],//domain
            true //secure
        );
    }
}

add_action('wp_logout','end_session');
add_action('wp_login','end_session');
function end_session() {
    session_destroy();
}

将代码粘贴到functions.php文件中。

答案 5 :(得分:2)

PHP> = 7.0

以来的更优雅的解决方案
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);

session_start

session_start options

答案 6 :(得分:0)

如果您使用的是Apache,请在.htaccess

上试试
php_value session.cookie_httponly 1

答案 7 :(得分:0)

为此目的使用.htaccess只会减慢您的应用程序的速度。

我认为最好在主配置文件(例如config.php)或主包含文件(例如global.php)中添加此代码段

    // Prevents javascript XSS attacks aimed to steal the session ID
    ini_set('session.cookie_httponly', 1);

    // Prevent Session ID from being passed through  URLs
    ini_set('session.use_only_cookies', 1);

如果您使用https://而不是http://,那么也可以

     // Uses a secure connection (HTTPS) 
     ini_set('session.cookie_secure', 1); 

此方法也适用于无法访问php.ini的人