2010-11-02 12 views
10

हाल ही में मैं jQuery के ajax समारोह में खुदाई शुरू की मांग करता है। मैंने बहुत सारे सुधार किए हैं, लेकिन एक बिंदु में असुरक्षित हूं।सुरक्षित jQuery ajax

// Delete link 
$('.delete_update').live("click",function() { 
    var ID = $(this).attr("id"); 
    var dataString = 'linkid='+ ID; 

    if(confirm('<?php echo _("Are you sure you want to delete this link?");?>')) { 

     $.ajax({ 
      type: "POST", 
      url: "ajaxsave.php", 
      data: dataString, 
      cache: false, 
      success: function(html){ 
       $(".bar"+ID).fadeOut('slow', function() {$(this).remove();}); 
      } 
     }); 

    } 
    return false; 
}); 

उदाहरण के रूप में चलता ajaxsave.php matchin पोस्ट linkid साथ लिंक को हटाने का ख्याल रखता है: कैसे मेरी ajax कॉल ..

उदाहरण के लिए एक कड़ी को हटाने के लिए इस कोड को सुरक्षित करने के लिए। मेरे ज्ञान के लिए एक बाहरी यूआरएल में एक पोस्ट फॉर्म जमा करना संभव है। मतलब यह है कि हर कोई मेरे स्रोत कोड को देखने में सक्षम होगा और अपना स्वयं का पोस्ट फॉर्म अपने स्वयं के लिंकिड चुनने में सक्षम होगा। इस तरह वे अपने इच्छित सभी लिंक हटा सकते हैं।

मैं अपने कोड कैसे सुरक्षित हैं? - AJAXsave.php में एचटीपी रेफरर? कर्ल स्क्रिप्ट उस बर्बाद कर सकते हैं। - AJAX फ़ंक्शन को कॉल करने वाले पृष्ठ पर सत्र या कुकीज़ का उपयोग करना? डेटाबेस में सत्र सहेजना और AJAXsave.php में इसकी जांच करना?

क्या आप मेरी मदद कर सकते हैं? आप इसे एक सुरुचिपूर्ण तरीके से कैसे करते हैं। या क्या .. इन सभी आधुनिक ajax साइटों पर "सामान्य" है

उत्तर

11

यह भी उपयोगी होने के लिए देर से हो सकता है, लेकिन इसका सरल उत्तर यह है:

ajaxsave.php में, आपको यह जांचना होगा कि अनुरोध प्रमाणीकृत (लॉग इन) से आता है और अधिकृत (इस लिंक को हटाने की अनुमति है) उपयोगकर्ता। यदि आप उन चीजों को नहीं कर रहे हैं तो आपकी साइट निश्चित रूप से जोखिम में है।

वैकल्पिक रूप से आप केवल यह तय कर सकते हैं कि सभी प्रमाणीकृत उपयोगकर्ता भरोसेमंद हैं और जो कुछ भी चाहते हैं उन्हें हटाने में सक्षम हैं। हालांकि, आपको अभी भी AJAXsave.php में प्रमाणीकरण की जांच करने की आवश्यकता है।

7

आप कोई बात नहीं क्या आप क्लाइंट पर (अर्थात ब्राउज़र) कर सर्वर पर इस संभाल करने के लिए, की जरूरत है। मूल वेब अनुप्रयोग डिजाइन प्रमाणीकरण बनाम प्राधिकरण के साथ सौदा करता है। पूर्व 'क्या आप जो कहते हैं आप हैं', लॉग इन करके संभाला जाता है, और बाद वाला 'क्या आपको ऐसा करने की अनुमति है जो आप करने की कोशिश कर रहे हैं'। आप चाहिए सर्वर पर संभाल प्राधिकरण - पहली बात आपको क्या करना चाहिए यकीन है कि उपयोगकर्ता क्या करने के लिए कोशिश कर रहे हैं करने के लिए उचित प्राधिकरण है करने के लिए जाँच है।

जब आप कहते हैं 'मेरी जानकारी के लिए यह एक बाहरी यूआरएल के लिए एक पोस्ट प्रपत्र प्रस्तुत करने के लिए संभव है। मतलब यह है कि हर कोई मेरे स्रोत कोड को देखने में सक्षम होगा और अपना स्वयं का पोस्ट फॉर्म अपने स्वयं के लिंकिड चुनने में सक्षम होगा। इस तरह वे अपने इच्छित सभी लिंक हटा सकते हैं। ' क्या आप चिंतित हैं कि कोई आपके जावास्क्रिप्ट को देख सकता है, एक यूआरएल देख सकता है, फिर अपनी वेबसाइट पर एक फॉर्म सेट कर सकता है जो आपके यूआरएल को इंगित करता है? यह वही मूल नीति के कारण संभव नहीं है, जो सभी ब्राउज़र लागू होते हैं। वही मूल नीति का अर्थ है कि यदि आप www.example.com पर हैं, तो आप www.example2.com (अन्य चीजों के साथ) पर AJAX अनुरोध नहीं कर सकते हैं। तो कोई www.example2.com सेट नहीं कर सका और फिर AJAX के साथ www.example.com (आपकी साइट) पर पोस्ट करने का प्रयास करें। हालांकि आप इसे अन्य उपकरणों के किसी भी अंक के साथ कर सकते हैं।

उदाहरण के लिए, कोई बात नहीं ब्राउज़र में किसी URL में टाइप और आप सिस्टम में हेरफेर करने की कोशिश कर से एक उपयोगकर्ता बंद हो जाता है। उदाहरण के लिए आप

www.example.com/user/delete/20

जैसे ही मुझे लगता है कि, मैं बस में टाइप कर सकते हैं आईडी 20. के साथ उपयोगकर्ता को हटा जिसका अर्थ है पर एक उपयोगकर्ता को हटा सकते कहो ब्राउज़र

www.example.com/user/delete/21

भले ही आप मुझे उस URL का लिंक प्रदान नहीं किया है। तो है कि मैं मूल रूप से कहा, आप यह सुनिश्चित करने के लिए मैं उपयोगकर्ता को नष्ट करने के लिए आवश्यक विशेषाधिकार हैं की जरूरत है 21.

+0

आपके उत्तर के लिए धन्यवाद। यह बिल्कुल मेरी चिंता है। और यह संभव नहीं है? उन यूआरएल पर जाने के आपके उदाहरण काम नहीं करेंगे क्योंकि डेटा पोस्ट के रूप में पारित किया जाता है और प्राप्त नहीं होता है। मेनिंग कि ajaxsave.php किसी चीज़ को हटा नहीं देगा अगर उसे प्रोबर पोस्ट प्रारूप प्राप्त नहीं होता है। और साइट जहां AJAX के माध्यम से इन लिंक को हटाना संभव है, निश्चित रूप से, पासवर्ड सुरक्षित है। मेरी चिंता बाहरी यूआरएल के पोस्ट फॉर्म से संबंधित थी। –

+0

@ s0mmer, यह अजाक्स के साथ संभव नहीं है, लेकिन wget या curl का उपयोग करके एक स्क्रिप्ट लिखना बहुत आसान और आसान है। – hvgotcodes

+0

@hvgotcodes मैं इसे कैसे रोकूं? –

0

ठीक है, मैं आपको एक तरफ बताउंगा। आप आने वाले अनुरोध

सेवा फ़ंक्शन के अंदर सत्र जांच के साथ प्रमाणित कर सकते हैं।

if ((UserID!=0)||(UserID!= null)) 
    { 
     //delete action code 
    }