缺少HTTPOnly和Secure屬性解決方案


重新設置了WEB服務器之后,發現一些賬號無法登陸

服務器是用 apt 方式安裝的 Apache2 + php-fpm

1. 之前懷疑是 302 重定向到問題,但是 a2enmod/a2dismod rewrite 之后,均無法解決此問題。

2. 用chrome登陸一個文件管理器,由於單個文件好調試,F12之后,

3. F12之后,發現全是英文,經過一番摸索,終於設置到了 中文。

4. 偶爾發現響應頭中有個黃色的三角符號,吃驚之余看到 

set-cookie:;HttpOnly;Secure

這不就是 mod_headers模塊的問題嗎?可能是Apache2版本的問題,導致之前虛擬機中設置的header在當前版本中存在語法問題。

到這里問題是找到了,先了解一下 Cookie安全相關屬性

HttpOnly :將HttpOnly 設置為true ,通過程序(JS腳本、Applet等)將無法讀取到Cookie信息,防止程序獲取cookie后進行攻擊。

Secure :設置了Secure (沒有值),則只有當使用https協議連接時cookie才可以被頁面訪問,防止信息在傳遞的過程中被監聽捕獲后信息泄漏。

打開虛擬機相關的配置文件,看到一行

Header edit Set-Cookie ^(.*)$ ;HttpOnly;Secure

看起來沒問題,谷歌搜索之后,發現還是有語法問題,少了紅色的 $1 ,可能是Apache設置引起的差異。

Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

5. 給 Header edit Set-Cookie ^(.*)$ ;HttpOnly;Secure 增加了  $1 問題解決,

    程序的問題就是這個神奇,程序員為什么會猝死,為什么是吃青春飯的,由此可得到答案,實在比在放大鏡下面看蚊子的牛牛還艱辛。

遠離IT,則人生幸福

6. 這問題在PHP、nginx也可以處理。

    PHP

php.ini 文件開啟以下兩行,默認大概位於 1390左右

session.cookie_httponly=true
session.cookie_secure =

或者在 php 代碼中使用 ini_set 函數設置

@ini_set('session.cookie_httponly',   'On');
@ini_set('session.cookie_secure',      'On');
@ini_set('session.use_only_cookies', 'On');

 

    Nginx

Nginx.conf 文件中設置 http{ } 或 server{ }
add_header Set-Cookie "HttpOnly";
add_header Set-Cookie "Secure";

 

到此,問題已經基本處理完畢,在此做個記錄,以裨益網友

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM