আমি সচেতন যে ম্যাজেন্টো 2 এর টেমপ্লেটটি সুরক্ষিত করার জন্য বিভিন্ন পদ্ধতি রয়েছে:
$block->escapeHtml()
$block->escapeQuote()
$block->escapeUrl()
$block->escapeXssInUrl()
তবে আমি ভাবছি কখন এই পদ্ধতিগুলি ব্যবহার করবেন?
আমি সচেতন যে ম্যাজেন্টো 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)
কোনও আউটপুটের জন্য এটি আপনার ডিফল্ট পলায়নের পদ্ধতি হওয়া উচিত। কনভেনশনটি হ'ল "এইচটিএমএল" না থাকা সমস্ত পদ্ধতির ফলাফল এড়াতে হবে।
( ম্যাজেন্টো ২.২ থেকে )
/**
* Escape a string for the HTML attribute context
*
* @param string $string
* @param boolean $escapeSingleQuote
* @return string
*/
public function escapeHtmlAttr($string, $escapeSingleQuote = true)
উদাহরণস্বরূপ, এইচটিএমএল বৈশিষ্ট্যের মধ্যে আউটপুট এড়াতে এটি ব্যবহার করুন
title="<?php echo $block->escapeHtmlAttr($title) ?>"
এটি এইচটিএমএল এড়িয়ে চলবে, কিন্তু উদ্ধৃতিগুলি ( "
)
ডিফল্টরূপে, এটি একক উদ্ধৃতি থেকেও রক্ষা পাবে, সুতরাং এটি খুব কার্যকর:
onclick="alert('<?php echo $block->escapeHtmlAttr($message) ?>')"
এটি পছন্দসই না হলে দ্বিতীয় প্যারামিটারটিকে মিথ্যাতে সেট করুন।
/**
* Escape URL
*
* @param string $string
* @return string
*/
public function escapeUrl($string)
এটি ইউআরএল আউটপুট ব্যবহার করা যেতে পারে। এটা তোলে ডিফল্ট HTML পলায়নের এবং অতিরিক্ত অপসারণ প্রযোজ্য হবে javascript:
, vbscript:
এবং data:
। আপনি যদি ব্যবহারকারী প্রদত্ত লিঙ্কগুলিতে এই জাতীয় URLগুলি প্রতিরোধ করতে চান তবে আপনি পদ্ধতিটি ব্যবহার করতে পারেন।
ম্যাজেন্টো ২.১ অবধি এই বৈশিষ্ট্যটি অন্তর্ভুক্ত ছিল না এবং এর escapeXssInUrl()
পরিবর্তে আপনার প্রয়োজন ছিল । মোটেও ব্যবহার করার কোনও কারণ ছিল না escapeUrl()
।
অন্যথায়, কেবল $block->escapeHtmlAttr()
ইউআরএল এর জন্য ব্যবহার করুন ।
( ম্যাজেন্টো ২.২ থেকে )
/**
* Encode URL
*
* @param string $string
* @return string
*/
public function encodeUrlParam($string)
এটি প্যারামিটারগুলিতে ইউআরএল এনকোডিং প্রয়োগ করে। অভ্যন্তরীণ ইউআরএলগুলির জন্য আপনার সর্বদা ব্যবহার করা উচিত getUrl()
, যেখানে ইউআরএল এনকোডিং ইতিমধ্যে আপনার জন্য সম্পন্ন হয়ে গেছে, সুতরাং আপনি যদি বাহ্যিক ইউআরএল ম্যানুয়ালি তৈরি করেন তবে এটি কেবল তখনই প্রয়োজনীয়।
( ম্যাজেন্টো ২.২ থেকে )
/**
* Escape string for the JavaScript context
*
* @param string $string
* @return string
*/
public function escapeJs($string)
এনকোড, জাভাস্ক্রিপ্ট জন্য অক্ষর ইউনিকোড উদাহরণস্বরূপ ♥
হয়ে \u2665
। একটি জেএস স্ট্রিংয়ের মধ্যে আউটপুট এড়াতে এটি ব্যবহার করুন । ইনলাইন জাভাস্ক্রিপ্টের জন্য (অর্থাত্ onclick
বৈশিষ্ট্যগুলি), আপনাকে এখনও কল করতে হবে escapeHtmlAttr()
।
মনে রাখবেন যে আপনি যদি ব্যবহার json_encode()
করেন তবে এটি ইতিমধ্যে একই পলায়ন করে। এই ক্ষেত্রে escapeJs()
অবশ্যই ব্যবহার করা যাবেনা।
( ম্যাজেন্টো ২.২ থেকে )
/**
* Escape string for the CSS context
*
* @param string $string
* @return string
*/
public function escapeCss($string)
সিএসএসের জন্য ইউনিকোড অক্ষরগুলি এনকোড করে (দেখুন escapeJs()
), উদাহরণস্বরূপ content
সিএসএস অ্যাট্রিবিউটে ব্যবহার করতে ।
escapeHtmlAttr()
পরিবর্তে ব্যবহার করুনescapeUrl()
পরিবর্তে ব্যবহার করুনescapeHtmlAttr()
পরিবর্তে ব্যবহার করুনescapeHtmlAttr
এবং এটি ২.১.২- escapeHtmlAttr
তে বিদ্যমান নেই ... অন্তত না থাকলে /vendor/magento/framework/Escaper.php
যতক্ষণ না তারা এটিকে পরে যুক্ত করে থাকে এবং আবার ম্যাগেন্টো পুনরায় ট্যাগ না করে ..
এটি ম্যাজেন্টো ২.০ এর জন্য। ২.১ এর জন্য, ফ্যাবিয়ার উত্তরটি দেখুন
escapeHtml
স্ট্রিং আউটপুট ক্ষেত্রে এই ফাংশনটি ব্যবহার করুন যাতে এইচটিএমএল থাকা উচিত নয়।
উদাহরণ:
<span class='label'><?php echo $block->escapeHtml($block->getLabel()); ?></span>
escapeQuote
এইচটিএমএল বৈশিষ্ট্যের ক্ষেত্রে এই ফাংশনটি ব্যবহার করুন
উদাহরণ:
<span class="<?php echo $block->escapeQuote($block->getSpanClass()); ?>">Description</span>
escapeUrl
কোনও URL আউটপুট (এক্সএসএস প্রতিরোধ ব্যতীত - কেবলমাত্র অক্ষর রূপান্তর) এর ক্ষেত্রে এই ফাংশনটি ব্যবহার করুন
উদাহরণ:
<a href="<?php echo $block->escapeUrl($block->getUrl()); ?>">Link</a>
escapeXssInUrl
কোনও URL আউটপুট ক্ষেত্রে (এক্সএসএস প্রতিরোধের সাথে - চরিত্র কথোপকথন সহ) এই ফাংশনটি ব্যবহার করুন
উদাহরণ:
<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'))