आउटपुट डेटा से कैसे बचें?


27

क्या XSS को रोकने के लिए आउटपुट टेम्पलेट डेटा से बचने के लिए एक अंतर्निहित मैगनेटो हेल्पर है?

या मुझे बस PHP htmlspecialcharsया htmlentitiesफ़ंक्शन का उपयोग करना चाहिए ?


यदि आप Magento 2 की तलाश कर रहे हैं, तो कृपया magento.stackexchange.com/q/156368/243
Fabian Schmengler

जवाबों:


33

संदर्भ के आधार पर कई सहायक विधि हैं। सभी Mage_Core_Helper_Abstractमें Mage_Core_Block_Abstract, लेकिन में भी परिभाषित किया गया है , तो आप उन्हें $this->...()हर टेम्पलेट में उपयोग कर सकते हैं :

  • escapeHtml(): यह वास्तव में htmlspecialcharsHTML से बचने के लिए अनुशंसित मापदंडों का लाभ उठाता है : $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);- इसके अलावा आप अनुमत टैग के एक श्वेत सूची को निर्दिष्ट कर सकते हैं और एक बार में सभी तत्वों से बचने के लिए सरणी पर विधि को कॉल कर सकते हैं। किसी भी इनलाइन टेक्स्ट के लिए इसका इस्तेमाल करें।
  • quoteEscape(): श्वेतसूची और सरणी प्रसंस्करण के बिना एक सरल संस्करण लेकिन यह एक एकल उद्धरण के साथ-साथ एक HTML विशेषता के भीतर पाठ के लिए उपयोगी दोहरे उद्धरण से भी बच जाता है ।
  • jsQuoteEscape(): यह एक बैकस्लैश के साथ एकल उद्धरण से बच जाता है। इसका उपयोग जावास्क्रिप्ट में स्ट्रिंग शाब्दिकों से बचने के लिए किया जाता है। लेकिन यह सुरक्षित नहीं है । (@Xorax द्वारा उदाहरण:) 'test\\\'+alert("powned");//'। बैकस्लैश का अतिरिक्त पलायन आवश्यक है। इसके बजाय का उपयोग करें quoteEscape()!
  • escapeUrl(): मैं क्यों इस विधि मौजूद है पता नहीं है, यह है नहीं यूआरएल तार एन्कोडिंग, यह सिर्फ सादे पुराने है htmlspecialchars()किसी भी पैरामीटर के बिना। इसका उपयोग न करें। कभी।

    /**
     * Escape html entities in url
     *
     * @param string $data
     * @return string
     */
    public function escapeUrl($data)
    {
        return htmlspecialchars($data);
    }
  • संबंधित नोट पर, urlEncode()जो URL एन्कोडिंग भी लागू नहीं होता है, लेकिन इसके बजाय base64 ... इसका उपयोग न करें, यदि आपको ठीक से पता नहीं है कि आपको क्या चाहिए।

    /**
     *  base64_encode() for URLs encoding
     *
     *  @param    string $url
     *  @return   string
     */
    public function urlEncode($url)
    {
        return strtr(base64_encode($url), '+/=', '-_,');
    }

हां, नामकरण असंगत है। सब एक बार उन विधि के नाम योजना निम्नलिखित थे somethingEscape()लेकिन तब किसी को भी समाप्त करने का फैसला किया है htmlEscape()और urlEscape()नए तरीकों के पक्ष में और के बारे में भूल quoteEscape()और jsQuoteEscape()


jsQuoteEscape क्या यह वास्तव में सुरक्षित है? Str_replace ($ quot, '\\'। $ Quot, ...) की तरह काम न करें ... gist.github.com/xxorax/1c9653fd59785085f96d4f676bb64ee2
Xorax

@Xorax बहुत अच्छा बिंदु। मैं जवाब अपडेट कर दूंगा।
फेबियन शेंगलर

21

बस इसका अनुवाद करें

आपको हमेशा मानक अनुवाद फ़ंक्शन का उपयोग करना चाहिए

एक ब्लॉक उदाहरण में

<?php echo $this->__('Text goes here'); ?>

कहीं और

<?php echo Mage::helper('core')->__('Text goes here'); ?>

और इसे उसी तरह से उपयोग करें जिस तरह आप sprintfPHP के साथ उपयोग करेंगे

उदाहरण के लिए।

<?php $foo = 'rocks'; ?>
<?php echo $this->__('Sonassi %s', $foo); ?>

या इससे बचकर रहें

एक ब्लॉक उदाहरण में

<?php echo $this->escapeHtml('HTML goes here'); ?>

कहीं और

का उपयोग करते हुए Mage/Core/Helper/Abstract.php

escapeHtml($data, $allowedTags = null)

उदाहरण के लिए।

<?php echo Mage::helper('core')->escapeHtml('HTML goes here'); ?>

महत्वपूर्ण नोट: Mage_Core_Block_Abstract::htmlEscape()Magento v 1.4.0.0-rc1 के रूप में पदावनत किया गया है और Mage_Core_Block_Abstract::escapeHtml()इसके बजाय इसका उपयोग किया जाना चाहिए।
नंगे

5
एक और महत्वपूर्ण नोट: अनुवाद कुछ भी नहीं बचता है । इसे आज़माएं $this->__('Hello %s', '<script>alert("XSS!")</script>'):।
फेबियन शेंगलर

3

कक्षाएं Mage_Core_Block_Abstractऔर Mage_Core_Helper_Abstractदोनों एक ही फ़ंक्शन का उपयोग करते हैं Mage_Core_Helper_Abstract::escapeHtmlऔर यह आंतरिक रूप से कार्यान्वित होता है PHP HTMLspecialchars फ़ंक्शन का उपयोग करता है इसके अलावा HTML सामग्री के साथ सरणियों के लिए कुछ विशेष तर्क को लागू करना है।

इस फ़ंक्शन को $ के माध्यम से सभी ब्लॉक और हेल्पर वर्गों में एक्सेस किया जा सकता है और चूंकि फ़ंक्शन सार्वजनिक है आप इसे Mage :: हेल्पर ('कोर'), या कुछ अन्य सहायक वर्ग के माध्यम से, हर जगह उपयोग कर सकते हैं।


-1

स्पेनिश के लिए कन्वर्ट:

$value = str_replace(array("&lt;", "&gt;"), array("<", ">"), htmlspecialchars("Lorem ipsum &gt;", ENT_COMPAT, "UTF-8", false));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.