সুরক্ষা দৃষ্টিকোণ থেকে, ব্লগিনফো () বা get_bloginfo () এড়ানো উচিত?


10

আমি ডাব্লুপি থিম এবং প্লাগইন সুরক্ষা সম্পর্কে প্রচুর তথ্য পর্যালোচনা করেছি এবং ধারণাটি বুঝতে পারি যে থিম এবং প্লাগইনগুলিতে আপনার বৈশিষ্ট্য এবং এইচটিএমএল মানগুলি এড়ানো উচিত। আমি স্ট্যান্ডার্ড এবং কোনও বা ফাংশন উভয়ই দেখেছি bloginfo()এবং echo get_bloginfo()ব্যবহার করেছি ।esc_html()esc_attr()

জেনেসিস এবং _ এস , অটোমেটিকের বেস থিম উভয়ই এই মানগুলি থেকে অব্যাহতি দেয় তবে ডব্লিউপির নিজস্ব কোডেক্স থিম মান গাইড এই মানগুলি থেকে অব্যাহতি সম্পর্কে কিছুই বলে না। আমি ডাব্লুপি কোড (wp-includes/option.php)দেখেছি এবং দেখেমনে হচ্ছে যে এটিগুলি থেকে কিছুটা স্যানিটাইজেশন চলে গেছেget_option()তবে এটির মতো দেখতেও একটি ফিল্টার রয়েছে যা একটি প্লাগইন নির্দিষ্ট মানগুলির জন্য ওভাররাইট করতে পারে।

এটাই সত্য যে আমাকে এড়িয়ে চলার কথা ভেবে নিয়ে যায়। কেউ কি আমাকে এই বিষয়ে আলোকিত করতে পারে?

উত্তর:


15

আপনার প্রশ্নের উত্তর পেতে আমাদের এখানে আরও গভীরভাবে দেখতে হবে।

সুতরাং, bloginfoচারপাশে একটি সাধারণ মোড়ক get_bloginfo

<?php
function bloginfo( $show='' ) {
    echo get_bloginfo( $show, 'display' );
}

দ্বিতীয় যুক্তি লক্ষ্য করুন display। দেখা যাক এটি কী করে।

<?php
function get_bloginfo( $show = '', $filter = 'raw' ) {

    // snip snip, $output is fetched somewhere in here

    if ( 'display' == $filter ) {
        if ( $url )
            $output = apply_filters('bloginfo_url', $output, $show);
        else
            $output = apply_filters('bloginfo', $output, $show);
    }

    return $output;
}

যদি ফিল্টারটি সেট করা থাকে displayতবে get_bloginfoএকটি ফিল্টার মাধ্যমে চালিত হয়।

esc_htmlকোনও ফাংশনে কল করার মতো হার্ডকোডের পরিবর্তে , ডাব্লুপি জিনিসগুলি করতে নিজের হুক সিস্টেম ব্যবহার করে। যেখানে ঘটেছিল তা খুঁজে পাওয়ার জায়গাটি wp-includes/default-filters.phpbloginfoএই ফাইলটিতে একটি দ্রুত অনুসন্ধান প্রকাশ করে ...

<?php
// Format strings for display.
foreach ( array( 'comment_author', 'term_name', 'link_name', 'link_description', 'link_notes', 'bloginfo', 'wp_title', 'widget_title' ) as $filter ) {
    add_filter( $filter, 'wptexturize'   );
    add_filter( $filter, 'convert_chars' );
    add_filter( $filter, 'esc_html'      );
}

bloginfoforeachঅ্যারে লুকানো আছে । আপনি দেখতে পাচ্ছেন, আউটপুটটি bloginfoএড়িয়ে যায় esc_html

অন্য কথায়, এটি:

<?php
bloginfo('name');

এর সমতুল্য:

<?php
echo esc_html(get_bloginfo('name'));

অথবা এটা:

<?php
echo get_bloginfo('name', 'display');

সুতরাং, না, আউটপুট bloginfoএড়ানো প্রয়োজন হয় না। আমরাও আউটপুট করে get_bloginfoযতদিন দ্বিতীয় যুক্তি সেট করা হয় display

সতর্কবাণীটি হ'ল যে কেউ esc_htmlফিল্টারটি সরাতে পারে bloginfo। সুতরাং আউটপুট এড়ানোর জন্য এটি সম্ভবত নিরাপদ। এবং অবশ্যই, আপনি যদি bloginfoএইচটিএমএল প্রদর্শন ব্যতীত অন্য কোনও জন্য আউটপুট ব্যবহার করছেন (যেমন, কোনও চিত্রের Alt বৈশিষ্ট্যে), আপনার এটি চালানো উচিত esc_attr


ফিল্টার ব্যবহারের জন্য সংস্করণটি পরীক্ষা করা উচিত। এটি হতে পারে _s এবং জেনেসিস যেখানে পুরানো সংস্করণে প্রকাশিত হয়েছে যা এই কোডটি অন্তর্ভুক্ত করে না।
মার্ক কাপলুন

2
esc_html২.৮ সাল থেকে প্রায় হয়েছে, তাই এটি bloginfo github.com/WordPress/WordPress/blob/2.8-branch/wp-includes/…
chrisguitarguy

দুর্দান্ত উত্তর, ধন্যবাদ। আমি কেবলমাত্র এখন ডব্লিউপি-র সাহসী হয়ে উঠছি এবং যদিও এটি আমার কাছে স্পষ্ট ছিল যে ব্লগিনফো একটি get_bloginfo মোড়ক ছিল, তবে এটি পরিষ্কার ছিল না যে আউটপুটটি স্যানিটাইজ করা হচ্ছে। আমি ফিল্টারগুলি মিস করেছি। আমার সম্ভবত ডাব্লুপি কোডটি প্রবেশ করে এবং ডাটাবেসটি ছেড়ে দেয় এমন কোডের সাথে কীভাবে পরিচালনা করে সে সম্পর্কে আরও বেশি পরিচিত হওয়া উচিত। আমি যখন শুরু করেছি ঠিক তেমনই দৃষ্টিভঙ্গি রেখেছি তবে কমপক্ষে আমি কেন জানি এখন :)
পল গ্রাহাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.