मैं अवसर वस्तु में जोड़े गए एक कस्टम बटन से एपेक्स कोड निष्पादित करने के लिए एक तकनीक की तलाश में हूं जो उपयोगकर्ता को सीएसआरएफ के खिलाफ सुरक्षा देता है।सीएसआरएफ सुरक्षित कस्टम बटन एपेक्स विधि से जुड़े
उपयोग किए जाने वाले वर्तमान दृष्टिकोण प्रश्न - Custom Button or Link to a Visualforce page with a custom controller से आता है। अनिवार्य रूप से:
- "विजुअलफोर्स पेज" पर सेट सामग्री स्रोत के साथ एक अवसर कस्टम बटन है।
- इस बटन के लिए सामग्री एक Visualforce पेज standardController के लिए अवसर का उपयोग करता है के लिए सेट है, एक विस्तार सुप्रीम वर्ग में प्रवेश किया और उस वर्ग
- कार्रवाई विधि एक और कस्टम Visualforce पृष्ठ के लिए एक PageReference रिटर्न में एक विधि के लिए एक कार्य है , अवसर आईडी के साथ पैरामीटर जोड़ने सहित।
- यह दूसरा कस्टम विजुअलफोर्स पृष्ठ वास्तविक सेवा का बड़ा हिस्सा करता है, जिसमें वेब सेवा कॉलआउट बनाने और उपयोगकर्ता को अवसर पर वापस रीडायरेक्ट करने से पहले डीएमएल संचालन करना शामिल है।
इस दृष्टिकोण के साथ इस मुद्दे को, कि दूसरी कस्टम Visualforce पृष्ठ पर HTTP के माध्यम से लिया गया है प्राप्त है क्वेरी स्ट्रिंग से मानकों को खींचती है, और कोई CSRF संरक्षण के साथ अद्यतन/सम्मिलित DML कार्रवाई करता है। यह Force.com सुरक्षा स्रोत कोड स्कैनर द्वारा उठाया जा रहा है।
मुझे यह जोड़ना चाहिए कि यह शीर्ष कोड एक प्रबंधित और एक अप्रबंधित पैकेज दोनों के रूप में तैनात किया गया है, इसलिए पृष्ठ रेफरेंस का उपयोग कर लक्षित विजुअलफोर्स पेज पर रीडायरेक्ट करने के लिए अतिरिक्त कार्य। यह सुनिश्चित करता है कि यदि आवश्यक हो तो नामस्थान उपसर्ग जोड़ा जाता है।
मैं सीएसआरएफ मुद्दे से कैसे बच सकता हूं?
मैं एक बटन के साथ दूसरे विज़ुअलफोर्स पेज में कोई फॉर्म नहीं जोड़ना चाहता हूं जिसे उन्हें प्रक्रिया शुरू करने के लिए दबाया जाना चाहिए (और इसलिए पोस्टबैक में ViewStateCSRF सुरक्षा को चुनना)। उपयोगकर्ताओं के परिप्रेक्ष्य से वे ऑपरेशन करने के लिए पहले ही बटन दबा चुके हैं।
मैं डेवलपर बल मंच पर इस सवाल पूछा है से पहले और एक समाधान के साथ आने नहीं किया - Cross-Site Request Forgery (CSRF/XSRF) safe Custom Button action
शायद मैं दूसरा दृश्य बल पेज के लिए नियंत्रक से बाहर कोड ले जाने का प्रयास किया जाना चाहिए और इसके बजाय स्टैंड नियंत्रक के विस्तार का उपयोग कर?
मैं एपेक्स वेब सेवा (जैसा कि Call a apex method from a custom button और How invoke APEX method from custom button में सुझाया गया है) में जावास्क्रिप्ट कॉलबैक पर स्विच कर सकता है, लेकिन यह थोड़ा गन्दा लगता है और मुझे यकीन नहीं है कि मैं केवल सुरक्षा समस्याओं की एक और श्रृंखला खोलूंगा वेब सेवा के साथ।
मेरा मुख्य मुद्दा यह है कि जब उपयोगकर्ता किसी HTTP GET अनुरोध के माध्यम से दूसरे पृष्ठ पर आता है तो वे सीएसआरएफ के लिए खुले होते हैं क्योंकि दूसरा पृष्ठ क्वेरी स्ट्रिंग पैरामीटर लेगा और सम्मिलित करें और अपडेट ऑपरेशंस के साथ-साथ वेब सेवा कॉलआउट । साथ ही, जावास्क्रिप्ट के साथ मैं लक्ष्य दृश्य पृष्ठ को इस तरह से संदर्भित नहीं कर सकता कि नामस्थान उपसर्ग के कारण प्रबंधित पैकेज के अंदर और बाहर दोनों काम करता है। –
ठीक है, # 1 आप पृष्ठ का संदर्भ देने के लिए 'URLFOR' या '$ पृष्ठ.pagename' या उनके संयोजन का उपयोग कर सकते हैं। यह आपके नेमस्पेस मुद्दे को चाहिए। दूसरा, सीएसआरएफ केवल फॉर्म क्रियाओं के लिए आग लगाना चाहिए, यह मेरी समझ है कि आपके पास पृष्ठ 2 में ऐसी कोई चीज़ नहीं है, नहीं? अनिवार्य रूप से आपका विस्तार कन्स्ट्रक्टर सभी काम करता है? यदि ऐसा है, तो आपका पृष्ठ अभी भी सीएसआरएफ के लिए खुला होगा, इससे कोई फर्क नहीं पड़ता कि आप इसे फॉर्म फोर्स (टोकन के साथ) प्रस्तुत करने के बिना इसे हल नहीं कर सकते हैं और फिर इसे 'ऑनलोडेड' से सबमिट कर सकते हैं। लेकिन (और यह एक बड़ा है लेकिन) आप इसके साथ सीएसआरएफ को हल नहीं करते हैं (अगली टिप्पणी देखें) – mmix
आप इसे हल नहीं करते हैं क्योंकि आपके पृष्ठ के ज्ञान के साथ दुर्भावनापूर्ण साइट अभी भी क्वेरी स्ट्रिंग के साथ एक GET अनुरोध भेज सकती है और बिक्री बल इसके लिए एक टोकन बनाते हैं और कृपया उनके लिए भी जमा करते हैं। – mmix