কীভাবে আউটপুট ডেটা এড়ানো যায়?


27

এক্সএসএস প্রতিরোধের জন্য আউটপুটযুক্ত টেম্পলেট ডেটা থেকে বাঁচার জন্য কি কোনও অন্তর্নির্মিত ম্যাজেন্টো সহায়ক রয়েছে?

অথবা আমি কেবল পিএইচপি htmlspecialcharsবা htmlentitiesফাংশন ব্যবহার করব ?


আপনি যদি ম্যাজেন্টো 2 খুঁজছেন তবে দয়া করে magento.stackexchange.com/q/156368/243 দেখুন
ফ্যাবিয়ান শেমংলার

উত্তর:


33

প্রসঙ্গের উপর নির্ভর করে বেশ কয়েকটি সহায়ক পদ্ধতি রয়েছে। সবগুলিই এর মধ্যে 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()


jsQuoteEcreen আসলেই এটি নিরাপদ? Str_replace এর মতো দেখতে ($ উদ্ধৃতি, '\\' $ কোট, ...) কাজটি করে না ... gist.github.com/xxorax/1c9653fd59785085f96d4f676bc64ee2
Xorax

@ Xorax খুব ভাল পয়েন্ট। আমি উত্তর আপডেট করব।
ফ্যাবিয়ান শেমংলার

21

শুধু এটি অনুবাদ করুন

আপনার সর্বদা স্ট্যান্ডার্ড ট্রান্সলেট ফাংশনটি ব্যবহার করা উচিত

একটি ব্লক উদাহরণে

<?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()পরিবর্তে ব্যবহার করা উচিত।
বেলার

5
আরেকটি গুরুত্বপূর্ণ দ্রষ্টব্য: অনুবাদ কিছুই এড়ায় না । এটি চেষ্টা করে দেখুন: $this->__('Hello %s', '<script>alert("XSS!")</script>')
ফ্যাবিয়ান শেমংলার

3

ক্লাস Mage_Core_Block_Abstractএবং Mage_Core_Helper_Abstractউভয়ই একই ফাংশন ব্যবহার করে Mage_Core_Helper_Abstract::escapeHtmlএবং এটি প্রয়োগকরণ ইন্টারনালি পিএইচপি এইচটিএমএল স্পেসিচালচার্স ফাংশন ব্যবহার করে এবং এইচটিএমএল সামগ্রী সহ অ্যারেগুলির জন্য কিছু অ্যাডিশনাল লজিক প্রয়োগ করে।

সমস্ত ব্লক এবং সহায়ক শ্রেণিতে ফাংশনটি অ্যাক্সেস করা যায় $ এটির মাধ্যমে এবং যেহেতু ফাংশনটি সর্বজনীন হয় আপনি এটিকে Mage :: সহায়ক ('কোর'), বা অন্য কোনও সহায়ক শ্রেণীর মাধ্যমে, অন্য কোথাও ব্যবহার করতে পারেন।


-1

স্প্যানিশ রূপান্তর জন্য:

$value = str_replace(array("&lt;", "&gt;"), array("<", ">"), htmlspecialchars("Lorem ipsum &gt;", ENT_COMPAT, "UTF-8", false));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.