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>"
}
৫.২. স্যানিটাইজেশন ফলাফল
- নাম:
bleach.clean(value)কল করার ফলে নামের ইনপুটটি স্যানিটাইজ হবে। এখানে<script>ট্যাগটি অপসারিত হবে।- ফলাফল হবে:
""(শূন্য স্ট্রিং)
- ইমেইল:
value.strip()কল করার ফলে ইমেইলের শুরু ও শেষের স্পেস অপসারিত হবে।- ফলাফল হবে:
"example@example.com"
- কনটেন্ট:
bleach.clean(value)কল করার ফলে কনটেন্টে থাকা<script>ট্যাগটি অপসারিত হবে, এবং সেফ HTML ট্যাগগুলি (যেমন<p>) অপরিবর্তিত থাকবে।- ফলাফল হবে:
"<p>This is a comment!</p>"
৬. স্যানিটাইজেশনের সুবিধা
- নিরাপত্তা: ম্যালিশাস স্ক্রিপ্ট ইনজেকশন প্রতিরোধ করতে সহায়তা করে।
- সঠিক ইনপুট: অপ্রয়োজনীয় স্পেস অপসারণ করে ইনপুটের গুণগত মান বাড়ায়।
৭. API পরীক্ষা
আপনার API তৈরি হয়ে গেলে, আপনি Postman বা Curl এর মাধ্যমে কমেন্ট ইনপুট পাঠাতে পারেন। যদি ম্যালিশাস স্ক্রিপ্ট ইনপুট থাকে, তবে এটি স্যানিটাইজ হয়ে সঠিকভাবে কাজ করবে।