मुझे पता है कि Magento 2 में टेम्पलेट को सुरक्षित करने के लिए कई तरीके उपलब्ध हैं:
$block->escapeHtml()
$block->escapeQuote()
$block->escapeUrl()
$block->escapeXssInUrl()
लेकिन मैं सोच रहा हूँ कि उन तरीकों में से प्रत्येक का उपयोग कब करना है?
मुझे पता है कि Magento 2 में टेम्पलेट को सुरक्षित करने के लिए कई तरीके उपलब्ध हैं:
$block->escapeHtml()
$block->escapeQuote()
$block->escapeUrl()
$block->escapeXssInUrl()
लेकिन मैं सोच रहा हूँ कि उन तरीकों में से प्रत्येक का उपयोग कब करना है?
जवाबों:
AbstractBlock
सभी डेलिगेट में भागने के तरीके कॉल करते हैं Magento\Framework\Escaper
, इसलिए आपको वहां एक सिंहावलोकन मिलेगा।
आइए सार्वजनिक तरीकों और उनके प्रलेखन को देखें:
/**
* Escape string for HTML context. allowedTags will not be escaped, except the following: script, img, embed,
* iframe, video, source, object, audio
*
* @param string|array $data
* @param array|null $allowedTags
* @return string|array
*/
public function escapeHtml($data, $allowedTags = null)
यह किसी भी आउटपुट के लिए आपकी डिफ़ॉल्ट भागने की विधि होनी चाहिए। कन्वेंशन यह है कि "एचटीएमएल" शामिल नहीं करने वाले सभी तरीकों के परिणाम से बच जाना चाहिए।
( मैगेंटो 2.2 के बाद से )
/**
* Escape a string for the HTML attribute context
*
* @param string $string
* @param boolean $escapeSingleQuote
* @return string
*/
public function escapeHtmlAttr($string, $escapeSingleQuote = true)
उदाहरण के लिए, HTML विशेषता में आउटपुट से बचने के लिए इसका उपयोग करें
title="<?php echo $block->escapeHtmlAttr($title) ?>"
यह HTML से बच जाएगा, लेकिन उद्धरण भी ( "
)
डिफ़ॉल्ट रूप से, यह एकल उद्धरण से भी बच जाएगा, इसलिए यह भी काम करता है:
onclick="alert('<?php echo $block->escapeHtmlAttr($message) ?>')"
यदि यह वांछित नहीं है, तो दूसरा पैरामीटर झूठा सेट करें।
/**
* Escape URL
*
* @param string $string
* @return string
*/
public function escapeUrl($string)
इसका उपयोग URL को आउटपुट करने के लिए किया जा सकता है। यह डिफ़ॉल्ट एचटीएमएल से बच निकलेगा और इसके अतिरिक्त हटा देगा javascript:
, vbscript:
और data:
। यदि आप उपयोगकर्ता द्वारा प्रदान किए गए लिंक में इस तरह यूआरएल को रोकना चाहते हैं, तो आप विधि का उपयोग कर सकते हैं।
Magento 2.1 तक यह सुविधा शामिल नहीं थी और आपको escapeXssInUrl()
इसके बजाय उपयोग करने की आवश्यकता थी । उपयोग करने का कोई कारण नहीं था escapeUrl()
।
अन्यथा, केवल $block->escapeHtmlAttr()
URL के लिए उपयोग करें।
( मैगेंटो 2.2 के बाद से )
/**
* Encode URL
*
* @param string $string
* @return string
*/
public function encodeUrlParam($string)
यह पैरामीटर के लिए URL एन्कोडिंग लागू करता है। आंतरिक URL के लिए आपको हमेशा उपयोग करना चाहिए getUrl()
, जहां URL एन्कोडिंग आपके लिए पहले से ही है, इसलिए यह केवल तभी आवश्यक है जब आप मैन्युअल रूप से बाहरी URL का निर्माण करते हैं।
( मैगेंटो 2.2 के बाद से )
/**
* Escape string for the JavaScript context
*
* @param string $string
* @return string
*/
public function escapeJs($string)
उदाहरण के लिए, जावास्क्रिप्ट के लिए यूनिकोड वर्णों को एनकोड करता ♥
है \u2665
। जेएस स्ट्रिंग के भीतर आउटपुट से बचने के लिए इसका उपयोग करें । इनलाइन जावास्क्रिप्ट (यानी onclick
विशेषताएँ) के लिए, आपको अभी भी कॉल करने की आवश्यकता है escapeHtmlAttr()
।
ध्यान दें कि यदि आप उपयोग करते हैं json_encode()
, तो यह पहले से ही बच रहा है, इस मामले में, escapeJs()
इसका उपयोग नहीं किया जाना चाहिए।
( मैगेंटो 2.2 के बाद से )
/**
* Escape string for the CSS context
*
* @param string $string
* @return string
*/
public function escapeCss($string)
CSS (देखें escapeJs()
) के लिए यूनिकोड वर्णों को एनकोड करता है , उदाहरण के लिए content
CSS विशेषता में उपयोग किया जाता है ।
escapeHtmlAttr()
इसके बजाय का उपयोग करेंescapeUrl()
इसके बजाय का उपयोग करेंescapeHtmlAttr()
इसके बजाय का उपयोग करेंescapeHtmlAttr
और escapeHtmlAttr
2.1.2 में मौजूद नहीं है ... कम से कम /vendor/magento/framework/Escaper.php
तब तक नहीं जब तक कि उन्होंने इसे बाद में नहीं जोड़ा और
यह Magento 2.0 के लिए है। 2.1 के लिए, फेबियन के उत्तर को देखें
escapeHtml
एक स्ट्रिंग आउटपुट के मामले में इस फ़ंक्शन का उपयोग करें जिसमें HTML नहीं होना चाहिए।
उदाहरण:
<span class='label'><?php echo $block->escapeHtml($block->getLabel()); ?></span>
escapeQuote
HTML विशेषताओं के मामले में इस फ़ंक्शन का उपयोग करें
उदाहरण:
<span class="<?php echo $block->escapeQuote($block->getSpanClass()); ?>">Description</span>
escapeUrl
URL आउटपुट (XSS रोकथाम के बिना - केवल वर्ण रूपांतरण) के मामले में इस फ़ंक्शन का उपयोग करें
उदाहरण:
<a href="<?php echo $block->escapeUrl($block->getUrl()); ?>">Link</a>
escapeXssInUrl
URL आउटपुट (XSS रोकथाम के साथ - वर्ण वार्तालाप सहित) के मामले में इस फ़ंक्शन का उपयोग करें
उदाहरण:
<a href="<?php echo $block->escapeXssInUrl($block->getUrl()); ?>">Link</a>
count()
(उदाहरण echo (int)$var
)echo 'test'
) में आउटपुटecho "test"
)__
विधियह एक अनुवाद प्रयोजनों के लिए प्रयोग किया जाता है। इसका उपयोग तब करें जब आपको पता हो कि एक स्ट्रिंग का अनुवाद किया जा सकता है।
उदाहरण के लिए:
<caption class="table-caption"><?php /* @escapeNotVerified */ echo __('More Information') ?></caption>
__()
? मैं /* @escapeNotVerified */
हर जगह चिपकाने से थोड़ा थक गया हूं : /
__
सुरक्षा उद्देश्य के लिए नहीं बल्कि अनुवाद के उद्देश्य से है
echo $this->escapeHtml(__('Text to translate'))