Django

⌘K
  1. Home
  2. Django
  3. Security setup
  4. Security in Django
  5. ১. ২ ইনপুট স্যানিটাইজেশন HTML টেমপ্লেটে এস্কেপিং দিয়ে

১. ২ ইনপুট স্যানিটাইজেশন HTML টেমপ্লেটে এস্কেপিং দিয়ে

HTML টেমপ্লেটে এস্কেপিং (escaping) একটি গুরুত্বপূর্ণ নিরাপত্তা বৈশিষ্ট্য। এস্কেপিংয়ের মাধ্যমে ব্যবহারকারীর ইনপুটকে সঠিকভাবে প্রদর্শন করা হয়, যাতে ম্যালিশাস স্ক্রিপ্ট কার্যকরী না হয়। আসুন কিছু উদাহরণ দেখি যা বোঝাবে কেন এস্কেপিং প্রয়োজন এবং এটি কিভাবে কাজ করে।

১. অসুরক্ষিত উদাহরণ

ধরি, আমাদের একটি মন্তব্য সিস্টেম আছে যেখানে ব্যবহারকারীরা তাদের নাম এবং মন্তব্য জমা দেয়। যদি আমরা এস্কেপিং না করি, তবে এটি ম্যালিশাস স্ক্রিপ্ট ইনজেকশনের জন্য একটি দুর্বলতা তৈরি করে।

HTML টেমপ্লেট (অসুরক্ষিত):

<!-- templates/comments.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Comments</title>
</head>
<body>
    <h1>Comments</h1>
    <ul>
        {% for comment in comments %}
            <li>
                <strong>{{ comment.name }}</strong>: {{ comment.content }}</li> <!-- Unsafe -->
        {% endfor %}
    </ul>
</body>
</html>

ব্যবহারকারী ইনপুট (অসুরক্ষিত):

ধরি, একজন ব্যবহারকারী ইনপুট দিয়েছে:

  • নাম: John Doe
  • মন্তব্য: <script>alert('Hacked!');</script>

যখন এই ইনপুটটি রেন্ডার হবে, তখন HTML পৃষ্ঠায় এটি দেখতে হবে:

<li>
    <strong>John Doe</strong>: <script>alert('Hacked!');</script></li>

এখন, যখন ব্যবহারকারী এই পৃষ্ঠা ভিজিট করবে, alert('Hacked!'); স্ক্রিপ্টটি কার্যকর হবে এবং একটি সতর্কতা উইন্ডো প্রদর্শিত হবে, যা নিরাপত্তার জন্য একটি বড় সমস্যা।

২. সুরক্ষিত উদাহরণ

এখন আমরা এস্কেপিং ব্যবহার করবো, যাতে ব্যবহারকারীর ইনপুট সঠিকভাবে প্রদর্শন হয় এবং ম্যালিশাস স্ক্রিপ্ট কার্যকরী না হয়।

HTML টেমপ্লেট (সুরক্ষিত):

<!-- templates/comments.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Comments</title>
</head>
<body>
    <h1>Comments</h1>
    <ul>
        {% for comment in comments %}
            <li>
                <strong>{{ comment.name }}</strong>: {{ comment.content|escape }}</li> <!-- Safe -->
        {% endfor %}
    </ul>
</body>
</html>

ব্যবহারকারী ইনপুট (সুরক্ষিত):

অধিকারী ব্যবহারকারী একই ইনপুট প্রদান করেছে:

  • নাম: John Doe
  • মন্তব্য: <script>alert('Hacked!');</script>

এখন, যখন আমরা এই ইনপুটটি রেন্ডার করব, এটি দেখতে হবে:

<li>
    <strong>John Doe</strong>: <script>alert('Hacked!');</script></li>

এখন &lt; এবং &gt; দ্বারা HTML ট্যাগগুলি এস্কেপ করা হয়েছে, ফলে স্ক্রিপ্টটি আর কার্যকরী হবে না। ব্যবহারকারী শুধুমাত্র নিম্নলিখিত দেখতে পাবে:

John Doe: <script>alert('Hacked!');</script>

এস্কেপিং ব্যবহারের ফলে ব্যবহারকারীর ইনপুটের মধ্যে থাকা ম্যালিশাস স্ক্রিপ্ট কার্যকরী হতে পারবে না, যা নিরাপত্তা সুরক্ষায় সহায়তা করে। Django টেমপ্লেটগুলি স্বয়ংক্রিয়ভাবে কিছু স্যানিটাইজেশন করে, তবে যদি আরও নিরাপত্তা নিশ্চিত করতে চান, তখন অবশ্যই escape ফিল্টার ব্যবহার করা উচিত। এটি XSS (Cross-Site Scripting) আক্রমণের বিরুদ্ধে একটি কার্যকর সুরক্ষা ব্যবস্থা।

টেম্পলেট সেফগার্ডস: ব্যবহারের উদাহরণ

১. HTML Escape

Django টেম্পলেট সিস্টেম ডিফল্টভাবে সমস্ত টেক্সটকে HTML-এ escape করে, যাতে ইনপুটের মধ্যে কোনো HTML বা JavaScript কোড প্রবেশ করলে তা কার্যকর না হয়। উদাহরণস্বরূপ:

{% for item in items %}
    <p>{{ item.description }}</p>
{% endfor %}

এখানে item.description যদি কোনো HTML কোড থাকে, তাহলে তা টেম্পলেটে কেবল টেক্সট হিসেবেই প্রদর্শিত হবে, যেমন <strong>Important!</strong> টেক্সট হিসেবে দেখা যাবে, HTML হিসেবে নয়।

উপকারিতা: এটি XSS আক্রমণ প্রতিরোধ করে, কারণ আক্রমণকারী যদি কোনো ক্ষতিকর স্ক্রিপ্ট ইনপুট করে, সেটি কার্যকর হবে না।

২. Safe Filter

যদি আপনি নিশ্চিত হন যে কিছু ইনপুট নিরাপদ এবং HTML হিসেবে প্রদর্শিত হওয়া উচিত, তখন আপনি safe ফিল্টার ব্যবহার করতে পারেন। উদাহরণ:

<p>{{ user_input|safe }}</p>

এখানে user_input যদি কোনো HTML কোড থাকে, তবে সেটি সরাসরি টেম্পলেটে রেন্ডার হবে।

ব্যবহার কবে করবেন: যখন আপনি নিশ্চিত যে ইনপুটটি নিরাপদ এবং এটি HTML হিসেবে প্রদর্শনের জন্য বৈধ। তবে এটি ব্যবহারে সাবধানতা অবলম্বন করা উচিত, কারণ এটি XSS আক্রমণের ঝুঁকি বাড়ায়।

৩. CSRF Token

Django টেম্পলেটসটিতে CSRF (Cross-Site Request Forgery) নিরাপত্তার জন্য টোকেন অন্তর্ভুক্ত করা হয়। উদাহরণস্বরূপ:

<form method="POST">
    {% csrf_token %}
    <input type="text" name="name" required>
    <input type="submit" value="Submit">
</form>

উপকারিতা: CSRF টোকেন নিশ্চিত করে যে ফর্মটি বৈধভাবে আপনার সাইট থেকে সাবমিট করা হয়েছে, যা প্রতারণামূলক ফর্ম সাবমিশন থেকে রক্ষা করে।

ব্যবহার কবে করবেন

  1. সাধারণ টেক্সট রেন্ডারিং: যখন ব্যবহারকারী ইনপুট ব্যবহার করে ডেটা রেন্ডার করেন, তখন এটি সুরক্ষিত রাখার জন্য ডিফল্ট escape ব্যবহার করুন।
  2. নিরাপদ HTML: যখন আপনি নিশ্চিত যে কিছু ইনপুট নিরাপদ, তখন safe ফিল্টার ব্যবহার করতে পারেন।
  3. ফর্ম সাবমিশন: CSRF টোকেন ব্যবহার করুন সব ফর্মে যাতে ডেটা সুরক্ষিত থাকে।

How can we help?