א. בחיים לא להישען על ואלידציה דרך הקליינט, בחיים
( דיי ברור ), תמיד לבצע ואלידציה חוזרת בשרת, כמה שזה מעצבן לכתוב קוד שהוא כמעט כפול אבל למען התקינות והאבטחה יש לעשות את זה.ב. לחסום גישה למקומות שאמורות להיות חסומים, כמה שזה מפתיע המון אנשים לא חוסמים את הגישה אלא מראים רק דף שגיאות , ברגע שה"פורץ" לכאורה יודע על קוץ מסויים במערכת בתיקיה מסויימת שלא מוגנת, הוא ינצל אותה ( אני עושה את זה מידי פעם לאתרים לשלוף מהם קצת מידע, נהייתי האקר לא קטן
)
ג. חלוקת רמות אבטחה וקבוצות אבטחה.
ב ASP.NET יש משהו נורא חמוד שאני דיי אוהב שנקרא ROLES שזה תפקידים,
עכשיו בעיקרון אני יכול לחסום תיקיה לכניסה נגיד ADMIN ואם הלקוח לא יהיה מחובר בתור ה ROLE המסויים הוא לא יכול אפילו לדעת שהיא קיימת, אני יכול לעשות העברה של כל התיקיות שמנסות בחזרה לאינדקס, ככה שאם פורץ מסויים ינסה למצוא דף LOGIN ל ADMIN הוא לא יכול, מה שיפה שבכניסה רגילה המערכת יכולה לזהות אם אתה שייך לאותה קבוצת משתמשים ולתת לך גישה לתיקיה, כל זה בלי קודים מסויימים, בלי בדיקות, בלי כלום, אשף אחד פשוט שמאבטח את כל התיקה.
ד. לבדוק הראשאות, לבדוק הרשאות, לבדוק הרשאות! , לפני כל פעולה שאתם עושים, אם צריך הרשאות לזה לבדוק הרשאות !!!! לפני !!!! שנכנסים בכלל לפונקציה. תמיד להחזיר RETURN אם אין הרשאות.
ה. שימוש בפרוצדורות עדיפה של שימוש בשאילתות , פרוצדורות מאובטחות מבחינת SQL ( לפחות ב SQLSERVER ) אז עדיף להשתמש איתם איפה שאפשר, אני בעיקרון משתמש ב LINQ אז אני לא אמור לחשוש בנוגע ל SQLINJECTION כי ההגנה כבר מוטבעת, בכל אופן כמו שנאמר, לתת לכל משתנה סוג כלשהו, כדי לוודות באמת שזה הסוג הנכון שלא ינסו לעשות INJECTION לאיזה משהו בגלל שהטיפוס לא נכון, לפחות להפיל אותם בטיפוס.
ו.הודעות מפחידות לזיהוי ניסיונות פריצה, כידוע אולי 90 אחוז מהניסיונות פריצה הם דרך ילדודס קטנים ש"מנסים" דברים על האתר שלכם.
אם זיהתם ניסיון פריצה כמו במחרוזת חיפוש כלשהיא מצאתם "SELECT * " או דברים כאלה ( עדיף לעטוף את הפונקציה פעם אחת ולהשתמש בה ) להראות הודעה מפחיד כמו ( ה IP שלך נשמר במערכת של האתר, המערכת זיהתה ניסיון פריצה למערכת, הודעה אוטומטית נשלחה לספקית האינטרנט שלך הממקמת אותך באתר בשעה XYZ עם מחרוזות החיפוש הלא חוקיות בניסיון פריצה ).
ז.להגדיל את ההגנה לסיסמאות, אני יודע שזה יכול להיות מעצבן, אבל אתם לא תאמינו איזה קל זה לפרוץ חשבונות שהם עם אותו שם וסיסמא! זה פשוט מאוד.
לתת הרחבה של הסיסמא נגיד למינימום 6 ספרות + אות אחד. משהו בסיגנון ( אם זה חשוב לכם, הסבירות לאבד פה לקוחות היא ריאליסטית לגמרי אני לדוגמא שוכח סיסמאות שהם לא הברירת מחדל שלי, ומשתדל שלא להירשם לדברים כאלה, אבל זה השיקולים שלכם...)
ח.טוב, אז לא מזמן פרצתי לאיזה אתר דיי מוכר, לא אתן את שמו ונכנסתי למסד נתונים שלו , ולמרבה הפתעתי.. הסיסמאות לא מוצפנות!
חברה מספיק שהאתר שלכם סובל מחוסר אבטחה אין פה שום צורך לדפוק גם את המשתמשים שנרשמו אליכם!!!
יש לי טיפ טוב פה , ממש ממש טוב!
תצפינו ב MD5! ! ! ! !
אז ככה, כשאתם רושמים אנשים לאתר , תוסיפו למחרוזת של הסיסמא 5 תווים קבועים שישארו לכם בקוד נגיד !#&&^ עכשיו במידה שהפריצה היא רק ל DB הפורץ יקבל מאגר של סיסמאות בהצפנה, באותו הרגע הוא ילך לאתרים של RAINBOW ( אתרים שמפצחים סיסמאות של MD5 ) אבל הוא לא יצליח לפרוץ אפילו לא סיסמא אחת! כי היא מוגנת בעוד 5 תווים שהם WILDCARD ככה שההגנה על הסיסמא היא הכי מקסימלית שיכולה להיות ( לא לשכוח להוסיף את זה במחרוזת ה LOGIN שלכם, כדי לשרשר את זה לסיסמא של הלקוח )
ט. לא להראות USERID בשום מקום, ואם כן, לנסות לקבוע USERID לא כמספר
ב SQLSERVER יש מה שנקרא UniqIdentifer מה שנותן GUID שזה מחרוזת של אם אני לא טועה 15 תווים מבוססים על זמן וכל מיני דברים כאלה, מה שזה נותן לכם הוא היכולת להימנע מסריקה של לקוחות או ניסיון לפרוץ דרך ID כלשהו.
י.לא לחשוף גישה ל ADMIN דרך האתר הרגיל , לשמור אותו במועדפים או משהו.
טוב זהו לבינתיים כואבת לי היד!