এটি অফলাইনে চলছে এমন এসও ডকুমেন্টেশন বিটা থেকে একীভূত রেফারেন্স হিসাবে ক্রস পোস্টিং।
সমস্যা
ক্রস-সাইট স্ক্রিপ্টিং কোনও ওয়েব ক্লায়েন্টের দ্বারা রিমোট কোডের অনিচ্ছাকৃত সম্পাদন execution কোনও ওয়েব অ্যাপ্লিকেশন XSS- এ নিজেকে প্রকাশ করতে পারে যদি এটি কোনও ব্যবহারকারীর কাছ থেকে ইনপুট নেয় এবং এটি সরাসরি কোনও ওয়েব পৃষ্ঠায় আউটপুট করে। যদি ইনপুটটিতে এইচটিএমএল বা জাভাস্ক্রিপ্ট অন্তর্ভুক্ত থাকে তবে ওয়েব ক্লায়েন্ট দ্বারা এই সামগ্রীটি রেন্ডার করা হলে দূরবর্তী কোড কার্যকর করা যেতে পারে।
উদাহরণস্বরূপ, যদি কোনও তৃতীয় পক্ষের একটি জাভাস্ক্রিপ্ট ফাইল থাকে:
// http://example.com/runme.js
document.write("I'm running");
এবং একটি পিএইচপি অ্যাপ্লিকেশন সরাসরি এতে প্রবেশ করে একটি স্ট্রিং আউটপুট করে:
<?php
echo '<div>' . $_GET['input'] . '</div>';
যদি একটি চেক না করা জিইটি প্যারামিটার থাকে <script src="http://example.com/runme.js"></script>
তবে পিএইচপি স্ক্রিপ্টের আউটপুট হবে:
<div><script src="http://example.com/runme.js"></script></div>
তৃতীয় পক্ষের জাভাস্ক্রিপ্ট চলবে এবং ব্যবহারকারী ওয়েব পৃষ্ঠায় "আমি চলমান" দেখবে।
সমাধান
সাধারণ নিয়ম হিসাবে কখনই ক্লায়েন্টের কাছ থেকে আসা ইনপুটকে বিশ্বাস করবেন না। প্রতিটি জিইটি, পোস্ট, এবং কুকি মান যে কোনও কিছু হতে পারে এবং তাই বৈধ হওয়া উচিত। এই মানগুলির কোনও আউটপুট দেওয়ার সময় এগুলি এড়িয়ে চলুন যাতে সেগুলি অপ্রত্যাশিতভাবে মূল্যায়ন করা হবে না।
মনে রাখবেন যে এমনকি সহজ অ্যাপ্লিকেশনগুলিতে ডেটা চারপাশে স্থানান্তরিত হতে পারে এবং সমস্ত উত্সের উপর নজর রাখা শক্ত হবে। সুতরাং সর্বদা আউটপুট এড়িয়ে চলা একটি সেরা অনুশীলন ।
পিএইচপি প্রসঙ্গের উপর নির্ভর করে আউটপুট এড়ানোর কয়েকটি উপায় সরবরাহ করে।
ফিল্টার ফাংশন
PHPs ফিল্টার ফাংশন পিএইচপি স্ক্রিপ্টের ইনপুট ডেটা করার অনুমতি sanitized বা যাচাই মধ্যে নানাভাবে । ক্লায়েন্ট ইনপুট সংরক্ষণ বা আউটপুট দেওয়ার সময় এগুলি কার্যকর।
এইচটিএমএল এনকোডিং
htmlspecialchars
যে কোনও "এইচটিএমএল বিশেষ অক্ষরগুলি" তাদের এইচটিএমএল এনকোডিংগুলিতে রূপান্তরিত করবে, যার অর্থ সেগুলি তখন স্ট্যান্ডার্ড এইচটিএমএল হিসাবে প্রক্রিয়া করা হবে না । এই পদ্ধতিটি ব্যবহার করে আমাদের পূর্ববর্তী উদাহরণটি ঠিক করতে:
<?php
echo '<div>' . htmlspecialchars($_GET['input']) . '</div>';
// or
echo '<div>' . filter_input(INPUT_GET, 'input', FILTER_SANITIZE_SPECIAL_CHARS) . '</div>';
আউটপুট হবে:
<div><script src="http://example.com/runme.js"></script></div>
<div>
ট্যাগের ভিতরে থাকা সমস্ত কিছুই ব্রাউজার দ্বারা জাভাস্ক্রিপ্ট ট্যাগ হিসাবে ব্যাখ্যা করা হবে না , পরিবর্তে একটি সাধারণ পাঠ্য নোড হিসাবে। ব্যবহারকারী নিরাপদে দেখতে পাবেন:
<script src="http://example.com/runme.js"></script>
ইউআরএল এনকোডিং
একটি গতিশীল উত্পাদিত ইউআরএল urlencode
আউটপুট করার সময় , পিএইচপি নিরাপদে বৈধ URL গুলি আউটপুট দেওয়ার জন্য ফাংশন সরবরাহ করে । সুতরাং, উদাহরণস্বরূপ, যদি কোনও ব্যবহারকারী ডেটা ইনপুট করতে সক্ষম হয় যা অন্য জিইটি প্যারামিটারের অংশ হয়ে যায়:
<?php
$input = urlencode($_GET['input']);
// or
$input = filter_input(INPUT_GET, 'input', FILTER_SANITIZE_URL);
echo '<a href="http://example.com/page?input="' . $input . '">Link</a>';
যে কোনও দূষিত ইনপুট একটি এনকোডযুক্ত ইউআরএল প্যারামিটারে রূপান্তরিত হবে।
বিশেষায়িত বাহ্যিক গ্রন্থাগার বা OWASP অ্যান্টি সামি তালিকা ব্যবহার করা
কখনও কখনও আপনি এইচটিএমএল বা অন্য ধরণের কোড ইনপুট প্রেরণ করতে চাইবেন। আপনাকে অনুমোদিত শব্দগুলির (সাদা তালিকা) এবং অন-অনুমোদিত (কালো তালিকাভুক্ত) একটি তালিকা বজায় রাখতে হবে।
আপনি ওডাব্লিউএএসপি অ্যান্টিস্যামি ওয়েবসাইটে উপলব্ধ স্ট্যান্ডার্ড তালিকাগুলি ডাউনলোড করতে পারেন । প্রতিটি তালিকা একটি নির্দিষ্ট ধরণের মিথস্ক্রিয়া জন্য উপযুক্ত (ইবে এপি, টিনিএমসিএ, ইত্যাদি ...)। এবং এটি ওপেন সোর্স।
এইচটিএমএল ফিল্টার করার জন্য এবং সাধারণ ক্ষেত্রে এক্সএসএস আক্রমণ প্রতিরোধ করতে এবং কমপক্ষে পাশাপাশি অ্যান্টিস্যামি তালিকাগুলি খুব সহজ ব্যবহারের সাথে সম্পাদনা করার জন্য রয়েছে গ্রন্থাগার রয়েছে। উদাহরণস্বরূপ আপনার এইচটিএমএল পিউরিফায়ার রয়েছে