پکیج Bleach جلوگیری از حملات XSS

  • 1403/12/18

پکیج Bleach جلوگیری از حملات XSS

در توسعه وب، یکی از چالش‌های مهم، جلوگیری از حملات XSS (Cross-Site Scripting) است. کاربران می‌توانند در ورودی‌های متنی خود کدهای مخرب HTML و جاوا اسکریپت قرار دهند که می‌تواند امنیت سایت را به خطر بیندازد. یکی از راه‌حل‌های این مشکل، استفاده از کتابخانه‌هایی برای پاک‌سازی و فیلتر کردن ورودی‌های کاربر است. پکیج Bleach یکی از بهترین گزینه‌ها برای این کار است.

 

پکیج Bleach چیست؟

Bleach یک کتابخانه در پایتون است که برای پاک‌سازی و فیلتر کردن داده‌های HTML ورودی استفاده می‌شود. این پکیج بر پایه html5lib ساخته شده و به توسعه‌دهندگان اجازه می‌دهد تا محتوای HTML را پردازش کرده و تنها تگ‌ها و ویژگی‌های مجاز را نگه دارند.

کاربردهای اصلی Bleach:

  • جلوگیری از حملات XSS در ورودی‌های کاربر
  • پاک‌سازی و فیلتر کردن محتوای HTML
  • حفظ تگ‌های مجاز و حذف تگ‌های خطرناک
  • استفاده در فرم‌های ورودی کاربران در فریمورک‌هایی مانند جنگو

 

نصب پکیج Bleach

برای استفاده از این پکیج، ابتدا آن را نصب کنید:

pip install bleach

استفاده از 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 در مدل‌های جنگو

گاهی می‌خواهیم هنگام ذخیره‌سازی داده‌ها در مدل‌های جنگو، از 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]

در این مثال:

  • قبل از ذخیره کامنت در پایگاه داده، متن ورودی با Bleach پاک‌سازی می‌شود.
  • فقط تگ‌های مجاز مانند <b>, <i>, <a> ذخیره خواهند شد.

۳. نمایش ایمن محتوای HTML در قالب جنگو

در جنگو، هنگام نمایش 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

عضویت در خبرنامه

رایگان ثبت نام کنید و اولین نفری باشید که از پست های جدید مطلع می شوید.