PHP सत्र सुरक्षा

PHP के साथ जिम्मेदार सत्र सुरक्षा को बनाए रखने के लिए कुछ दिशानिर्देश क्या हैं? पूरे वेब पर जानकारी है और यह लगभग एक ही स्थान पर उतरा है!

0
जोड़ा संपादित
विचारों: 2

14 उत्तर

यहां मुझे लगता है कि आपको क्या करना है

WP 3.0 के साथ नए "मास्टर" डोमेन पर एक नया बहु साइट ब्लॉग बनाएं

एक नया खाली ब्लॉग बनाएं url h..p: //www.mysite.com/oldblogname

नए ब्लॉग में पुरानी साइट और इनपुट इनपोर्ट निर्यात करें

आपको यह जांचना होगा कि सभी छवियों को नई साइट पर कॉपी किया गया है अन्यथा पुरानी ब्लॉग को छवियों की सेवा के लिए रखें

और आपके पास अच्छा नया ब्लॉग होगा

इसे साफ रखने के लिए आपको पुराने यूआरएल से नए यूआरएल में 304 रीडायरेक्ट डालना चाहिए

इस तरह कुछ पुराने ब्लॉग फ़ोल्डर में .htacces फ़ाइल में (परीक्षण नहीं किया जाना चाहिए) चाहिए

RewriteEngine on
#
RewriteRule ^(.*)$ http://www.websiteA.com/oldblogname/ $1 [R=301,L]
1
जोड़ा

मुझे लगता है कि प्रमुख समस्याओं में से एक (जिसे PHP 6 में संबोधित किया जा रहा है) register_globals है। अभी register_globals से बचने के लिए उपयोग की जाने वाली मानक विधियों में से एक $ _ REQUEST , $ _ GET या $ _ POST </कोड का उपयोग करना है > सरणी

ऐसा करने के लिए "सही" तरीका (5.2 के रूप में, हालांकि यह थोड़ी छोटी गाड़ी है, लेकिन 6 के रूप में स्थिर है, जो जल्द ही आ रहा है) फ़िल्टर

तो इसके बजाए:

$username = $_POST["username"];

तुम करोगे:

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

या यहां तक ​​कि बस:

$username = filter_input(INPUT_POST, 'username');
0
जोड़ा
मैं सहमत हूं, यह पूरी तरह से प्रश्न का उत्तर नहीं देता है, लेकिन यह निश्चित रूप से प्रश्न के उत्तर का हिस्सा है। दोबारा, यह स्वीकार किए गए उत्तर में एक बुलेट बिंदु बाहर निकलता है, "रजिस्टर ग्लोबल्स का उपयोग न करें"। यह बताता है कि इसके बजाय क्या करना है।
जोड़ा लेखक cmcculloh, स्रोत
वास्तव में? फिर क्यों स्वीकार किए गए उत्तर में वे पंजीकरण ग्लोबल्स का उपयोग न करने का उल्लेख करते हैं? नहीं, जहां तक ​​अधिकांश रन-ऑफ-द-मिल डेवलपर्स का संबंध है, "सत्र" की छतरी के नीचे ग्लोबल्स और फॉर्म वेरिएबल हैंडलिंग पतन पंजीकृत करें, भले ही यह तकनीकी रूप से "सत्र" ऑब्जेक्ट का हिस्सा न हो?
जोड़ा लेखक cmcculloh, स्रोत
इस सवाल का कोई संबंध नहीं है।
जोड़ा लेखक The Pixel Developer, स्रोत
-1 यह सवाल का जवाब नहीं देता है।
जोड़ा लेखक Tomas, स्रोत

सत्र के सुरक्षा स्तर में हर बार session_regenerate_id को कॉल करने के लिए एक दिशानिर्देश है। यह सत्र अपहरण को रोकने में मदद करता है।

0
जोड़ा

मैं आईपी और उपयोगकर्ता एजेंट दोनों को यह देखने के लिए जांचूंगा कि वे बदलते हैं या नहीं

if ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']
    || $_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'])
{
    //Something fishy is going on here?
}
0
जोड़ा
@scotts मैं आईपी भाग से सहमत हूं लेकिन ब्राउज़र अपग्रेड के लिए, जब आप लॉगिन करते हैं तो आप सत्र सेट करेंगे, इसलिए मुझे नहीं पता कि वे फिर से लॉगिन करने के बाद एक नया सत्र बनाये बिना ब्राउज़र को अपग्रेड कैसे करेंगे।
जोड़ा लेखक JasonDavis, स्रोत
@jasondavis क्रोम नामक ब्राउज़र है।
जोड़ा लेखक Pacerier, स्रोत
मेरा मानना ​​है कि IE8 में संगत मोड के बीच टॉगलिंग करते समय user_agent भी बदल सकता है। नकली के लिए यह भी बहुत आसान है।
जोड़ा लेखक Heather Herbert, स्रोत
यदि उपयोगकर्ता लोड-संतुलित प्रॉक्सी फार्म के पीछे है तो आईपी वैध रूप से बदल सकता है।
जोड़ा लेखक Kornel, स्रोत
हां लेकिन उन उपयोगकर्ताओं के बारे में क्या है जिनके पास स्थिर आईपी ईक जीएसएम था और हर आधे घंटे में बदल दिया गया है। तो, सत्र + होस्ट नाम में संग्रहीत आईपी, जब आईपी! = REMOTE_ADDR होस्ट होस्ट करें और hostanmes eq की तुलना करें। 12.12.12.holand.nl-> holand.nl == सच कब है। लेकिन कुछ होस्टों में आईपी आधारित होस्टनाम था तो मास्क 88.99.XX.XX की तुलना करने की आवश्यकता है
जोड़ा लेखक user956584, स्रोत
और उपयोगकर्ता जब भी उपयोगकर्ता अपने ब्राउज़र को अपग्रेड करता है तो उपयोगकर्ता_गेंट बदल सकता है।
जोड़ा लेखक scotts, स्रोत

अपने सत्र को सुरक्षित रखने के लिए कुछ चीजें करने के लिए कुछ कर रहे हैं:

  1. उपयोगकर्ताओं को प्रमाणीकृत करने या संवेदनशील संचालन करने के दौरान SSL का उपयोग करें।
  2. सुरक्षा स्तर में परिवर्तन होने पर सत्र आईडी पुन: उत्पन्न करें (जैसे लॉग इन करना)। यदि आप चाहें तो आप हर अनुरोध सत्र सत्र को पुन: उत्पन्न कर सकते हैं।
  3. सत्र समय समाप्त करें
  4. रजिस्टर ग्लोबल्स का उपयोग न करें
  5. सर्वर पर प्रमाणीकरण विवरण स्टोर करें। यही है, कुकी में उपयोगकर्ता नाम जैसे विवरण न भेजें।
  6. $ _ सर्वर ['HTTP_USER_AGENT'] जांचें। यह सत्र अपहरण के लिए एक छोटा बाधा जोड़ता है। आप आईपी पता भी देख सकते हैं। लेकिन इससे उन उपयोगकर्ताओं के लिए समस्याएं आती हैं जिनके पास एकाधिक इंटरनेट कनेक्शन आदि पर लोड संतुलन के कारण आईपी पता बदल रहा है (जो हमारे पर्यावरण में मामला है)।
  7. फ़ाइल सिस्टम पर सत्रों तक पहुंच को लॉक करें या कस्टम सत्र हैंडलिंग का उपयोग करें
  8. संवेदनशील संचालन के लिए उपयोगकर्ताओं को अपने स्वाभाविक विवरण फिर से प्रदान करने के लिए लॉग इन करने की आवश्यकता पर विचार करें
0
जोड़ा
यदि आप सत्र आईडी को पुन: उत्पन्न करते हैं तो सत्र आईडी जो एक हमलावर गैर-HTTPS अनुरोध पर चोरी करता है वह बेकार है।
जोड़ा लेखक grom, स्रोत
@ द रूक, यह एक मामूली बाधा हो सकता है (हमलावर पीड़ित के उपयोगकर्ता-एजेंट को अपनी साइट का उपयोग कर कैप्चर कर सकता है) और अस्पष्टता के माध्यम से सुरक्षा पर निर्भर करता है लेकिन यह अभी भी एक अतिरिक्त बाधा है। यदि उपयोगकर्ता-एजेंट HTTP सत्र सत्र के दौरान बदलना था, तो यह बेहद संदिग्ध होगा और अधिकतर हमले का हमला होगा। मैंने कभी नहीं कहा कि आप इसे अकेले इस्तेमाल कर सकते हैं। यदि आप इसे अन्य तकनीकों के साथ जोड़ते हैं तो आपके पास एक और अधिक सुरक्षित साइट है।
जोड़ा लेखक grom, स्रोत
@ द रूक, हाँ उपयोगकर्ता एजेंट को धोखा दिया जा सकता है। यह सिर्फ एक छोटा सा बाधा है। और किसी भी समय कुकी पर http को लीक किया जा सकता है इसका मतलब क्या है। हां इसे चोरी किया जा सकता है। http सादा पाठ है।
जोड़ा लेखक grom, स्रोत
@grom क्या क्रोम ब्राउजर में चुपचाप अपग्रेड करते समय क्रोम अपने उपयोगकर्ता-एजेंट को स्वचालित रूप से बदलता नहीं है जब उपयोगकर्ता ब्राउज़र का उपयोग कर रहा है? इस तरह आप वास्तविक उपयोगकर्ताओं को वास्तविक वास्तविक कारण के लिए अवरुद्ध कर रहे हैं। यह न भूलें कि बढ़ी उपयोगिता भी सुरक्षा बढ़ा दी गई है।
जोड़ा लेखक Pacerier, स्रोत
@grom मुझे लगता है कि यह आपके दरवाजे पर स्कॉच टेप का एक टुकड़ा डालने जैसा है और कह रहा है कि यह लोगों को तोड़ने से रोक देगा।
जोड़ा लेखक rook, स्रोत
@grom केवल एक ही बाधा आपके दिमाग में है, आप कोई हमला नहीं रोक रहे हैं।
जोड़ा लेखक rook, स्रोत
अरे, मैं चाहता हूं कि मैं आपको एसएसएल के उपयोग के लिए एक और -1 दे सकता हूं। ओटीएएसपी ए 3 में रखी गई, http पर कुकी को लीक नहीं किया जा सकता है।
जोड़ा लेखक rook, स्रोत
-1 उपयोगकर्ता एजेंट धोखा देने के लिए तुच्छ है। आप कचरे कोड का वर्णन कर रहे हैं और एक सुरक्षा प्रणाली नहीं है।
जोड़ा लेखक rook, स्रोत
केवल कुछ परिचालनों के लिए एसएसएल का उपयोग करना पर्याप्त नहीं है, जब तक कि आपके पास एन्क्रिप्टेड और अनएन्क्रिप्टेड ट्रैफ़िक के लिए अलग-अलग सत्र न हों। यदि आप HTTPS और HTTP पर एकल सत्र का उपयोग करते हैं, तो हमलावर इसे पहले गैर-HTTPS अनुरोध पर चुरा लेगा।
जोड़ा लेखक Kornel, स्रोत
प्रत्येक अनुरोध पर सत्र पुन: उत्पन्न न करें। यह दौड़ की स्थिति के लिए अतिसंवेदनशील है और आप जल्दी या बाद में सत्र खो देंगे।
जोड़ा लेखक Kornel, स्रोत
मैं PorneL से सहमत हूँ। साथ ही, संख्या 6 के लिए, यदि किसी हमलावर के पास आपका सत्र आईडी है, तो क्या उनके पास आपके उपयोगकर्ता एजेंट तक पहुंच नहीं होगी?
जोड़ा लेखक Chad, स्रोत
यदि आप उपयोगकर्ता एजेंट की जांच कर रहे हैं, तो आप IE8 उपयोगकर्ताओं से सभी अनुरोधों को अवरुद्ध कर देंगे जब वे संगतता मोड टॉगल करते हैं। देखें कि मैंने इस समस्या को अपने कोड में ट्रैक किया था: serverfault.com/questions/200018/ http-302-समस्या-ऑन-IE7 । मैं उपयोगकर्ता एजेंट को चेक आउट कर रहा हूं, क्योंकि यह धोखा देने के लिए इतनी छोटी चीज है, जैसा कि अन्य ने कहा है।
जोड़ा लेखक bestattendance, स्रोत

यह बहुत छोटा और स्पष्ट है, लेकिन प्रत्येक उपयोग के बाद session_destroy सुनिश्चित करना सुनिश्चित करें। यदि उपयोगकर्ता स्पष्ट रूप से लॉग आउट नहीं करता है तो इसे कार्यान्वित करना मुश्किल हो सकता है, इसलिए ऐसा करने के लिए एक टाइमर सेट किया जा सकता है।

SetTimer() पर एक अच्छा ट्यूटोरियल है और clearTimer ()।

0
जोड़ा

आईपी ​​पते का उपयोग करना मेरे अनुभव में वास्तव में सबसे अच्छा विचार नहीं है। उदाहरण के लिए; मेरे कार्यालय में दो आईपी पते हैं जो लोड के आधार पर उपयोग किए जाते हैं और हम लगातार आईपी पते का उपयोग करके मुद्दों में भाग लेते हैं।

इसके बजाय, मैंने अपने सर्वर पर डोमेन के लिए अलग डेटाबेस में सत्रों को संग्रहीत करने का विकल्प चुना है। इस तरह फ़ाइल सिस्टम पर किसी भी उस सत्र की जानकारी तक पहुंच नहीं है। यह 3.0 से पहले phpbb के साथ वास्तव में सहायक था (उन्होंने इसे ठीक करने के बाद से) लेकिन यह अभी भी एक अच्छा विचार है जो मुझे लगता है।

0
जोड़ा

मेरे दो (या अधिक) सेंट:

  • किसी पर भरोसा नहीं करें
  • फ़िल्टर इनपुट, से बचने का आउटपुट (कुकी, सत्र डेटा भी आपका इनपुट है)
  • एक्सएसएस से बचें (अपना एचटीएमएल अच्छी तरह से बनाए रखें, PHPTAL या HTMLPurifier )
  • गहराई में रक्षा
  • डेटा का पर्दाफाश न करें

इस विषय पर एक छोटी लेकिन अच्छी किताब है: क्रिस शिफ्टलेट द्वारा आवश्यक PHP सुरक्षा ।

आवश्यक PHP सुरक्षा http://shiflett.org/images/essential-php-security-small.png</एक>

पुस्तक के होम पेज पर आपको कुछ रोचक कोड उदाहरण और नमूना अध्याय मिलेंगे।

You may use technique mentioned above (IP & UserAgent), described here: How to avoid identity theft

0
जोड़ा
एक्सएसएस-रोकथाम के लिए +1। इसके बिना सीएसआरएफ के खिलाफ सुरक्षा करना असंभव है, और इस प्रकार कोई भी सत्र आईडी प्राप्त किए बिना सत्र में "सवारी" कर सकता है।
जोड़ा लेखक Kornel, स्रोत

यदि आप session_set_save_handler() का उपयोग करते हैं अपना खुद का सत्र हैंडलर सेट कर सकते हैं। उदाहरण के लिए आप डेटाबेस में अपने सत्र स्टोर कर सकते हैं। डेटाबेस सत्र हैंडलर के उदाहरणों के लिए php.net टिप्पणियों का संदर्भ लें।

डीबी सत्र भी अच्छे हैं यदि आपके पास एकाधिक सर्वर हैं अन्यथा यदि आप फ़ाइल आधारित सत्रों का उपयोग कर रहे हैं तो आपको यह सुनिश्चित करना होगा कि प्रत्येक वेबसर्वर को सत्रों को पढ़ने / लिखने के लिए एक ही फाइल सिस्टम तक पहुंच हो।

0
जोड़ा

This session fixation paper has very good pointers where attack may come. See also session fixation page at Wikipedia.

0
जोड़ा

php.ini

session.cookie_httponly = 1
change session name from default PHPSESSID

eq अपाचे हेडर जोड़ें:

X-XSS-Protection    1
0
जोड़ा
ध्यान रखें कि X-XSS-Protection वास्तव में बिल्कुल उपयोगी नहीं है। असल में, सुरक्षा एल्गोरिदम का वास्तव में शोषण किया जा सकता है, जिससे इसे पहले से भी बदतर बना दिया जा सकता है।
जोड़ा लेखक Pacerier, स्रोत
क्या आप विस्तार से समझा सकते हैं?
जोड़ा लेखक domino, स्रोत
httpd.conf -> शीर्षलेख सेट एक्स-एक्सएसएस-सुरक्षा "1" </ FilesMatch>
जोड़ा लेखक user956584, स्रोत

PHP सत्र और सुरक्षा (सत्र अपहरण के अलावा) के साथ मुख्य समस्या यह है कि आप किस वातावरण में हैं। डिफ़ॉल्ट रूप से PHP ओएस की अस्थायी निर्देशिका में फ़ाइल में सत्र डेटा संग्रहीत करता है। किसी भी विशेष विचार या योजना के बिना यह एक विश्व पठनीय निर्देशिका है, इसलिए आपकी सभी सत्र जानकारी सर्वर तक पहुंच वाले किसी भी व्यक्ति के लिए सार्वजनिक है।

कई सर्वरों पर सत्र बनाए रखने के लिए। उस बिंदु पर PHP को उपयोगकर्ता हैंडल किए गए सत्रों में स्विच करना बेहतर होगा जहां यह आपके प्रदत्त कार्यों को सत्र डेटा (सीआरयूडी, बनाएं, अपडेट करें, हटाएं) हटाएं। उस बिंदु पर आप सत्र जानकारी को डेटाबेस या मेमकैच जैसे समाधान में संग्रहीत कर सकते हैं ताकि सभी एप्लिकेशन सर्वरों के पास डेटा तक पहुंच हो।

यदि आप किसी साझा सर्वर पर हैं तो अपने स्वयं के सत्रों को संग्रहीत करना फायदेमंद भी हो सकता है क्योंकि यह आपको उस डेटाबेस में संग्रहीत करने देगा जिससे आप अक्सर फाइल सिस्टम पर अधिक नियंत्रण रखते हैं।

0
जोड़ा

आपको यह सुनिश्चित करना होगा कि सत्र डेटा सुरक्षित है। अपने php.ini को देखकर या phpinfo() का उपयोग करके आप सत्र सेटिंग्स पा सकते हैं। _session.save_path_ आपको बताता है कि वे कहां से सहेजे गए हैं।

फ़ोल्डर और उसके माता-पिता की अनुमति की जांच करें। यह सार्वजनिक (/ tmp) नहीं होना चाहिए या आपके साझा सर्वर पर अन्य वेबसाइटों द्वारा पहुंचा जा सकता है।

मान लीजिए कि आप अभी भी PHP सत्र का उपयोग करना चाहते हैं, आप _session.save_path_ को बदलकर किसी अन्य फ़ोल्डर का उपयोग करने के लिए PHP सेट कर सकते हैं या _session.save_handler_ को बदलकर डेटाबेस में डेटा को सहेज सकते हैं।

आप अपने php.ini में _session.save_path_ सेट कर सकते हैं (कुछ प्रदाता इसे अनुमति देते हैं) या apache + mod_php के लिए, आपकी साइट रूट फ़ोल्डर में .htaccess फ़ाइल में: php_value session.save_path "/home/example.com/html/session" । आप इसे _session_save_path() _ के साथ रन टाइम पर भी सेट कर सकते हैं।

क्रिस शिफ्टलेट का ट्यूटोरियल या Zend_Session_SaveHandler_DbTable

0
जोड़ा

मैंने अपने सत्रों को इस तरह स्थापित किया-

लॉग इन पेज पर:

$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR']);

(एक विन्यास पृष्ठ पर परिभाषित वाक्यांश)

फिर शीर्षलेख पर जो शीर्ष साइट पर है:

session_start();
if ($_SESSION['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR'])) {       
    session_destroy();
    header('Location: http://website login page/');
    exit();     
}
0
जोड़ा