簡體   English   中英

在 PHP 中的 PHPSESSID cookie 上設置 httpOnly 和安全

[英]Set httpOnly and secure on PHPSESSID cookie in PHP

在 PHPSESSID cookie 上設置 httponly 和安全標志的推薦方法是什么?

我找到了http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly 有什么更好的建議嗎?

謝謝

ini_set('session.cookie_httponly', 1);

有關PHP 文檔的更多信息

在我看來最好的是: 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 ]]]] )

我無法使用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 時,它​​的“發送對象”屬性設置為“僅加密連接”,其“過期”屬性設置為“會話結束時”。

PHP >=7.0以來更優雅的解決方案

session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);

會話開始

session_start 選項

我通過 HTTPS 使用 Apache httpd,設置session.cookie_httponly = 1 & session.cookie_secure = 1對我有用。

對於 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 文件中。

如果您使用的是 Apache,請在您的 .htaccess 上試試這個

php_value session.cookie_httponly 1

為此目的使用 .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 的人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM