למי אכפת מאבטחת מידע בצד לקוח?

באופן תאורטי לא אמורים להיות חורי אבטחה בצד לקוח, משום שהקוד והפעולה שלו אמורים להיות גלויים לכל, אך מתברר שיש פרקטיקות פיתוח בצד הלקוח שעלולות לגרום לבעיות קשות. אז איך מונעים אותן?

 Westend61/ Getty Images Israel

צלם/תמונה: Westend61/ Getty Images Israel

למי בדיוק אכפת מצד הלקוח כשמדברים על אבטחה? את השאלה הזו אני שומע שוב ושוב כאשר אני מעלה את הנושא. האמת היא שעם כמות חורי האבטחה שאנחנו מגלים באתרים בישראל זה גם נכון – למי אכפת בדיוק מחורי אבטחה כאשר אתרים ביטחוניים מאפשרים לכל מאן דהו לשלוח שאילתות SQL ישירות למסד הנתונים (אתר השב״ס חשף את כל המידע על כל המועמדים לשירות); למי אכפת מדקויות של צד הלקוח כשמרשם האוכלוסין מחליט לשים את שרת הרדיס של ההודעות שלו גלוי ברשת ללא צורך אפילו בסיסמה?

אבל בואו נתנתק מעט מהכשלים הטכנולוגיים הברורים של האתרים הישראליים וננסה לעבוד בסטנדרטים מעט גבוהים יותר. לפאשלות כאלה עולם הפיתוח כבר לא ייפול, אבל זה רק אומר שהאקרים ומזיקים אחרים יתמקדו בחולשות מתוחכמות יותר כשהם ירצו להזיק לאתר, לחברה או לאפליקציה. כלומר, כאשר עוברים לשלב של מעבר לצפוי מראש, מגלים שבעולם מתוחכם יש חשיבות רבה לחורי אבטחה בצד הלקוח.

פרצת XSS ונגזרותיה

אז אילו חורי אבטחה יש בצד הלקוח? באופן תאורטי לא אמורים להיות חורים כאלו, שהרי הקוד של צד הלקוח והפעולה שלו אמורים להיות גלויים לכל אדם. אך מתברר שיש פרקטיקות פיתוח בצד הלקוח שעלולות לגרום לבעיות קשות, אחת מהן נקראת XSS ובאמצעותה נוח להמחיש מה הבעיות שיכולות לקרות.

למי שלא יודע, XSS היא פרצה פשוטה יחסית המאפשרת לתוקף לשתול ג’אווהסקריפט בצד הלקוח. יש כמה סוגי XSS, אבל פה אתמקד בסוג אחד שנקרא stored XSS. כלומר, XSS שנכנס באופן קבוע לאתר דרך מסד הנתונים. איך? למשל כשמישהו מחליט להגיב לכתבה שקרא באתר כמו Ynet, או כל אתר אחר שמאפשר תגובות, וכותב את הטקסט הבא:

<script>alert(‘xss’)</script>

צילום מסך

אם אין הגנות על צד השרת – כל מי שייכנס לאתר יקבל alert נאה שכתוב עליו xss. כמובן הפרצה עצמה יכולה להיות קצת יותר מסוכנת מ-alert מסכן: היא יכולה לכלול קוד שעושה דברים בשם הלקוח, מציג לו דברים או מתקין לו דברים; השמים הם הגבול ברגע שניתן להזריק קוד ג’אווהסקריפט.

כפי שאנחנו יודעים, מומחי אבטחת צד השרת יעשו הכל כדי להבטיח שמה שנכנס לתוך התגובות הוא אך ורק מה שרוצים שייכנס. אם לקוח ינסה להכניס משהו עם תגית <script> הוא ייחסם מיד, אבל מה קורה אם הלקוח מכניס משהו תמים כמו תגית video? נשמע תקין, לא? אין לנו בעיה לאשר תגיות וידאו או כל תגית אחרת, בתנאי שאין בה script או javascript. נכון? ייתכן מאוד (וכן, זה קורה) שבפילטרים שיש בצד השרת יש בדיקה של <script> בלבד. אז יאללה, שיכניס תגיות אחרות. מה יכול לקרות?

ובכן, זה מה שיכול לקרות:

<video><source onerror=”alert(‘xss’)”>

או למשל:

<img srcset=”,,,,,x” onerror=”alert(‘xss’)”>

הפרצות האלו קורות מטעויות של יצרניות הדפדפנים שמאפשרות הרצת ג’אווהסקריפט ממקומות שעדיף להם שלא ירוצו. והן מחמירות ככל שאנחנו נשענים יותר ויותר על API של צדדים שלישיים, שמביאים לנו את המידע משרתים שלא תמיד מאפשרים לנו להשפיע על התוכן שלהם.

אז מה עושים?

איך מונעים את הפרצות האלה? אם אתם מתכנתי צד לקוח, זה הזמן לגלות את פונקציות הסניטציה השונות שלוקחות פלט מהשרת, אלה שאנחנו לא יכולים להיות בטוחים בנוגע אליו, ולנקות אותו בהתאם לצורכי האפליקציה, או להבין למה להשתמש ב-innerHTML במקרים שאינם הכרחיים עלול להיות בעייתי.

אם למשל יש לנו אפליקציה שאנחנו כותבים לה web component והיא מקבלת מידע מהשרת (או יותר גרוע, מצד שלישי) ואנחנו מכניסים את המידע באמצעות:

document.getElementById(‘someID’).innerHTML = contentFromAPI;

אז זו פרצת אבטחה משמעותית, כיוון שאם במידע המגיע מהשרת יש איזשהו XSS, המשתמש שלנו יהיה בסיכון מיידי. במקום זאת, אפשר לעשות משהו כזה:

document.getElementById(‘someID’).textContent = contentFromAPI;

או, אם אנחנו כן רוצים לשמר את ה-HTML בפלט, אפשר לעשות סניטציה באמצעות ספריות ג’אווהסקריפט או באמצעות קוד שלכם. הכל תלוי באפליקציה. חשוב לציין שגם מתכנתי אנגולר ומי שמשתמש ב-bind-html, חשופים לפרצות בצד לקוח וצריכים לעשות סניטציה לקוד עוד היום. זו רק דוגמה אחת לסיבה שבה גם מתכנתי frontend צריכים לדעת על אבטחת מידע.

הכותב הוא מתכנת ב-OATH וכותב ב-internet-israel.com

 

רוצים לשמוע עוד על אבטחת צד לקוח? רן בר-זיק הוא אחד מהדוברים בכנס Geektime Code, שיתקיים ב-6 ביוני בגני התערוכה תל אביב. לפרטים נוספים ורכישת כרטיסים לחצו כאן

רן בר-זיק

מתכנת מנוסה. בנוסף להיותי מתכנת, יש לי נסיון ככלכלן וכמנהל פרויקטים. בעל אתר אינטרנט ישראל המוקדש לפיתוח. אני נשוי ליעל ואב לארבעה ילדים – עומרי, כפיר, דניאל ומיכל.

הגב

6 תגובות על "למי אכפת מאבטחת מידע בצד לקוח?"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

* היי, אנחנו אוהבים תגובות!
תיקונים, תגובות קוטלות וכמובן תגובות מפרגנות - בכיף.
חופש הביטוי הוא ערך עליון, אבל לא נוכל להשלים עם תגובות שכוללות הסתה, הוצאת דיבה, תגובות שכוללות מידע המפר את תנאי השימוש של Geektime, תגובות שחורגות מהטעם הטוב ותגובות שהן בניגוד לדין. תגובות כאלו יימחקו מייד.

סידור לפי:   חדש | ישן | הכי מדורגים
slavo
Guest

התקפות XSS הן לרוב לא בצד הלקוח, אלה בעיה של השרת שמרנדר אותן חזרה לדף. לגבי קלט מעוצב – עדיף לקבל Markdown מאשר HTML (וגם לוודא שהפרסר שלכם מתעלם מתגיות HTML בMarkdown). מחיר קטן בביצועים, רווח גדול באבטחה ובשמירה על העיצוב של הדף.

fsd
Guest

alert “bla”

fsd
Guest

טוב אפשר להגיד שפה נעשית עבודה טובה :)

Alert ;)
Guest

כתבה מעולה תודה

Anonymous
Guest

alert(‘xss’)

pcipcmd@gmail.com
Member

אחלה כתבה
תודה

wpDiscuz

תגיות לכתבה: