Skip to main content
# Django Image Security Validator

حزمة أمنية خفيفة وقوية لإطار عمل **Django**، تهدف إلى حماية الخوادم من هجمات البايلودات والملفات التنفيذية المخفية خلف صيغ الصور، من خلال الفحص المزدوج لترويسات الملفات والتحقق من البكسلات، مع إمكانية التحويل التلقائي الآمن إلى صيغة **WebP**.

---

## 🛠️ المميزات الرئيسية

1. **التحقق من Magic Bytes (عبر مكتبة filetype):** للتأكد من أن الامتداد والترويسة الفعلية للملف متطابقان ومنعان تزوير الملفات التنفيذية (PE files).
2. **التحقق من سلامة البكسلات (عبر Pillow):** فحص عميق للتأكد من أن الملف عبارة عن صورة سليمة وغير تالفة أو ملغومة.
3. **التطهير التلقائي (Auto WebP Conversion):** إعادة بناء الصورة وتحويلها إلى صيغة WebP لإزالة أي بيانات وصفية (Metadata) أو شيفرات مرفقة.
4. **متوافقة مع النماذج (Django Validators):** سهلة الربط المباشر مع `ImageField`.

---

## 📦 التثبيت

يمكنك تثبيت الحزمة محلياً باستخدام **Poetry** أو **pip**:

```bash
# باستخدام pip من مسار الحزمة محلياً
pip install path/to/django-image-sec-validator

# أو عبر Poetry في مشروعك الآخر
poetry add path/to/django-image-sec-validator

🚀 طريقة الاستخدام

1. استخدام الموثق (Validator) في النماذج (models.py)

يمكنك ربط دالة validate_image_security مباشرة بـ ImageField لمنع رفع أي ملفات مشبوهة أو مزيفة:

from django.db import models
from django_image_sec_validator import validate_image_security, process_and_convert_to_webp

class UserProfile(models.Model):
    avatar = models.ImageField(
        upload_to='avatars/',
        validators=[validate_image_security]
    )

    def save(self, *args, **kwargs):
        # التحويل التلقائي إلى WebP عند الحفظ لتطهير الصورة نهائياً
        if self.avatar and not self.avatar.name.endswith('.webp'):
            self.avatar = process_and_convert_to_webp(self.avatar)
        super().save(*args, **kwargs)

2. الاستخدام المباشر للدوال في الـ Views أو Forms

إذا كنت ترغب في معالجة الملفات برمجياً قبل حفظها:

from django.core.exceptions import ValidationError
from django_image_sec_validator import validate_image_security, process_and_convert_to_webp

def my_upload_view(request):
    if request.method == 'POST':
        uploaded_file = request.FILES.get('image')
        
        try:
            # 1. التحقق من أمان الملف
            validate_image_security(uploaded_file)
            
            # 2. معالجة وتحويل الصورة إلى WebP آمنة
            clean_image = process_and_convert_to_webp(uploaded_file, quality=85)
            
            # ... تابع حفظ الملف أو استخدامه ...
            
        except ValidationError as e:
            # التعامل مع الملف المرفق المرفوض
            print(e.message)

🛡️ متطلبات التشغيل

dependencies = [ "pillow (>=12.3.0,<13.0.0)", "filetype (>=1.2.0,<2.0.0)", "django (>=5.2.17,<6.0.0)", ]


📄 الترخيص

هذا المشروع مرخص تحت رخصة MIT.

Metadata

Release files for django-image-sec-validator 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-image-sec-validator 0.1.1
File Size Uploaded
django_image_sec_validator-0.1.1.tar.gz 2.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-image-sec-validator 0.1.1
File Interpreter ABI Platform
django_image_sec_validator-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 6.7 kB

Release files / django_image_sec_validator-0.1.1.tar.gz

Download URL django_image_sec_validator-0.1.1.tar.gz
Size 2.9 kB
Tags Source
SHA-256 checksum
How to use checksums
877f6104b8241e8ea3ed8178f8081205dcdcdb69ae3c0b04f2711f19d352ef68
BLAKE2b-256 checksum
How to use checksums
45fcf3e9a398e0dea86f2c997921903e4384fd87d88eda34ade8a72efa9a3849
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.13.5 Linux/6.18.40.1-microsoft-standard-WSL2

Release files / django_image_sec_validator-0.1.1-py3-none-any.whl

Download URL django_image_sec_validator-0.1.1-py3-none-any.whl
Size 3.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
db3f9e30b13dd321521a5f21efce41ca1877db5f90eb9369415b7418b1c053c2
BLAKE2b-256 checksum
How to use checksums
263bffc9a8aeafa84acd56fda39da595443c2e3660c69d993c8483a617779abd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.13.5 Linux/6.18.40.1-microsoft-standard-WSL2

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page