Cookies و Sessions — أساسيات الأمن السيبراني
Cookies و Sessions
ما هي Cookies؟
ملفات نصية صغيرة يخزنها المتصفح.
كيف تعمل؟
1. الخادم يرسل: Set-Cookie: session=abc123
2. المتصفح يحفظها
3. المتصفح يرسلها في كل طلب: Cookie: session=abc123
أنواع Cookies
Session Cookies
- تُحذف عند إغلاق المتصفح
- للجلسة المؤقتة
Persistent Cookies
- تبقى لفترة محددة
- Expires=Wed, 21 Oct 2025 07:28:00 GMT
خصائص الأمان
HttpOnly
- لا يمكن الوصول لها من JavaScript
- حماية من XSS
Set-Cookie: session=abc123; HttpOnlySecure
- ترسل فقط عبر HTTPS
Set-Cookie: session=abc123; SecureSameSite
- منع CSRF
Set-Cookie: session=abc123; SameSite=StrictSessions
ما هي الجلسة (Session)؟
بيانات المستخدم المخزنة في الخادم.
كيف تعمل؟
1. المستخدم يسجّل الدخول
2. الخادم ينشئ session ويرسل session ID في cookie
3. المتصفح يرسل session ID في كل طلب
4. الخادم يستخدم ID للوصول لبيانات الجلسة
هجمات شائعة
Session Hijacking
سرقة session ID لانتحال الهوية.
Session Fixation
إجبار المستخدم على استخدام session ID معروف.
الوقاية
- استخدم HTTPS
- HttpOnly و Secure cookies
- أعد إنشاء session ID بعد تسجيل الدخول
- انتهاء صلاحية الجلسات
# مثال على Sessions و Cookies في Flask
from flask import Flask, session, request, make_response
import secrets
app = Flask(__name__)
app.secret_key = secrets.token_hex(16)
# ===== استخدام Cookies =====
@app.route('/set_cookie')
def set_cookie():
"""تعيين Cookie"""
response = make_response("Cookie تم تعيينها!")
# Cookie بسيط
response.set_cookie('username', 'ahmed')
# Cookie آمن
response.set_cookie(
'session_id',
secrets.token_hex(16),
max_age=3600, # ساعة واحدة
secure=True, # HTTPS فقط
httponly=True, # لا يمكن الوصول من JS
samesite='Lax' # حماية CSRF
)
return response
@app.route('/get_cookie')
def get_cookie():
"""قراءة Cookie"""
username = request.cookies.get('username')
return f"مرحباً {username}"
@app.route('/delete_cookie')
def delete_cookie():
"""حذف Cookie"""
response = make_response("Cookie تم حذفها!")
response.set_cookie('username', '', max_age=0)
return response
# ===== استخدام Sessions =====
@app.route('/login')
def login():
"""تسجيل دخول وإنشاء session"""
# تخزين بيانات في session
session['user_id'] = 123
session['username'] = 'ahmed'
session['is_admin'] = False
return "تم تسجيل الدخول!"
@app.route('/dashboard')
def dashboard():
"""صفحة محمية تحتاج session"""
if 'user_id' not in session:
return "يجب تسجيل الدخول أولاً!", 401
username = session.get('username')
return f"مرحباً {username}"
@app.route('/logout')
def logout():
"""تسجيل خروج وحذف session"""
session.clear()
return "تم تسجيل الخروج!"
# ===== Session Security =====
@app.route('/secure_login', methods=['POST'])
def secure_login():
"""تسجيل دخول آمن"""
username = request.form.get('username')
password = request.form.get('password')
# التحقق من البيانات (مثال مبسط)
if username == 'admin' and password == 'secret':
# إعادة إنشاء session ID (منع Session Fixation)
session.clear()
# تعيين بيانات جديدة
session['user_id'] = 1
session['username'] = username
# تعيين علامة لتتبع regeneration
session['_regenerated'] = True
return "تم تسجيل الدخول بأمان!"
return "بيانات خاطئة!", 401
# ===== محاكاة Session Hijacking Detection =====
@app.before_request
def check_session_integrity():
"""فحص سلامة الجلسة"""
if 'user_id' in session:
# تحقق من User-Agent (بسيط جداً)
current_ua = request.headers.get('User-Agent')
stored_ua = session.get('_user_agent')
if stored_ua and stored_ua != current_ua:
# محاولة hijacking محتملة
session.clear()
return "جلسة مشبوهة!", 401
@app.after_request
def store_user_agent(response):
"""حفظ User-Agent في session"""
if 'user_id' in session:
session['_user_agent'] = request.headers.get('User-Agent')
return responseاختبر فهمك