क्या XSS को रोकने के लिए आउटपुट टेम्पलेट डेटा से बचने के लिए एक अंतर्निहित मैगनेटो हेल्पर है?
या मुझे बस PHP htmlspecialchars
या htmlentities
फ़ंक्शन का उपयोग करना चाहिए ?
क्या XSS को रोकने के लिए आउटपुट टेम्पलेट डेटा से बचने के लिए एक अंतर्निहित मैगनेटो हेल्पर है?
या मुझे बस PHP htmlspecialchars
या htmlentities
फ़ंक्शन का उपयोग करना चाहिए ?
जवाबों:
संदर्भ के आधार पर कई सहायक विधि हैं। सभी Mage_Core_Helper_Abstract
में Mage_Core_Block_Abstract
, लेकिन में भी परिभाषित किया गया है , तो आप उन्हें $this->...()
हर टेम्पलेट में उपयोग कर सकते हैं :
escapeHtml()
: यह वास्तव में htmlspecialchars
HTML से बचने के लिए अनुशंसित मापदंडों का लाभ उठाता है : $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()
।
आपको हमेशा मानक अनुवाद फ़ंक्शन का उपयोग करना चाहिए
एक ब्लॉक उदाहरण में
<?php echo $this->__('Text goes here'); ?>
कहीं और
<?php echo Mage::helper('core')->__('Text goes here'); ?>
और इसे उसी तरह से उपयोग करें जिस तरह आप sprintf
PHP के साथ उपयोग करेंगे
उदाहरण के लिए।
<?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()
इसके बजाय इसका उपयोग किया जाना चाहिए।
$this->__('Hello %s', '<script>alert("XSS!")</script>')
:।
कक्षाएं Mage_Core_Block_Abstract
और Mage_Core_Helper_Abstract
दोनों एक ही फ़ंक्शन का उपयोग करते हैं Mage_Core_Helper_Abstract::escapeHtml
और यह आंतरिक रूप से कार्यान्वित होता है PHP HTMLspecialchars फ़ंक्शन का उपयोग करता है इसके अलावा HTML सामग्री के साथ सरणियों के लिए कुछ विशेष तर्क को लागू करना है।
इस फ़ंक्शन को $ के माध्यम से सभी ब्लॉक और हेल्पर वर्गों में एक्सेस किया जा सकता है और चूंकि फ़ंक्शन सार्वजनिक है आप इसे Mage :: हेल्पर ('कोर'), या कुछ अन्य सहायक वर्ग के माध्यम से, हर जगह उपयोग कर सकते हैं।