پکیج Bleach جلوگیری از حملات XSS
- 1403/12/18
در توسعه وب، یکی از چالشهای مهم، جلوگیری از حملات XSS (Cross-Site Scripting) است. کاربران میتوانند در ورودیهای متنی خود کدهای مخرب HTML و جاوا اسکریپت قرار دهند که میتواند امنیت سایت را به خطر بیندازد. یکی از راهحلهای این مشکل، استفاده از کتابخانههایی برای پاکسازی و فیلتر کردن ورودیهای کاربر است. پکیج Bleach یکی از بهترین گزینهها برای این کار است.
Bleach یک کتابخانه در پایتون است که برای پاکسازی و فیلتر کردن دادههای HTML ورودی استفاده میشود. این پکیج بر پایه html5lib ساخته شده و به توسعهدهندگان اجازه میدهد تا محتوای HTML را پردازش کرده و تنها تگها و ویژگیهای مجاز را نگه دارند.
برای استفاده از این پکیج، ابتدا آن را نصب کنید:
pip install bleach
فرض کنید یک فرم متنی در جنگو داریم که کاربران میتوانند در آن کامنت ارسال کنند. میخواهیم از Bleach استفاده کنیم تا فقط تگهای امن مانند <b>
, <i>
, <a>
را مجاز کرده و سایر تگها را حذف کنیم.
مثال: پاکسازی متن ورودی در فرم جنگو
import bleach
# متن ورودی آلوده
user_input = '<script>alert("Hacked!");</script><b>متن بولد</b> <a href="https://example.com">لینک</a>'
# پاکسازی متن با مجوز دادن به برخی تگهای خاص
clean_text = bleach.clean(user_input, tags=['b', 'i', 'u', 'a'], attributes={'a': ['href']})
print(clean_text)
خروجی:
<b>متن بولد</b> <a href="https://example.com">لینک</a>
همانطور که میبینید، تگ <script>
حذف شده است و فقط تگهای مجاز باقی ماندهاند.
گاهی میخواهیم هنگام ذخیرهسازی دادهها در مدلهای جنگو، از Bleach برای فیلتر کردن ورودیها استفاده کنیم.
مثال: پاکسازی خودکار در مدل جنگو
from django.db import models
import bleach
class Comment(models.Model):
content = models.TextField()
def save(self, *args, **kwargs):
# پاکسازی متن قبل از ذخیره در دیتابیس
self.content = bleach.clean(self.content, tags=['b', 'i', 'u', 'a'], attributes={'a': ['href']})
super().save(*args, **kwargs)
def __str__(self):
return self.content[:50]
در این مثال:
<b>
, <i>
, <a>
ذخیره خواهند شد.در جنگو، هنگام نمایش HTML ذخیرهشده، باید مطمئن شویم که محتوای امنی نمایش داده میشود. میتوانیم از bleach.clean
یا bleach.linkify
برای پردازش و لینکگذاری متون استفاده کنیم.
مثال: لینکگذاری خودکار در قالب جنگو
import bleach
text = "برای اطلاعات بیشتر به https://example.com مراجعه کنید."
# اضافه کردن لینک به متن
linked_text = bleach.linkify(text)
print(linked_text)
خروجی:
برای اطلاعات بیشتر به <a href="https://example.com" rel="nofollow">https://example.com</a> مراجعه کنید.
این ویژگی بهصورت خودکار لینکهای متنی را به <a>
تبدیل کرده و از ویژگی rel="nofollow"
برای امنیت بیشتر استفاده میکند.
پکیج Bleach یک ابزار قدرتمند برای پاکسازی دادههای HTML ورودی و جلوگیری از حملات XSS است. در جنگو، میتوان از آن برای ایمنسازی فرمهای کاربر، مدلها و حتی محتوای نمایشی در قالبها استفاده کرد.
ویژگیهای مهم Bleach:
حذف تگهای خطرناک
مجاز کردن تگها و ویژگیهای مشخص
تبدیل خودکار لینکهای متنی به <a>
مناسب برای استفاده در فرمها و مدلهای جنگو
استفاده از این کتابخانه در کنار سایر تدابیر امنیتی باعث افزایش امنیت پروژههای جنگو میشود.
لینک پکیج و مستندات: bleach
رایگان ثبت نام کنید و اولین نفری باشید که از پست های جدید مطلع می شوید.