أساسيات الأمن وOWASP
OWASP Top 10 2025: A01-A05
يعكس OWASP Top 10 2025 مشهد التهديدات الحالي مع تغييرات كبيرة بما في ذلك تركيز جديد على أمان سلسلة التوريد. دعنا نفحص أهم 5 ثغرات ستُختبر فيها.
A01:2025 - التحكم في الوصول المعطل
الترتيب: #1 (الأكثر حرجاً)
الثغرة الأكثر انتشاراً في تطبيقات الويب. تحدث عندما يمكن للمستخدمين التصرف خارج الأذونات المقصودة.
الأنماط الشائعة
| النمط | الوصف | مثال |
|---|---|---|
| IDOR | مرجع كائن مباشر غير آمن | /api/user/123 متاح بدون تفويض |
| تصعيد الصلاحيات | المستخدم يحصل على وظائف المسؤول | تغيير الدور في حقل نموذج مخفي |
| اجتياز المسار | الوصول لملفات مقيدة | ../../etc/passwd |
| فقدان التحكم في الوصول على مستوى الوظيفة | نقاط نهاية المسؤول مكشوفة | /admin/deleteUser بدون فحص المصادقة |
مراجعة كود المقابلة
# كود معرض للخطر - اعثر على المشاكل
@app.route('/api/documents/<doc_id>')
def get_document(doc_id):
document = Document.query.get(doc_id) # المشكلة 1: لا فحص تفويض
return jsonify(document.to_dict())
# النسخة الآمنة
@app.route('/api/documents/<doc_id>')
@login_required
def get_document(doc_id):
document = Document.query.get_or_404(doc_id)
if document.owner_id != current_user.id: # فحص التفويض
abort(403)
return jsonify(document.to_dict())
A02:2025 - سوء التكوين الأمني
الترتيب: #2 (صعد من #5 في 2021)
سوء التكوين أكثر انتشاراً من أي وقت مضى بسبب تعقيد السحابة.
سوء التكوين الشائع
- بيانات الاعتماد الافتراضية لم تتغير
- ميزات غير ضرورية مُفعّلة
- رسائل الخطأ تكشف تتبعات المكدس
- رؤوس الأمان مفقودة
- حاويات S3 مضبوطة كعامة
- سياسات CORS متساهلة جداً
سيناريو المقابلة
السؤال: "راجع هذه الاستجابة. ما رؤوس الأمان المفقودة؟"
HTTP/1.1 200 OK
Content-Type: text/html
Server: Apache/2.4.41
<html>...
الإجابة: رؤوس حرجة مفقودة:
Strict-Transport-Security(HSTS)X-Content-Type-Options: nosniffX-Frame-Options: DENYContent-Security-PolicyX-XSS-Protection(قديم لكن متوقع)
A03:2025 - فشل سلسلة توريد البرمجيات
الترتيب: #3 (جديد - توسيع من المكونات المعرضة للخطر)
إضافة رئيسية في 2025 تعكس هجمات مثل SolarWinds وLog4Shell.
نواقل الهجوم
| النوع | الوصف | مثال |
|---|---|---|
| ارتباك التبعيات | أسماء الحزم الداخلية مختطفة | حزمة npm خبيثة باسم داخلي |
| التقليد الإملائي | أسماء حزم متشابهة | lodash مقابل 1odash |
| المشرفون المخترقون | حزمة شرعية مُحدّثة بشكل خبيث | حادثة Event-stream |
| هجمات خط البناء | نظام CI/CD مخترق | اختراق Codecov |
الدفاعات
# مثال: قفل التبعيات والتحقق من السلامة
# package-lock.json (npm) أو requirements.txt مع التجزئات
dependencies:
lodash:
version: "4.17.21"
integrity: "sha512-v2kDE..." # التحقق من التجزئة
الأدوات: Snyk، Dependabot، OWASP Dependency-Check، npm audit
A04:2025 - الفشل التشفيري
الترتيب: #4 (كان #2 في 2021)
فشل في التشفير يؤدي إلى كشف البيانات الحساسة.
حالات الفشل الشائعة
| الفشل | التأثير | الإصلاح |
|---|---|---|
| خوارزميات ضعيفة | MD5، SHA1 لكلمات المرور | استخدم bcrypt، Argon2 |
| الأسرار المشفرة | المفاتيح في الكود المصدري | استخدم مدير الأسرار |
| التشفير المفقود | البيانات تُنقل بنص واضح | TLS 1.3 في كل مكان |
| إدارة مفاتيح غير صحيحة | المفاتيح مخزنة مع البيانات | HSM، تخزين مفاتيح منفصل |
سؤال المقابلة
س: "كيف ستخزن كلمات مرور المستخدمين بشكل آمن؟"
إجابة قوية:
import bcrypt
def hash_password(password: str) -> bytes:
# توليد الملح والتجزئة في خطوة واحدة
# bcrypt يتعامل تلقائياً مع تخزين الملح
salt = bcrypt.gensalt(rounds=12) # عامل التكلفة 12
return bcrypt.hashpw(password.encode(), salt)
def verify_password(password: str, hashed: bytes) -> bool:
return bcrypt.checkpw(password.encode(), hashed)
النقاط الرئيسية:
- لا تستخدم أبداً MD5/SHA1 لكلمات المرور
- استخدم خوارزميات تكيفية (bcrypt، Argon2، scrypt)
- عامل التكلفة يجب أن يستغرق ~100 مللي ثانية للحساب
A05:2025 - الحقن
الترتيب: #5 (كان #3 في 2021)
بيانات غير موثوقة تُرسل إلى مفسر كجزء من أمر أو استعلام.
أنواع الحقن
| النوع | الهدف | مثال |
|---|---|---|
| حقن SQL | قاعدة البيانات | ' OR '1'='1 |
| حقن الأوامر | صدفة نظام التشغيل | ; rm -rf / |
| حقن LDAP | خدمات الدليل | `)(uid=))( |
| XSS | المتصفح | <script>alert(1)</script> |
الدفاع: الاستعلامات المُعلمة
# معرض للخطر - تسلسل السلاسل
query = f"SELECT * FROM users WHERE id = {user_id}"
# آمن - استعلام مُعلم
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
واقع المقابلة: سيُطلب منك تحديد ثغرات الحقن في الكود. تدرب على التعرف على الأنماط حيث تتدفق مدخلات المستخدم إلى مصارف خطرة.
في الدرس التالي، سنغطي A06-A10 وOWASP LLM Top 10 لأدوار أمان الذكاء الاصطناعي. :::