2011-02-09 12 views
5

बस मेरी वेबसाइट पर कुछ सुरक्षा करने की कोशिश कर रहा है और आईडी को सुरक्षित करने के लिए सबसे अच्छा मार्ग जानने का प्रयास कर रहा है।यूआरएल स्ट्रिंग में एक आईडी एन्क्रिप्ट/एन्कोडिंग

उदाहरण: http://localhost/page.php?id=90 के लिए: http://localhost/share/22349234987sdsdf9sdf87423498asf9

मैं htaccess उपयोग कर रहा हूँ शेयर योगदान दें। लेकिन '9 0' को छिपाना और किसी भी प्रतिक्रिया को प्राप्त करने और प्राप्त करने के लिए यादृच्छिक संख्याओं को जोड़ने से किसी को हतोत्साहित करने का प्रयास करना चाहते हैं।

इस तरह कुछ बनाने के तरीके पर कोई विचार, या यदि कुछ पहले से मौजूद है जो कार्यान्वयन के साथ अच्छी तरह से काम करता है?

सुरक्षा एक कारक,

+0

यह कैसे नहीं करता? यह एक साधारण आईडी दिखा रहा है, जो कोई भी बदल सकता है ... – Justin

+0

@ जस्टिन: तो क्या? आप यहां 'आईडी' को बदल सकते हैं। इसके साथ कोई समस्या है? – zerkms

उत्तर

3

आईडी छिपाना अस्पष्टता है, सुरक्षा नहीं।

यदि आप अच्छी अस्पष्टता चाहते हैं, तो PHP में mcrypt फ़ंक्शंस देखें। एन्कोडिंग और डिकोडिंग से पहले नमक को जोड़ना सुनिश्चित करें, अन्यथा एन्क्रिप्शन/डिक्रिप्शन अनुमान लगाना आसान होगा।

और ध्यान रखें कि कोई भी अन्य अभी भी आपके यूआरएल में ठोकर खा सकता है, इसे पूरी तरह से हरा सकता है। अगर आप सुरक्षा चाहते हैं तो मैं एचटीटीपीएस पर HTTP एथ के कुछ रूपों का भी उपयोग करूंगा।

+0

हां मैंने इसे एक HTTPS संरचना पर लागू किया है, केवल इसलिए कि मैं सोच रहा था कि आईडी को 'अस्पष्ट' कैसे करना है। मैं आईडी MCrypt में और अधिक देखेंगे। धन्यवाद – Justin

2

है तो बस वहाँ बाहर सबसे अच्छा समाधान खोजने की कोशिश कर ... कार्यान्वित मेरा एक दोस्त वर्तमान सत्र टोकन और CSRF को रोकने के लिए एक रहस्य के साथ सभी प्राप्त अनुरोधों पर हस्ताक्षर करने के एक तरीके के हमला करता है।

लेकिन आप जो करने का प्रयास कर रहे हैं वह एक यूआरएल है जिसे आप अन्य लोगों के साथ साझा कर सकते हैं।

आप मूल यूआरएल जैसा एमडी 5 हैश बना सकते हैं, और दोनों डेटाबेस में सहेज सकते हैं।

अब जब/share/someLongId खोला जाता है, तो आप डेटाबेस में जांच सकते हैं कि कौन सा यूआरएल हैश है और उपयोगकर्ता को उस यूआरएल पर रीडायरेक्ट कर सकता है।

एक और संभावना है कि पहले स्थान पर स्वत: वृद्धि आईडी के बजाय GUID का उपयोग करें। इस तरह सभी आईडी बस लंबी हैं और अनुमान लगाना आसान नहीं है।

1

यदि आप इसे (यूआरएल) लगातार या नहीं होने की जरूरत पर निर्भर करता है, है न ठंड या तो:

गैर लगातार:

function getLink($id) { 
    $random = md5(uniqid()); 
    $_SESSION['links'][$random] = $id; 
    return "http://localhost/share/$random"; 
} 
echo getLink(10); 

और उसके बाद:

कुछ इस तरह करते हैं
function getTrueId($id) { 
    if(isset($_SESSION['links'][$id]) { 
    return $_SESSION['links'][$id]; 
    } else { 
    die("Unknown link!"); 
    } 

}

यह लिंक केवल वर्तमान सत्र में वर्तमान उपयोगकर्ता के लिए उपयोगी बनाने होंगे। यदि आपको लगातार इसकी आवश्यकता है, तो आप यादृच्छिक आईडी उत्पन्न कर सकते हैं और उन्हें वास्तविक आईडी के साथ डेटाबेस में स्टोर कर सकते हैं, लेकिन यह व्यर्थ हो सकता है, क्योंकि वास्तविक आईडी के बजाय यादृच्छिक आईडी का उपयोग किया जा सकता है ...

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