אם אתה רק מתחיל בפיתוח האינטרנט או במסע Node.js, ייתכן שאינך מודע עד כמה חשוב לאבטח את האפליקציה שלך.
Express.js מספק פתרון ביצועי לבניית אפליקציות רשת עורפיות, אך הוא נופל באבטחה. כאשר אתה בונה יישום אינטרנט, אתה צריך אמצעי אבטחה נאותים כדי להגן על נתוני המשתמשים שלך.
למרבה המזל, ישנן שיטות שאתה יכול לנקוט כדי לשפר את האבטחה של יישומי Express.js שלך. טיפים אלה יעזרו כולם לחזק את האבטחה של היישומים שלך באמצעות גישות שונות.
הגדר יישום Express.js
התחל בהגדרת הדגמה שרת אינטרנט Express.js באמצעות npm, מנהל חבילות הצומת. צור תיקיית פרויקט באופן מקומי ושנה את הספרייה אליה בטרמינל שלך.
mkdir express-project
cd express-project
לאחר מכן, צור א package.json קובץ בספריית השורש.
npm init -y
קדימה להתקין את Express.js.
npm להתקין אקספרס
לבסוף, צור א server.js קובץ בספריית השורש של תיקיית הפרויקט שלך, והוסף את הקוד הבא כדי להגדיר שרת אינטרנט בסיסי.
const express = לִדרוֹשׁ("אֶקְסְפּרֶס")
const app = express()
const PORT = process.env. PORT || 5000app.get("/", (req, res) => {
res.json("שלום עולם!")
})
app.listen (PORT, () => {
לְנַחֵם.עֵץ(`מפעיל את השרת פועל http://localhost:${PORT}`)
})
הפעל את השרת עם הפקודה הזו:
node server.js
כעת אתה מוכן לחקור כמה מהאמצעים שבהם תוכל להשתמש כדי לאבטח את אפליקציית Express.js שלך.
1. אבטחת יישומי Express.js באמצעות קסדה
קַסדָה היא תוכנת ביניים של Node.js המסייעת לאבטח אפליקציות בצד השרת על ידי הגדרת כותרות אבטחה שונות של HTTP. כותרות אלו מספקות מנגנוני הגנה חיוניים מפני פרצות אבטחה נפוצות בקצה האחורי, כגון סקריפטים בין אתרים (XSS), זיוף בקשות חוצה אתרים (CSRF) ועוד רבים אחרים.
Express.js אינו מגדיר כותרות אבטחה של HTTP כברירת מחדל, מה שמותיר פגם אבטחה פוטנציאלי שחושף כותרות שעלולות להיות רגישות. באמצעות המידע הזה, שחקנים זדוניים עשויים לקבל גישה לא מורשית או לשבש בדרך אחרת את האפליקציה שלך.
הקסדה פועלת כמגן חיוני, ומבטיחה שתגובות ה-HTTP של האפליקציה מאמצות אמצעי אבטחה נחוצים, ומצמצמות באופן משמעותי את משטח ההתקפה הפוטנציאלי.
בחינת האבטחה של יישומי Express.js ללא קסדה
כשהשרת פועל, בדוק את הכותרות של היישום. קדימה ו בצע בקשות HTTP ל-API באמצעות Postman או כל לקוח אחר שמציג כותרות תגובה. רוב הדפדפנים כוללים קבוצה של כלים למפתחים שיאפשרו לך לעשות זאת.
כאשר אתה שולח בקשות לנקודת הקצה הביתית, עליך לראות תוצאות דומות ב- כותרות חלק מהתגובה בתוך Postman.
שימו לב ל X-Powered-By כּוֹתֶרֶת. בדרך כלל, טכנולוגיות אחורי משתמשות בכותרת זו כדי לציין את המסגרת או תוכנה אחרת המניעה את יישום האינטרנט. אתה צריך בדרך כלל להסיר את X-Powered-By כותרת בסביבת ייצור.
על ידי כך, תמנע מתוקפים פוטנציאליים להשיג מידע בעל ערך שהם יכולים להשתמש בו כדי לנצל נקודות תורפה ידועות הקשורות למחסנית הטכנולוגיה שלך.
בדוק את תצורת האבטחה של שרת Express.js
כדי להעריך את מצב האבטחה של היישומים שלך, נשתמש ב- כותרות אבטחה כלי מקוון. אפליקציה זו תוכננה במיוחד כדי להעריך את תצורת האבטחה של כותרות HTTP עבור יישומים בצד הלקוח, כמו גם, בצד השרת.
ראשית, עליך להפוך את שרת Express.js המקומי שלך לנגיש דרך האינטרנט. ישנן שתי גישות אפשריות להשיג זאת: פריסת אפליקציית Express.js שלך לשרת ענן או שימוש ב-ngrok.
להשתמש בזה, הורד את ה-ngrok קובץ zip, חלץ את קובץ ההפעלה והפעל את היישום. לאחר מכן, הפעל את הפקודה הבאה כדי לארח את שרת Express.js המקומי שלך עם ngrok.
ngrok http 5000
ngrok יוציא מידע קצר שנראה כך:
העתק את המצורף כתובת אתר להעברה ולהדביק אותו לתוך כותרות אבטחה' תיבת הקלט ולחץ על לִסְרוֹק לַחְצָן.
לאחר השלמת הערכת האבטחה, אתה אמור לקבל דוח דומה.
בהתבסס על הדיווח, ברור ששרת Express.js קיבל תקלה ו כיתה. ציון נמוך זה נובע מהיעדר כותרות אבטחה חיוניות של HTTP בתצורת השרת - היעדרם מותיר את השרת חשוף לסיכוני אבטחה פוטנציאליים.
שלב את הקסדה באפליקציית Express.js
כעת, קדימה ושלבו את Helmet ביישום Express.js שלך. הפעל את הפקודה למטה כדי להתקין את התלות.
npm להתקין קסדה
עדכן את קובץ server.js וייבא את הקסדה.
const קסדה = לִדרוֹשׁ("קַסדָה")
כעת, הוסף את הקסדה ליישום Express.js שלך.
app.use (helmet())
לבסוף, הפוך את שרת הפיתוח, העתק את קישור ההעברה ממנו של ngrok מסוף, והדבק אותו ב- כותרת אבטחה שדה קלט כדי לסרוק מחדש את השרת המקומי. לאחר השלמת הסריקה מחדש, אתה אמור לראות תוצאות דומות לאלה:
לאחר שילוב Helmet, Express.js כולל מספר כותרות אבטחה חיוניות בתגובת HTTP. שיפור משמעותי זה גרם ליישום Express.js לעבור ל-an א כיתה.
למרות שהקסדה אינה פתרון חסין תקלות, היא משפרת משמעותית את האבטחה הכוללת של יישום Express.js שלך.
2. אבטחת יישומי Express.js באמצעות Joi, ספריית אימות קלט
ג'וי היא ספריית אימות קלט המסייעת לאבטח אפליקציות Express.js על ידי מתן דרך נוחה לאימות ולחטא את קלט המשתמש. על ידי הגדרת סכימות אימות באמצעות Joi, תוכל לציין את המבנה הצפוי, סוגי הנתונים והאילוצים עבור נתונים נכנסים.
Joi מאמת את הקלט מול הסכימה המוגדרת, ומבטיחה שהוא עומד בקריטריונים שצוינו. זה עוזר למנוע פרצות אבטחה נפוצות כמו הזרקת נתונים, סקריפטים בין-אתרים (XSS) והתקפות אחרות של מניפולציות נתונים.
בצע את השלבים הבאים כדי לשלב את Joi באפליקציה שלך.
- התקן את Joi.
npm להתקין joi
- ייבוא Joi בקובץ server.js שלך.
const ג'וי = לִדרוֹשׁ('ג'וי');
- צור סכימת אימות נתונים של Joi המגדירה את המבנה הצפוי וכל אילוצים עבור נתוני הקלט.
const schema = Joi.object({
דוא"ל: Joi.string().email().required(),
סיסמה: Joi.string().min(5).max(16).נדרש()
}); - אמת את כל הנתונים הנכנסים באמצעות הסכימה המוגדרת.
const { error, value } = schema.validate (req.body);
אם (שגיאה) {
// טיפול בשגיאת אימות
// לדוגמה, החזר תגובת שגיאה
לַחֲזוֹר res.status(400).json({ שְׁגִיאָה: פרטי שגיאה[0].message });
}
על ידי יישום שלבים אלה, אתה יכול למנף את יכולות אימות הקלט של Joi כדי לאבטח את יישומי Express.js שלך. זה יבטיח שהנתונים הנכנסים עומדים באילוצים מוגדרים, וימנע איומי אבטחה פוטנציאליים של מניפולציות נתונים.
3. אבטחת יישומי Express.js באמצעות מנגנון CORS
שיתוף משאבים חוצה מקור (CORS) הוא מנגנון שבו משתמשים שרתי אינטרנט כדי לנהל אילו מקורות - לקוחות או יישומים אחרים בצד השרת - יכולים לגשת למשאבים המוגנים שלהם. מנגנון זה מסייע בהגנה מפני בקשות חוצות מוצא בלתי מורשות, ומונע בעיות כגון התקפות סקריפטים בין-אתרים (XSS).
כדי לאבטח יישומי Express.js באמצעות CORS, בצע את השלבים הבאים:
- התקן את חבילת CORS.
npm להתקין cors
- דרוש והשתמש בתוכנת CORS בקובץ server.js.
const cors = לִדרוֹשׁ('קורס');
app.use (cors());
על ידי שילוב תוכנת האמצע של CORS באפליקציית Express.js שלך, אתה מפעיל שיתוף משאבים חוצה מקורות. זה מבטיח שאתה מפחית סיכוני אבטחה פוטנציאליים הקשורים לבקשות חוצות מקורות.
אבטחת יישומים בצד השרת בקלות
אתה יכול להשתמש באחד או יותר מהאמצעים החיוניים האלה כדי לשפר את האבטחה של יישומי Express.js שלך.
אמנם יש הרבה אמצעים וגישות זמינות כדי להגן על היישומים בצד השרת שלך, אבל הפתרון העיקרי הוא שעליך לתת עדיפות לאבטחה לאורך כל מחזור חיי הפיתוח. זוהי משימה שמתחילה בשלב התכנון וצריכה להמשיך עד לפריסה.