php設置cookie爲HttpOnly防止XSS攻擊

    什麼時XSS攻擊?    

    XSS攻擊(Cross Site Scripting)中文名爲跨站腳本攻擊,XSS攻擊時web中一種常見的漏洞。經過XSS漏洞能夠僞造目標用戶登陸,從而獲取登陸後的帳號操做。javascript

    網站帳號登陸過程當中的簡單步驟

    web網頁中在用戶登陸的時候,經過表單把用戶輸入的帳號密碼進行後臺數據庫的驗證,驗證經過後利用session會話進行用戶登陸後的判別是否登陸,在session的這個過程當中服務器會在服務器中寫入一個文件並記錄sessionid,而後也會在瀏覽器中設置cookie,保存sessionid,服務器和客戶端之間利用這個sessionid進行通訊識別。若是客戶端發送sessionid給服務器服務器沒有找到,則說明服務器中的這個文件已通過期刪除了。那用戶這邊就須要從新登陸了。php

    XSS攻擊的流程

    思路:經過獲取目標用戶登陸後的sessionid,保存到本身的電腦,而後在本身的電腦上設置獲取到的sessionid進行帳號登陸後的操做。經過sessionid僞造請求登陸,直接跳過帳號密碼登陸操做就能進去。html

    好比:java

        給目標用戶發送一個有吸引力的郵件,郵箱中包含一個連接,當用戶點擊連接跳轉到一個僞造的頁面,這個僞造的頁面中包含了獲取目標用戶瀏覽器中cookie的javascript代碼獲取到cookie中的sessionid後再傳送到攻擊者的服務器中;或者在站點中的可插入數據的地方進行在html中寫行內的javascript代碼執行操做(< IMG SRC="jav ascript:alert('XSS');" >;);還能夠當在一個公共wifi環境下,進行可帳號登陸操做,wifi路由器的管理員能夠經過抓包工具抓包直接抓包查看到你的sessionid,因此不要在公共wifi下進行敏感操做,是很不安全的。web

  httponly是微軟對cookie作的擴展。這個主要是解決用戶的cookie可能被盜用的問題。


       你們都知道,當咱們去郵箱或者論壇登錄後,服務器會寫一些cookie到咱們的瀏覽器,當下次再訪問其餘頁面時,因爲瀏覽器回自動傳遞cookie,這樣 就實現了一次登錄就能夠看到全部須要登錄後才能看到的內容。也就是說,實質上,全部的登錄狀態這些都是創建在cookie上的!假設咱們登錄後的 cookie被人得到,那就會有暴露我的信息的危險!固然,想一想,其餘人怎麼能夠得到客戶的cookie?那必然是有不懷好意的人的程序在瀏覽器裏運行! 若是是如今滿天飛的流氓軟件,那沒有辦法,httponly也不是用來解決這種狀況的,它是用來解決瀏覽器裏javascript訪問cookie的問 題。試想,一個flash程序在你的瀏覽器裏運行,就能夠得到你的cookie的!
    IE6的SP1裏就帶了對httponly的支持,因此相對還說仍是些安全性。數據庫

PHP中的設置 
 PHP5.2以上版本已支持HttpOnly參數的設置,一樣也支持全局的HttpOnly的設置,在php.ini中
 ----------------------------------------------------- 
 session.cookie_httponly = 
 ----------------------------------------------------- 
設置其值爲1或者TRUE,來開啓全局的Cookie的HttpOnly屬性,固然也支持在代碼中來開啓: 
 ----------------------------------------------------- 
 <?php
  ini_set("session.cookie_httponly", 1); 
 // or
  session_set_cookie_params(0, NULL, NULL, NULL, TRUE); 
 ?> 
 ----------------------------------------------------- 
Cookie操做函數setcookie函數和setrawcookie函數也專門添加了第7個參數來作爲HttpOnly的選項,開啓方法爲: 
 ------------------------------------------------------- 
 setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 
 setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
 ------------------------------------------------------- 
 對於PHP5.1之前版本以及PHP4版本的話,則須要經過header函數來變通下了: 
 ------------------------------------------------------------- 
 <?php
  header("Set-Cookie: hidden=value; httpOnly");
  ?> 
 -------------------------------------------------------------

 

相關文章
相關標籤/搜索