建议的方法是在PHPSESSID cookie上设置httponly和安全标志吗?
我找到了http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly。还有更好的建议吗?
感谢
答案 0 :(得分:19)
ini_set('session.cookie_httponly', 1);
PHP文档上的
答案 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]);
答案 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的人