Secure, HttpOnly ו־SameSite: תיקון דגלי העוגיות
בקצרה: לעוגיות של סשן ושל התחברות צריכים להיות Secure (נשלחות רק ב־HTTPS), HttpOnly (לא קריאות ל־JavaScript, מה שמגביל את הנזק מ־XSS) ו־SameSite=Lax או Strict (לא נשלחות ברוב הבקשות בין אתרים, מה שעוזר נגד CSRF). הגדירו אותם במקום שבו העוגייה נוצרת, או הוסיפו אותם בשרת האינטרנט כגיבוי.
הקוד וההגדרות נשארים באנגלית.
ראו מה האתר שלכם שולח
curl -sI https://yourdomain.com | grep -i '^set-cookie'סשנים ב־PHP
session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = "Lax"setcookie('name', $value, [
'expires' => time() + 3600,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);וורדפרס
עוגיות ההתחברות של וורדפרס כבר מוגדרות HttpOnly. ודאו שממשק הניהול עובד רק ב־HTTPS כדי שהן יהיו גם Secure:
define( 'FORCE_SSL_ADMIN', true );עוגיות שתוספים מגדירים תלויות בכל תוסף. אם לאחת מהן חסרים דגלים, בדקו אם יש עדכון או השתמשו בפתרון הגיבוי בשרת שמופיע למטה.
nginx (כ־reverse proxy)
proxy_cookie_flags ~ secure httponly samesite=lax;Apache
Header edit Set-Cookie "^((?!.*;\s*Secure).*)$" "$1; Secure"
Header edit Set-Cookie "^((?!.*;\s*HttpOnly).*)$" "$1; HttpOnly"
Header edit Set-Cookie "^((?!.*;\s*SameSite).*)$" "$1; SameSite=Lax"אם העוגיות מגיעות מ־backend שעובר דרך proxy (למשל PHP-FPM מאחורי ProxyPass) ושום דבר לא משתנה, השתמשו ב־Header always edit במקום.
לא לשבור דברים
- עוגיות שה־JavaScript שלכם חייב לקרוא (חלק מבאנרי ההסכמה, בדיקות A/B) לא יכולות להיות HttpOnly.
- צריך
SameSite=Noneלעוגיות שמשמשות בתוך iframe של צד שלישי, והוא מחייבSecure. SameSite=Strictיכול לנתק משתמשים כשהם מגיעים מקישור בדוא״ל.Laxהיא ברירת המחדל הבטוחה יותר.
שאלות נפוצות
האם עוגיות אנליטיקה צריכות את הדגלים האלה?
Secure כן, באתר HTTPS. HttpOnly רק אם אף סקריפט לא צריך לקרוא אותן, וזה נדיר באנליטיקה.
האם SameSite=Lax מספיק נגד CSRF?
הוא חוסם את רוב שליחות הטפסים בין אתרים, אבל טפסים שמשנים נתונים צריכים עדיין טוקני CSRF.
למה סורק עדיין מדווח על דגל חסר אחרי התיקון?
לעתים קרובות מטמון דפים או CDN מגישים את התגובה הישנה, או שתוסף מגדיר עוגייה משלו. נקו את המטמון ובדקו שוב את שורות ה־Set-Cookie.