# 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)
| File | Size | Uploaded | |
|---|---|---|---|
| django_image_sec_validator-0.1.1.tar.gz | 2.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|