आप PHP में HttpOnly कुकी का उपयोग कैसे सेट करते हैं


93

मैं अपने PHP appsरूप में कुकीज़ कैसे सेट कर सकता हूं HttpOnly cookies?


stackoverflow.com/questions/528405/… ब्राउज़र समर्थन जानकारी है।
17

2
@Tchalvak नहीं, वर्तमान उत्तर अभी भी आधिकारिक हैं। 2008 से ही PHP में HTTP- केवल कुकी सेटिंग के बारे में कुछ भी नहीं बदला है। कौन सा ब्राउज़र HTTP- केवल कुकीज़ का समर्थन करता है एक अलग सवाल है, एक अलग जवाब के साथ।
लैनजेड

आप उपयोग कर सकते हैं $cookie->setHttpOnly(true);के साथ github.com/delight-im/PHP-Cookie
कांव-कांव

जवाबों:


92
  • के लिए अपने कुकीज़ , इस सवाल का जवाब देखें।
  • के लिए PHP के अपने सत्र कुकी ( PHPSESSIDडिफ़ॉल्ट रूप से), देखना @ रिची के जवाब

setcookie()और setrawcookie()काम करता है, शुरू की httponlyपैरामीटर, पीएचपी 5.2.0 के अंधेरे उम्र में वापस आ गया, यह अच्छा और आसान बना रही है। सिंटैक्स के अनुसार, 7 वें पैरामीटर को सही पर सेट करें

संक्षिप्तता के लिए फ़ंक्शन सिंटैक्स सरलीकृत

setcookie(    $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )

NULLउन मापदंडों के लिए दर्ज करें जिन्हें आप डिफ़ॉल्ट के रूप में रखना चाहते हैं। यदि आप secureपैरामीटर सेट करना चाहिए, तो आप इस पर भी विचार कर सकते हैं ।

यह पुराने, निचले स्तर के header()फ़ंक्शन का उपयोग करना भी संभव है:

header( "Set-Cookie: name=value; httpOnly" );

119

Apache पर PHP के अपने सत्र कुकीज़ के लिए:
इसे अपने Apache कॉन्फ़िगरेशन में जोड़ें या.htaccess

<IfModule php5_module>
    php_flag session.cookie_httponly on
</IfModule>

यह एक स्क्रिप्ट के भीतर भी सेट किया जा सकता है, जब तक कि इसे पहले कहा जाता है session_start()

ini_set( 'session.cookie_httponly', 1 );

9
+1 क्योंकि यह एक अच्छी बात है (सुरक्षा के लिए) जो आपके पूरे सर्वर पर है लेकिन इसके बजाय इसमें जोड़ा गया है php.ini
एंथनी हट्ज़ोपुलोस

10
कृपया ध्यान दें कि इसके बजाय php_flag का उपयोग किया जाना चाहिए: "बूलियन मान सेट करने के लिए php_value का उपयोग न करें। इसके बजाय php_flag का उपयोग किया जाना चाहिए।" php.net/manual/en/configuration.changes.php
Ondrej Machulda

@OndrejMachulda काम नहीं करने के php_valueलिए बदल रहा है php_flag। मैंने इसे अपने सर्वर पर आज़माया ..
Nate

6
@ नोट: जब बदलते हैं php_flag, तो आपको मान भी बदलना चाहिए - onया तो या off- मैनुअल देखें।
ओंद्रेज मचुल्दा

14

ध्यान दें कि PHP सत्र कुकीज़ httponlyडिफ़ॉल्ट रूप से उपयोग नहीं होती हैं ।

ऐसा करने के लिए:

$sess_name = session_name();
if (session_start()) {
    setcookie($sess_name, session_id(), null, '/', null, null, true);
}

नोट के कुछ आइटम यहाँ:

  • आपको session_name() पहले फोन करना होगाsession_start()
  • यह डिफ़ॉल्ट पथ को '/' के लिए भी निर्धारित करता है, जो ओपेरा के लिए आवश्यक है, लेकिन जो PHP सत्र कुकीज़ डिफ़ॉल्ट रूप से नहीं करते हैं।

11
php.net/manual/en/function.session-set-cookie-params.php यह कस्टम कोडिंग के बजाय उपरोक्त PHP फ़ंक्शन के माध्यम से स्वचालित रूप से किया जा सकता है।
रियानर

13

ध्यान रखें कि HttpOnly क्रॉस-साइट स्क्रिप्टिंग बंद नहीं करता है; इसके बजाय, यह एक संभावित हमले को बेअसर करता है, और वर्तमान में केवल IE (FireFox XmlHttpRequest में HttpOnly कुकीज़ को उजागर करता है, और सफारी इसे बिल्कुल भी सम्मान नहीं करता है)। हर तरह से, HttpOnly को चालू करें, लेकिन इसके लिए व्यापार में आउटपुट फ़िल्टरिंग और फ़ज़ परीक्षण के एक घंटे भी नहीं छोड़ें।


13
यह स्थिति अब '08, के बाद से बदल गई है। यहाँ एक अधिक वर्तमान / अद्यतन सूची है: stackoverflow.com/questions/528405/…
Kzqai




4

आप इसका उपयोग हेडर फ़ाइल में कर सकते हैं।

// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);

इस तरह से भविष्य के सभी सत्र कुकीज़ httponly का उपयोग करेंगे।

  • अपडेट किया गया।

2
बस FYI सेशन ।use_only_cookies डिफ़ॉल्ट रूप से PHP> 5.3 में है
निक कॉट्रेल

1
और सही है "सभी भविष्य के सत्र कुकीज़" httponly का उपयोग करेंगे, न कि कस्टम वाले ...
qdev

2

Php_flag कमांड का सही सिंटैक्स है

php_flag  session.cookie_httponly On

और जागरूक रहें, सर्वर से पहला उत्तर कुकी सेट करें और यहां (उदाहरण के लिए आप "HttpOn" निर्देश देख सकते हैं। इसलिए परीक्षण के लिए हर परीक्षण अनुरोध के बाद ब्राउज़र से कुकीज़ हटा दें।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.