এক্সএসএস প্রতিরোধের জন্য আউটপুটযুক্ত টেম্পলেট ডেটা থেকে বাঁচার জন্য কি কোনও অন্তর্নির্মিত ম্যাজেন্টো সহায়ক রয়েছে?
অথবা আমি কেবল পিএইচপি htmlspecialchars
বা htmlentities
ফাংশন ব্যবহার করব ?
এক্সএসএস প্রতিরোধের জন্য আউটপুটযুক্ত টেম্পলেট ডেটা থেকে বাঁচার জন্য কি কোনও অন্তর্নির্মিত ম্যাজেন্টো সহায়ক রয়েছে?
অথবা আমি কেবল পিএইচপি htmlspecialchars
বা htmlentities
ফাংশন ব্যবহার করব ?
উত্তর:
প্রসঙ্গের উপর নির্ভর করে বেশ কয়েকটি সহায়ক পদ্ধতি রয়েছে। সবগুলিই এর মধ্যে Mage_Core_Helper_Abstract
বা এর মধ্যেও সংজ্ঞায়িত করা হয়েছে Mage_Core_Block_Abstract
, যাতে আপনি এগুলি $this->...()
প্রতিটি টেমপ্লেটে ব্যবহার করতে পারেন :
escapeHtml()
: এটি প্রকৃতপক্ষে htmlspecialchars
এইচটিএমএল থেকে বাঁচার জন্য প্রস্তাবিত প্যারামিটারগুলির সাথে উত্সাহ দেয়: $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);
- অতিরিক্তভাবে আপনি অনুমতিপ্রাপ্ত ট্যাগগুলির একটি শ্বেত তালিকাটি নির্দিষ্ট করতে পারেন এবং একবারে সমস্ত উপাদানগুলি থেকে বাঁচতে অ্যারেতে পদ্ধতিটি কল করতে পারেন। যে কোনও ইনলাইন পাঠ্যের জন্য এটি ব্যবহার করুন।quoteEscape()
: হোয়াইটলিস্ট এবং অ্যারে প্রসেসিং ছাড়াই একটি সহজ সংস্করণ তবে এটি একটি একক উদ্ধৃতি পাশাপাশি ডাবল উক্তিগুলি থেকেও পালটে যায়, এটি একটি HTML বৈশিষ্ট্যের মধ্যে পাঠ্যের জন্য দরকারী ।jsQuoteEscape()
: এটি ব্যাকস্ল্যাশ সহ একক উদ্ধৃতি থেকে রক্ষা পেয়েছে। এটি জাভাস্ক্রিপ্টে স্ট্রিং লিটারালগুলি এড়ানোর জন্য ব্যবহৃত হয়। তবে এটি নিরাপদ নয় । (@ Xorax দ্বারা উদাহরণ 'test\\\'+alert("powned");//'
:)। ব্যাকস্ল্যাশগুলির অতিরিক্ত পালানো প্রয়োজনীয়। পরিবর্তে ব্যবহার quoteEscape()
করুন!escapeUrl()
: আমি কেন এই পদ্ধতি বিদ্যমান জানি না, এটা না URL টি স্ট্রিং এনকোডিং, এটা শুধু সাধারণ পুরানো htmlspecialchars()
কোন প্যারামিটার ছাড়াই। এটি ব্যবহার করবেন না। কখনো।
/**
* Escape html entities in url
*
* @param string $data
* @return string
*/
public function escapeUrl($data)
{
return htmlspecialchars($data);
}
সম্পর্কিত নোটটিতে, urlEncode()
যা ইউআরএল এনকোডিং প্রযোজ্য নয়, তার পরিবর্তে বেস 64 রয়েছে ... এটি ব্যবহার করবেন না, যদি আপনার ঠিক কী প্রয়োজন তা না জেনে থাকেন।
/**
* 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 $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 বনাম 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
এবং এটি প্রয়োগকরণ ইন্টারনালি পিএইচপি এইচটিএমএল স্পেসিচালচার্স ফাংশন ব্যবহার করে এবং এইচটিএমএল সামগ্রী সহ অ্যারেগুলির জন্য কিছু অ্যাডিশনাল লজিক প্রয়োগ করে।
সমস্ত ব্লক এবং সহায়ক শ্রেণিতে ফাংশনটি অ্যাক্সেস করা যায় $ এটির মাধ্যমে এবং যেহেতু ফাংশনটি সর্বজনীন হয় আপনি এটিকে Mage :: সহায়ক ('কোর'), বা অন্য কোনও সহায়ক শ্রেণীর মাধ্যমে, অন্য কোথাও ব্যবহার করতে পারেন।