ম্যাজেন্টো 2: টেমপ্লেট সুরক্ষা: কোন পদ্ধতিটি ব্যবহার করবেন?


29

আমি সচেতন যে ম্যাজেন্টো 2 এর টেমপ্লেটটি সুরক্ষিত করার জন্য বিভিন্ন পদ্ধতি রয়েছে:

  • $block->escapeHtml()
  • $block->escapeQuote()
  • $block->escapeUrl()
  • $block->escapeXssInUrl()

তবে আমি ভাবছি কখন এই পদ্ধতিগুলি ব্যবহার করবেন?

উত্তর:


35

AbstractBlockসমস্ত প্রতিনিধিদের পালানোর পদ্ধতিগুলি কল করে Magento\Framework\Escaper, সুতরাং আপনি সেখানে একটি ওভারভিউ পাবেন।

আসুন সরকারী পদ্ধতি এবং তাদের ডকুমেন্টেশনগুলি দেখুন:

escapeHtml ()

/**
 * 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)

কোনও আউটপুটের জন্য এটি আপনার ডিফল্ট পলায়নের পদ্ধতি হওয়া উচিত। কনভেনশনটি হ'ল "এইচটিএমএল" না থাকা সমস্ত পদ্ধতির ফলাফল এড়াতে হবে।

escapeHtmlAttr ()

( ম্যাজেন্টো ২.২ থেকে )

/**
 * 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) ?>')"

এটি পছন্দসই না হলে দ্বিতীয় প্যারামিটারটিকে মিথ্যাতে সেট করুন।

escapeUrl ()

/**
 * Escape URL
 *
 * @param string $string
 * @return string
 */
public function escapeUrl($string)

এটি ইউআরএল আউটপুট ব্যবহার করা যেতে পারে। এটা তোলে ডিফল্ট HTML পলায়নের এবং অতিরিক্ত অপসারণ প্রযোজ্য হবে javascript:, vbscript:এবং data:। আপনি যদি ব্যবহারকারী প্রদত্ত লিঙ্কগুলিতে এই জাতীয় URLগুলি প্রতিরোধ করতে চান তবে আপনি পদ্ধতিটি ব্যবহার করতে পারেন।

ম্যাজেন্টো ২.১ অবধি এই বৈশিষ্ট্যটি অন্তর্ভুক্ত ছিল না এবং এর escapeXssInUrl()পরিবর্তে আপনার প্রয়োজন ছিল । মোটেও ব্যবহার করার কোনও কারণ ছিল না escapeUrl()

অন্যথায়, কেবল $block->escapeHtmlAttr()ইউআরএল এর জন্য ব্যবহার করুন ।

encodeUrlParam ()

( ম্যাজেন্টো ২.২ থেকে )

/**
 * Encode URL
 *
 * @param string $string
 * @return string
 */
public function encodeUrlParam($string)

এটি প্যারামিটারগুলিতে ইউআরএল এনকোডিং প্রয়োগ করে। অভ্যন্তরীণ ইউআরএলগুলির জন্য আপনার সর্বদা ব্যবহার করা উচিত getUrl(), যেখানে ইউআরএল এনকোডিং ইতিমধ্যে আপনার জন্য সম্পন্ন হয়ে গেছে, সুতরাং আপনি যদি বাহ্যিক ইউআরএল ম্যানুয়ালি তৈরি করেন তবে এটি কেবল তখনই প্রয়োজনীয়।

escapeJs ()

( ম্যাজেন্টো ২.২ থেকে )

/**
 * Escape string for the JavaScript context
 *
 * @param string $string
 * @return string
 */
public function escapeJs($string)

এনকোড, জাভাস্ক্রিপ্ট জন্য অক্ষর ইউনিকোড উদাহরণস্বরূপ হয়ে \u2665একটি জেএস স্ট্রিংয়ের মধ্যে আউটপুট এড়াতে এটি ব্যবহার করুন । ইনলাইন জাভাস্ক্রিপ্টের জন্য (অর্থাত্ onclickবৈশিষ্ট্যগুলি), আপনাকে এখনও কল করতে হবে escapeHtmlAttr()

মনে রাখবেন যে আপনি যদি ব্যবহার json_encode()করেন তবে এটি ইতিমধ্যে একই পলায়ন করে। এই ক্ষেত্রে escapeJs()অবশ্যই ব্যবহার করা যাবেনা।

escapeCss ()

( ম্যাজেন্টো ২.২ থেকে )

/**
 * Escape string for the CSS context
 *
 * @param string $string
 * @return string
 */
public function escapeCss($string)

সিএসএসের জন্য ইউনিকোড অক্ষরগুলি এনকোড করে (দেখুন escapeJs()), উদাহরণস্বরূপ contentসিএসএস অ্যাট্রিবিউটে ব্যবহার করতে ।

অবহেলিত পদ্ধতিগুলি (ম্যাজেন্টো ২.২ অনুযায়ী):

  • EscapeJsQuote: escapeHtmlAttr()পরিবর্তে ব্যবহার করুন
  • EscapeXssInUrl: escapeUrl()পরিবর্তে ব্যবহার করুন
  • EscapeQuote: escapeHtmlAttr()পরিবর্তে ব্যবহার করুন

1
ভাল কাজ আমি আপনার উত্তর উল্লেখ করার জন্য আমার উত্তরটিতে সামান্য নোট যুক্ত করেছি ২.১ ব্যবহার করার সময়। মজার বিষয় হল, ম্যাজেন্টো ইউ কউস কেবলমাত্র আমার উত্তরে উল্লিখিত পদ্ধতিগুলির উল্লেখ করেছে। আমার ধারণা কোর্সটি কেবল ২.০
রাফেল ডিজিটাল পিয়ানিজমে

escapeHtmlAttrএবং এটি ২.১.২- escapeHtmlAttrতে বিদ্যমান নেই ... অন্তত না থাকলে /vendor/magento/framework/Escaper.phpযতক্ষণ না তারা এটিকে পরে যুক্ত করে থাকে এবং আবার ম্যাগেন্টো পুনরায় ট্যাগ না করে ..
ওজজিআইই

2
ভাল ধরা, আমার উত্তরটি সর্বশেষতম বিকাশকারী শাখার উপর ভিত্তি করে ছিল। ডেভডোকদের মতে, অন্যান্য পদ্ধতিগুলি ২.২ থেকে
অবচয় করা হবে

এইচটিএমএলের একটি স্বেচ্ছাসেবী অংশ পরিষ্কার করার জন্য এমন কোনও পদ্ধতি আছে যা এতে কোনও ইমগ ট্যাগ লাগতে পারে?
Corgalore

পরিষ্কার কোন অর্থে?
ফ্যাবিয়ান শেমঙ্গলার

14

এটি ম্যাজেন্টো ২.০ এর জন্য। ২.১ এর জন্য, ফ্যাবিয়ার উত্তরটি দেখুন

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>

পালানোর দরকার নেই কী?

  • Ingালাই টাইপ করুন এবং পিএইচপি ফাংশন count()(উদাহরণ echo (int)$var)
  • একক উদ্ধৃতিতে আউটপুট (উদাহরণ echo 'test')
  • ভেরিয়েবল ব্যতীত ডাবল কোটে আউটপুট (উদাহরণ echo "test")

__পদ্ধতি

এটি একটি অনুবাদ উদ্দেশ্যে ব্যবহৃত হয়। যখন আপনি জানেন কোনও স্ট্রিং অনুবাদ করা যায় তখন এটি ব্যবহার করুন।

উদাহরণ স্বরূপ:

<caption class="table-caption"><?php /* @escapeNotVerified */ echo __('More Information') ?></caption>

ভাল কাজ .. রাফিয়াল
অমিত বেরা

1
__()আমাদেরও কি প্রতিটি অনুবাদ এড়ানো উচিত? আমি /* @escapeNotVerified */সর্বত্র পেষ্ট হয়ে কিছুটা ক্লান্ত হয়েছি : /
igloczek

@ বার্তেকআইগিয়েসকি আমার আপডেট হওয়া উত্তর দেখুন। __সুরক্ষা উদ্দেশ্যে নয় অনুবাদ অনুবাদে
রাফেল ডিজিটাল পিয়ানোজমে

1
এছাড়াও আমি অনুবাদিত স্ট্রিংগুলি যেমনecho $this->escapeHtml(__('Text to translate'))
ক্যান্ডি

2
ডিভডকস পৃষ্ঠায় বর্তমানে একটি নোট রয়েছে যে কয়েকটি পদ্ধতি 2.2 সহ অবচিত করা হবে। টেমপ্লেট সুরক্ষা পৃষ্ঠায় আবার পরীক্ষা করে নেওয়ার বিষয়টি নিশ্চিত করুন। devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/…
আন্না
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.