Ruby Academy · पाठ

Strong Parameters

सुरक्षित params

पाठ 3, कुल 4 में से13 चरण

Strong Parameters, CoddyKit पर Ruby Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Ruby Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Ruby Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

सामूहिक मान-निर्धारण की समस्या

प्रपत्र एक साथ कई क्षेत्र भेजते हैं। यदि आप उन सभी को बिना जाँच के मॉडल में भेज दें, तो कोई हमलावर ऐसे क्षेत्र जोड़ सकता है जिनका आपने कभी इरादा नहीं किया था, जैसे admin: true सेट करना। यही सामूहिक मान-निर्धारण की सुरक्षा-कमज़ोरी है।

  • उपयोगकर्ता का इनपुट कभी भरोसेमंद नहीं माना जाता।
  • आपको अनुमत क्षेत्रों की सूची स्पष्ट रूप से तय करनी चाहिए।
  • Rails इसे सशक्त पैरामीटरों के माध्यम से लागू करता है।

सशक्त पैरामीटर क्या होते हैं

सशक्त पैरामीटर आपको स्पष्ट रूप से घोषित करने के लिए बाध्य करते हैं कि मॉडल किन params को स्वीकार कर सकता है। यदि आप ऐसे params का सामूहिक मान-निर्धारण करने का प्रयास करते हैं जिन्हें अनुमति नहीं दी गई है, तो Rails एक त्रुटि उठाता है।

इससे छिपी हुई सुरक्षा-कमज़ोरी, स्वेच्छा से चुनी और जाँची गई क्षेत्रों की सूची में बदल जाती है।

require और permit

इस तरीके में दो विधियाँ इस्तेमाल होती हैं:

  • require(:model) यह सुनिश्चित करता है कि शीर्ष-स्तरीय कुंजी मौजूद हो।
  • permit(:field, ...) अंदरूनी क्षेत्रों की अनुमत सूची बनाता है।
def article_params
  params.require(:article).permit(:title, :body)
end

सहायक का उपयोग

एक निजी model_params विधि परिभाषित करें और उसे वहाँ बुलाएँ जहाँ आप रिकॉर्ड बनाते या अद्यतन करते हैं। कच्चे params को कभी सीधे मॉडल में न भेजें।

def create
  @article = Article.new(article_params)
  @article.save
  redirect_to @article
end

private

def article_params
  params.require(:article).permit(:title, :body)
end

निजी विधि क्यों

अनुमत सूची को एक निजी विधि में रखने के लाभ:

  • create और update समान नियम साझा करते हैं।
  • अनुमत क्षेत्र ढूँढना और उनकी समीक्षा करना आसान होता है।
  • यह नियंत्रक क्रिया के रूप में उजागर नहीं होती (निजी विधियों के लिए मार्ग नहीं बनाए जा सकते)।

क्या छाँट दिया जाता है

प्रस्तुत की गई ऐसी हर कुंजी जो permit सूची में नहीं है, मॉडल तक पहुँचने से पहले हटा दी जाती है। यदि किसी प्रपत्र में किसी तरह admin शामिल हो, लेकिन आप केवल title और body की अनुमति दें, तो admin मान को चुपचाप अनदेखा कर दिया जाता है और रिकॉर्ड सुरक्षित रहता है।

सारणियों की अनुमति देना

चेकबॉक्स सूचियों या बहु-चयन से भेजी जाने वाली सारणियों के लिए मान के रूप में एक रिक्त सारणी देकर उनकी अनुमति दें। इससे उस कुंजी के लिए कई मान स्वीकार किए जा सकते हैं।

params.require(:article).permit(:title, tag_ids: [])

अंतर्निहित हैश की अनुमति देना

अंतर्निहित विशेषताओं के लिए (ऐसा प्रपत्र जो एक साथ मूल वस्तु और उसकी अधीनस्थ वस्तुओं को संपादित करता है), अंदरूनी क्षेत्रों का वर्णन करने वाले हैश के साथ अंतर्निहित कुंजियों की अनुमति दें।

params.require(:order).permit(
  :customer_name,
  items_attributes: [:product_id, :quantity]
)

अनुपस्थित params सँभालना

यदि आवश्यक कुंजी मौजूद नहीं है, तो require ParameterMissing उठाता है, जिसे Rails 400 अमान्य अनुरोध के रूप में प्रस्तुत करता है। इससे क्रियाएँ अपने-आप गलत प्रारूप वाले अनुरोधों से सुरक्षित रहती हैं।

# Missing :article key raises:
# ActionController::ParameterMissing

permit! खतरनाक है

सब कुछ अनुमति देने के लिए params.permit! का उपयोग किया जा सकता है, लेकिन इससे सामूहिक असाइनमेंट की सुरक्षा-खामी फिर खुल जाती है। विश्वसनीय आंतरिक संदर्भों को छोड़कर इसका उपयोग न करें। हमेशा स्पष्ट अनुमति-सूची को प्राथमिकता दें।

सर्वोत्तम अभ्यास

पैरामीटरों को सुरक्षित रखें:

  • फ़ील्ड का न्यूनतम आवश्यक समूह ही अनुमति-सूची में रखें।
  • सार्वजनिक फ़ॉर्म से role या admin जैसे संवेदनशील फ़्लैग को कभी अनुमति न दें।
  • ऐसे फ़ील्ड को सर्वर-पक्ष के तर्क के आधार पर नियंत्रक में स्पष्ट रूप से निर्धारित करें।

त्वरित जाँच

सुदृढ़ पैरामीटरों की अपनी समझ का परीक्षण करें।

पुनरावलोकन: सुदृढ़ पैरामीटर

आपने इनपुट को सुरक्षित रूप से फ़िल्टर करना सीखा:

  • सामूहिक असाइनमेंट वास्तविक सुरक्षा जोखिम है।
  • require शीर्ष कुंजी को आवश्यक बनाता है; permit फ़ील्ड की अनुमति-सूची बनाता है।
  • अनुमति-सूची को साझा निजी विधि में रखें।
  • आवश्यकता पड़ने पर सरणियों और नेस्टेड हैश को अनुमति दें।
  • permit! से बचें और संवेदनशील फ़्लैग को कभी अनुमति न दें।

अब हम दृश्यों और रेंडरिंग के माध्यम से प्रतिक्रियाएँ लौटाएँगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Ruby सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
29
पाठ
109

अक्सर पूछे जाने वाले प्रश्न

क्या “Strong Parameters” पाठ निःशुल्क है?

हाँ — Ruby Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Strong Parameters” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Ruby Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Strong Parameters” में मैं क्या सीखूँगा?

सुरक्षित params आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Ruby Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Ruby Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Ruby Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“Strong Parameters” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Ruby Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Ruby Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Routes और Resources
  2. Controllers और Actions
  3. Strong Parameters
  4. Views और Rendering
← Ruby Academy पर वापस जाएँ