Django

⌘K
  1. Home
  2. Django
  3. Security setup
  4. Security in Django
  5. ১. ৩ API-তে ইনপুট স্যানিটাইজেশন

১. ৩ API-তে ইনপুট স্যানিটাইজেশন

Django REST Framework (DRF) ব্যবহার করে API-তে ইনপুট স্যানিটাইজেশন করার জন্য, আপনি স্যানিটাইজেশন যুক্ত করতে পারেন Serializer ক্লাসের validate মেথডে। এইভাবে, আপনি ইনপুট ডেটা স্যানিটাইজ করে গ্রহণ করতে পারেন। এখানে একটি প্র্যাকটিক্যাল উদাহরণ দেওয়া হলো যেখানে আমরা একটি সিম্পল Comment API তৈরি করবো, এবং ইনপুট স্যানিটাইজেশন যুক্ত করবো।

১. মডেল তৈরি করা

প্রথমে আমাদের একটি Comment মডেল তৈরি করতে হবে:

# models.py
from django.db import models

class Comment(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    content = models.TextField()

    def __str__(self):
        return self.name

২. সেরিয়ালাইজার তৈরি করা

এখন একটি Serializer তৈরি করুন যেখানে ইনপুট স্যানিটাইজেশন যুক্ত হবে:

# serializers.py
from rest_framework import serializers
from .models import Comment
import bleach

class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = ['name', 'email', 'content']

    def validate_name(self, value):
        return bleach.clean(value)  # Sanitizing name input

    def validate_email(self, value):
        return value.strip()  # Stripping spaces from email input

    def validate_content(self, value):
        return bleach.clean(value)  # Sanitizing content input

৩. ভিউস তৈরি করা

এখন একটি API ভিউ তৈরি করুন যা এই Serializer ব্যবহার করবে:

# views.py
from rest_framework import generics
from .models import Comment
from .serializers import CommentSerializer

class CommentCreateView(generics.CreateAPIView):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer

৪. URL কনফিগারেশন

এখন API এর জন্য URL কনফিগার করুন:

# urls.py
from django.urls import path
from .views import CommentCreateView

urlpatterns = [
    path('comments/', CommentCreateView.as_view(), name='comment-create'),
]

৫. স্যানিটাইজেশন প্রক্রিয়া

৫.১. ইনপুট ডেটা

ধরি, একজন ব্যবহারকারী একটি কমেন্ট করতে চায় এবং সে নিম্নলিখিত ইনপুট দিয়ে থাকে:

{
    "name": "<script>alert('Hacked!');</script>",
    "email": "example@example.com ",
    "content": "<p>This is a comment!</p><script>alert('Hacked!');</script>"
}

৫.২. স্যানিটাইজেশন ফলাফল

  1. নাম:
    • bleach.clean(value) কল করার ফলে নামের ইনপুটটি স্যানিটাইজ হবে। এখানে <script> ট্যাগটি অপসারিত হবে।
    • ফলাফল হবে: "" (শূন্য স্ট্রিং)
  2. ইমেইল:
    • value.strip() কল করার ফলে ইমেইলের শুরু ও শেষের স্পেস অপসারিত হবে।
    • ফলাফল হবে: "example@example.com"
  3. কনটেন্ট:
    • bleach.clean(value) কল করার ফলে কনটেন্টে থাকা <script> ট্যাগটি অপসারিত হবে, এবং সেফ HTML ট্যাগগুলি (যেমন <p>) অপরিবর্তিত থাকবে।
    • ফলাফল হবে: "<p>This is a comment!</p>"

৬. স্যানিটাইজেশনের সুবিধা

  • নিরাপত্তা: ম্যালিশাস স্ক্রিপ্ট ইনজেকশন প্রতিরোধ করতে সহায়তা করে।
  • সঠিক ইনপুট: অপ্রয়োজনীয় স্পেস অপসারণ করে ইনপুটের গুণগত মান বাড়ায়।

৭. API পরীক্ষা

আপনার API তৈরি হয়ে গেলে, আপনি Postman বা Curl এর মাধ্যমে কমেন্ট ইনপুট পাঠাতে পারেন। যদি ম্যালিশাস স্ক্রিপ্ট ইনপুট থাকে, তবে এটি স্যানিটাইজ হয়ে সঠিকভাবে কাজ করবে।

How can we help?