ডেটা স্যানিটাইজেশন: কোড উদাহরণ সহ সেরা অভ্যাস


15

ওয়ার্ডপ্রেসের সুরক্ষিত থিমগুলি লেখার জন্য আমাকে ডেটা স্যানিটাইজেশন (ডেটা বৈধকরণ নয়) বোঝার চেষ্টা করছি। আমি থিম বিকাশকারীদের সেরা অনুশীলনের বিবরণ বিশিষ্ট একটি বোধগম্য গাইড খুঁজতে চেষ্টা করে ইন্টারনেট অনুসন্ধান করেছি। ডেটা বৈধকরণ শিরোনামের কোডেক্স পৃষ্ঠা সহ আমি বেশ কয়েকটি সংস্থান পেয়েছি যদিও আমার পক্ষে কোনওটিই কার্যকর ছিল না। কোডেক্স পৃষ্ঠাটি স্যানিটাইজেশন ফাংশনগুলি, তাদের ব্যবহার এবং তারা কী করে তা তালিকাভুক্ত করে তবে আপনি কেন অন্যটির উপরে কোনও ব্যবহার করবেন বা কোন পরিস্থিতিতে আপনি কোনও স্যানিটাইজেশন ফাংশন ব্যবহার করবেন তা ব্যাখ্যা করতে ব্যর্থ। এই পোষ্টটির উদ্দেশ্যটি হ'ল প্রত্যেককে অনুরোধ করা খারাপ / অযৌক্তিকৃত কোডের উদাহরণগুলি অবদান রাখার জন্য এবং এটি কীভাবে সঠিক স্যানিটাইজেশনের জন্য পুনরায় লেখা উচিত। এটি পোস্টের শিরোনাম বা পোস্ট থাম্বনেইলস সিআরসি বা আরও বিস্তৃত কোডগুলি স্যানিটাইজ করার সাধারণ কোড হতে পারে যা এর স্যানিটাইজেশন পরিচালনা করে handle$_POST Ajax অনুরোধের জন্য ডেটা।

অতিরিক্তভাবে, আমি জানতে চাইছি যে ওয়ার্ডপ্রেস ডেটাবেস যুক্ত করার / আপডেট করার জন্য কাজ করে (যেমন নীচের কোড ব্লকে উল্লিখিতগুলি) আপনার জন্য স্বয়ংক্রিয়ভাবে স্যানিটাইজেশন কাজের যত্ন নেয়? যদি হ্যাঁ, তবে এই ওয়ার্ডপ্রেস ফাংশনগুলিতে প্রেরিত ডেটা স্যানিটাইজ করার জন্য আপনি যখন অতিরিক্ত ব্যবস্থা গ্রহণ করবেন তখন কি কোনও ব্যতিক্রম রয়েছে?

add_user_meta
update_user_meta
add_post_meta
update_post_meta
//just to name a few

এছাড়াও, পিএইচপি এইচটিএমএল এর পিএইচপি ইনলাইন এর বিপরীতে যেমন প্রতিধ্বনিত হয় তখন কি স্যানিটাইজেশন আলাদাভাবে করা দরকার? আমি যা জিজ্ঞাসা করছি সে সম্পর্কে আরও পরিষ্কার হওয়ার জন্য এখানে কোডটি দেওয়া হয়েছে:

<?php echo '<div class="some-div ' . $another_class . '" data-id="' . $id . '" >' . $text . '</div>'; ?>

<div class="some-div <?php echo $another_class; ?>" data-id="<?php echo $id; ?>"><?php echo $text; ?></div>

উপরোক্ত বিবৃতি উভয় একই জিনিস অর্জন। তবে তাদের কি আলাদাভাবে স্যানিটাইজ করা দরকার?


1
আপনি কী স্যানিটাইজ করার চেষ্টা করছেন তা আমরা যদি জানতাম তবে এটি সাহায্য করতে পারে । থিমগুলি ডেটা উপস্থাপনের জন্য ... আপনার কেবলমাত্র ব্যবহারকারী আপনার কাছে জমা দেওয়া ডেটা স্যানিটাইজ করা দরকার এবং সাধারণত জমাগুলি প্লাগইনগুলি দ্বারা পরিচালিত হয়।
ইমান

আউটপুট থেকে বাঁচতে এসইমন_এসটিআর, এসএস_এইচটিএমএল ইত্যাদির মতো এমএএমএএন এস্কেপিং ফাংশন তৈরি করা হয়েছে। আমি ভুল হলে আমাকে সংশোধন করুন। ডেটা উপস্থাপন করার অর্থ আপনি ডেটা আউটপুট করছেন তাই থিমগুলির মধ্যেও পালানো দরকার। অন্যথায় এস্ক ফাংশনগুলির জন্য কোনও প্রয়োজন হত না। আমি পুরোপুরি ওয়ার্ডপ্রেস থিমগুলিতে স্যানিটাইজিং বুঝতে চাই এবং এক বা দুটি কোড টুকরো স্যানিটাইজিংয়ের মধ্যে সীমাবদ্ধ নয়।
জন

"ডেটা উপস্থাপন করার অর্থ আপনি ডেটা আউটপুট করছেন, তাই থিমগুলির মধ্যেও পালানো দরকার" - না। আবার, আপনাকে কেবল সেই ডেটা থেকে বাঁচতে হবে যা আপনি বিশ্বাস করেন না
অনট্রিকপনি

@ অট্রিকপনি এটি আমার জন্য আরও পরিষ্কার হচ্ছে। আমি এটি বুঝতে পারছি তা নিশ্চিত হওয়ার জন্য - আমি মন্তব্য সামগ্রীর হাত থেকে বাঁচতে পারব তবে মন্তব্য আইডি বা পোস্ট আইডি থেকে বাঁচতে পারব না, যদি আমি এইচটিএমএল এ আউটপুট দিই। দুঃখিত, সত্যিই একের পর এক প্রশ্ন নিয়ে আপনাকে ত্রুটিযুক্ত করতে।
জন

2
"আপনাকে কেবল সেই ডেটা থেকে পালাতে হবে যে আপনি বিশ্বাস করেন না" - আমি সম্পূর্ণরূপে সম্মত। কেবলমাত্র আমি যুক্ত করব তা হ'ল আপনার কখনও ডেটা বিশ্বাস করা উচিত নয়;)
ইয়ান ডান

উত্তর:


12

এই কোডেক্স পৃষ্ঠাটি বেশ ভালভাবে ব্যাখ্যা করেছে আমি মনে করি।

সম্ভবত সবচেয়ে গুরুত্বপূর্ণ এবং সাধারণভাবে ব্যবহৃত ফাংশনটি সম্ভবত esc_attr। এই উদাহরণটি ধরুন:

<a href="<?php print $author_url; ?>" title="<?php print $author_name; ?>"> 
  <?php print $author_name; ?>
</a>

যদি $author_nameকোনও "চরিত্র থাকে তবে আপনি আপনার বৈশিষ্ট্যটি বন্ধ করে দিতে পারেন এবং যদি সেই চরিত্রটি অনুসরণ করা হয় তবে onclick="do_something();"এটি আরও খারাপ হতে পারে :)

করণ print esc_attr($author_name)নিশ্চিত করে যে এই জাতীয় অক্ষরগুলি এনকোড হয়েছে এবং ব্রাউজার এমন কিছু করে না যা করা উচিত নয়।

আপনার প্রয়োজন নেই এমন একটি ক্ষেত্রে রয়েছে: আপনি যখন কোনও সংখ্যার প্রত্যাশা করছেন, তখন সেক্ষেত্রে আপনি কেবল ইনপুট ডেটা পূর্ণসংখ্যায় কাস্ট করতে পারেন, উদাহরণস্বরূপ:

print (int)$_POST['some_number'];


আপনি সেখানে তালিকাভুক্ত মেটা * ফাংশনগুলি ইতিমধ্যে ডেটাবেস স্টোরেজগুলির জন্য ইনপুট স্যানিটাইজেশন সম্পর্কে যত্ন নিয়েছেন, সুতরাং আপনাকে সে সম্পর্কে উদ্বিগ্ন হওয়ার দরকার নেই।

wpdb->prepare()পদ্ধতি যখন আপনি ডিবি নিজেকে কোয়েরি করতে ব্যবহার করা প্রয়োজন। এখানে একটি উদাহরণ:

$sql = $wpdb->prepare('
    UPDATE wp_posts SET post_title = %s WHERE ID = %d', 
      $_POST['title'], $_POST['id']);

$wpdb->query($sql);

%sএবং %dকীওয়ার্ড আপনার sanitized $ _POST মান দিয়ে প্রতিস্থাপিত হবে।

ডাব্লুপি.আর.পি. সংগ্রহস্থলের অনেক প্লাগইন-এ আমি দেখতে পাই এমন একটি সাধারণ সাধারণ ভুলটি এটিতে ইতিমধ্যে প্রস্তুত কোয়েরিটি পাস করা (যেমন খারাপভাবে প্রস্তুত) রয়েছে:

$wpdb->prepare('UPDATE wp_posts SET post_title = \''.$_POST['title'].' WHERE ...

এটি করবেন না :)

এছাড়াও, পিএইচপি এইচটিএমএল এর পিএইচপি ইনলাইন এর বিপরীতে যেমন প্রতিধ্বনিত হয় তখন কি স্যানিটাইজেশন আলাদাভাবে করা দরকার?

উপরোক্ত বিবৃতি উভয় একই জিনিস অর্জন। তবে তাদের কি আলাদাভাবে স্যানিটাইজ করা দরকার?

না।


আপনার ইনপুট জন্য ধন্যবাদ। আপনার ব্যাখ্যা আমার জন্য বিষয়গুলিকে আরও স্পষ্ট করে তোলে।
জন

একটি ছোট ব্যাখ্যা আরও প্রয়োজন। যদি আমি পিএইচপি-র মধ্যে একটি স্ট্রিং কোনও ভ্যারিতে (যেমন $ var = 'স্ট্রিং';) পাস করি এবং এটি একটি HTML বৈশিষ্ট্য হিসাবে প্রতিধ্বনিত হয়, তবে আমি প্রতিধ্বনি করার সময় san var স্যানিটাইজ করি। অথবা স্যানিটাইজ করা কেবলমাত্র তখনই প্রয়োজন হয় যদি আমি ডাটাবেস থেকে $ var এর মান টেনে নিই।
জন

স্ক্রিনে এটি প্রতিধ্বনিত করার সময়, কোনও উপায়ে বা অন্য
কোনওভাবে

সুতরাং, যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি, আমি পিএইচপি কোডের মধ্যে স্ট্রিংটি $ var রূপান্তরিত করেছি বা ডাটাবেস থেকে ডেটা টানিয়ে $ ভ্যারিতে পাস করেছি কিনা, উভয়ই আমাকে আউটপুটটি ত্যাগ করতে হবে। সঠিক?
জন

হ্যাঁ, যদি সেই ডেটা ব্যবহারকারীর ইনপুট আসে তবে উদাহরণস্বরূপ কোনও মন্তব্যের লেখকের নাম। যদি "পিএইচপি কোডের মধ্যে স্ট্রিংটি $ ভারে রূপান্তরিত হয়" এর অর্থ যদি আপনি বোঝাতে চান যে আপনি কোনও ভেরিয়েবলের জন্য আপনার একটি মূল্য নির্ধারণ করেছেন তবে স্পষ্টতই - না, আপনাকে সেই পরিবর্তনশীলটি স্যানিটাইজ করতে হবে না
অনেট্রিকপনি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.