2010-11-15 6 views
21

क्या कोई परिदृश्य है जहां कोई ग्राहक/उपयोगकर्ता/हैकर $_SESSION स्वयं चर सेट कर सकता है (सर्वर कंप्यूटर पर चल रहे दुर्भावनापूर्ण सॉफ़्टवेयर को छोड़कर। मैं ज्यादातर ब्राउज़र के माध्यम से मतलब करता हूं)?

कारण मैं पूछता हूं कि this question की वजह से मैंने कुछ दिन पहले पूछा था। तब से मैं इस विषय पर बहुत उलझन में हूं, लेकिन मुझे सत्र निर्धारण और अपहरण का बेहतर विचार मिला है।

इसे जितना संभव हो सके इसे रखने के लिए, यदि मैं isset($_SESSION['validated']) जैसे कुछ पेज को मान्य करता हूं, तो क्या यह सुरक्षित है?

उत्तर

18

हां यदि आप $_SESSION वैरिएबल को सीधे फ़िल्टर किए गए उपयोगकर्ता इनपुट को असाइन कर रहे थे।

जो मुझे मेरे बिंदु पर लाता है: उपयोगकर्ता से ट्रस्ट इनपुट न करें। कभी

यदि आप वास्तव में इनपुट फ़िल्टर कर रहे हैं, तो मुझे नहीं लगता कि यह कैसे किया जा सकता है।

+10

दरअसल, (वेब ​​प्रोग्रामर की ओर से संवेदनशीलता संभालने) यह नहीं कर सका। '$ _SESSION' के लिए डेटा सर्वर पर ही रखा जाता है, और इसे कुकी के रूप में संग्रहीत कुंजी द्वारा देखा जाता है। वास्तव में '$ _SESSION' में डेटा को अनुमति देने का कोई तरीका नहीं है, लेकिन उपयोगकर्ता संभवतः किसी अन्य सत्र की सत्र आईडी अनुमान लगा सकता है और उपयुक्त सत्र कुकी भेज सकता है। लेकिन सभी उद्देश्यों और उद्देश्यों के लिए, आपके लिए (वेब ​​प्रोग्रामर), वे बिल्कुल दूसरे उपयोगकर्ता के समान होंगे, इसलिए वैसे भी उनके खिलाफ सुरक्षा करने की आपकी ज़िम्मेदारी नहीं है। Firesheep (http://codebutler.github.com/firesheep/) वह करता है। – Ashe

+0

@ आर्लन - यदि आपने मेरे संपादन पर एक नज़र डाली है, तो यही वह जवाब है जिसे मैं पूछे गए दूसरे प्रश्न में ढूंढ रहा था। कुछ प्रतिनिधि वहां पकड़ने के लिए तैयार हैं। – Ben

+0

और यदि आप लोगों को अपनी आरएसए निजी कुंजी देते हैं, तो आरएसए एन्क्रिप्शन टूटा हुआ है ... –

-1

हां, यह संभव है। विकिपीडिया या Google पर और अन्य सामान्य सुरक्षा समस्या Session fixation पढ़ें - वेब इसके बारे में लेखों से भरा है।

+0

उहह ... उस आलेख में वाक्यांश हैं जैसे "हमलावर और पीड़ित एक वेब होटल साझा करते हैं" और "एक ही सत्र के राज्यों को हिलाएं लेकिन जहां उपयोग भिन्न होता है, अस्पष्टता और दौड़ की स्थिति पैदा करता है "।लेकिन मुझे तुम्हारा अंक मिलता है और चारों ओर देखेगा। – Ben

+4

सुनिश्चित नहीं है कि सत्र विषाक्तता यहां प्रासंगिक है। वे भाषा अज्ञेय कोडिंग समस्याएं हैं जिन्हें असंतुलित उपयोगकर्ता इनपुट का उपयोग करके सत्र चर निर्दिष्ट करने के साथ करना है। इस तथ्य का तथ्य यह है कि ग्राहकों के लिए $ _SESSION तक पहुंचने का कोई तरीका नहीं है। आपके आवेदन को उनके लिए यह करना है। चाहे आप इसे अनुमति दें या नहीं, यहां एक अलग मुद्दा है। आप प्रत्यक्ष उपयोगकर्ता मैनिपुलेशन से सुरक्षित होने के लिए $ _SESSION पर भरोसा कर सकते हैं, जैसे कि आप भरोसा कर सकते हैं कि आपकी वेब रूट के बाहर की फ़ाइलों को सीधे उपयोगकर्ताओं द्वारा एक्सेस नहीं किया जा सकता है, जब तक कि आप इसे अनुमति देने के लिए कोई तरीका लागू नहीं करते। –

1

मुझे नहीं लगता कि जब तक उपयोगकर्ता के पास सर्वर तक पहुंच न हो, तब तक $ _SESSION वैरिएबल को बदला नहीं जा सकता है, न कि वे इसे बदल नहीं सकते हैं, लेकिन वेरिएबल्स को फ़िल्टर करना या इसकी सफाई करना अनुशंसा की जाती है यदि यह उपयोगकर्ता में प्रवेश करता है।

+1

आपको सवालों का जवाब देते समय शायद अनुमान नहीं लगाया जाना चाहिए, खासकर क्योंकि ओपी का सवाल निजी उपयोगकर्ता डेटा से संबंधित हो सकता है – vqdave

0

मुझे इस सवाल को काफी समझ में नहीं आता है, लेकिन यह सवाल मुझे लगता है कि आप क्या करना चाहते हैं इसके बारे में बताते हैं।

सुनिश्चित करें कि आप jQuery शामिल हैं।

कोड:

<html> 
<head> 
    <title>Tab name</title> 
    <meta charset = "UTF-8" /> 
    <script type = "text/javascript" src = "http://code.jquery.com/jquery-1.1.13.min.js"></script> 
    <script type = "text/javascript" src = "script.js"></script> 
</head> 
<body> 
</body> 

</html> 

फिर एक फ़ाइल addsession.php कहा जाता हैं।

addsession.php के लिए कोड:

<?php session_start(); ?> 
<?php 
    if(isset($_POST["name"])){ 
    $name = $_POST["name"]; 
    } else { 
    print '<p style = "color: red; font-weight: bold;">Name not defined!</p>' . "\n"; 
    $name = "unknownsessionvariable"; 
    } 
    if(isset($_POST["value"])){ 
    $value = $_POST["value"]; 
    } else { 
    $value = ""; 
    } 
    $_SESSION[name] = value; 
?> 

script.js के लिए कोड:

function session(name, value){ 
    $.post(addsession.php, {"name" : name, "value" : value}); 
    window.location.reload(); // This line maybe should be here depending on what you are doing. 
} 
$(document).ready(function(){ 
    session("sessvar", "supervalue"); 
}); 

उदाहरण कोड का टुकड़ा:

function session(name, value){ 
 
    $.post("http://www.eastonwerling.com/addsession.php", {"name" : name, "value" : value}); 
 
    //window.location.reload(); 
 
$(document).ready(function(){ 
 
    session("sessvar", "supervalue"); 
 
});
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> 
 
<p>This example depends on www.eastonwerling.com (my website).</p>

संबंधित मुद्दे