קטגוריית OWASP: MASVS-CODE: איכות הקוד
סקירה כללית
WebView הוא רכיב דפדפן מוטמע באפליקציות ל-Android שמאפשר להציג תוכן מהאינטרנט בתוך אפליקציה. הוא מעבד HTML, CSS JavaScript בתוך ממשק המשתמש של האפליקציה.
החדרת סקריפטים זדוניים לאפליקציות קשורה באופן כללי להרצה של קוד זדוני בהקשר של אפליקציית הקורבן. במסגרת המסמך הזה, הנושא יתבסס באופן ספציפי על החדירה של קוד JavaScript זדוני ל-WebView חשוף.
כשאפליקציה מקבלת JavaScript זדוני ב-WebView בלי אימות או טיהור מספיקים, האפליקציה חשופה ליצירת סקריפטים חוצי-אפליקציות.
השפעה
ניתן לנצל נקודות חולשה של סקריפטים חוצי-אפליקציות כשהם נשלטים על ידי תוקף תוכן JavaScript מועבר ל-WebView של האפליקציה הפגיעה בלי לעבור מאומתים או חסומות. כתוצאה מכך, קוד ה-JavaScript שסופק על ידי התוקף מופעל בהקשר של רכיב ה-WebView באפליקציית הקורבן. לאחר מכן, קוד ה-JavaScript הזדוני יכול להשתמש באותן הרשאות כמו של אפליקציית הקורבן, דבר שעלול להוביל לגניבת נתוני משתמשים רגישים ולפריצה לחשבון.
מיטיגציות
השבתת JavaScript
אם האפליקציה שלך לא דורשת JavaScript, השבתה שלו תבטיח לא הופך לאיום:
Kotlin
// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings
// Disable JavaScript
webSettings.javaScriptEnabled = false
Java
// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);
אם האפליקציה שלכם כן דורשת JavaScript, עליכם לוודא שאתם הבעלים של כל קוד JavaScript שמוענק ל-WebView או שאתם שולטים בו. מומלץ לא לאפשר ל-WebView להריץ JavaScript שרירותי. אפשר לעיין בהנחיות בקטע הבא.
מוודאים שרק התוכן המצופה נטען ל-WebView
כשמשתמשים בשיטות כמו shouldOverrideUrlLoading()
, loadUrl()
או evaluateJavascript()
,
, חשוב לוודא שכל כתובות ה-URL שמועברות אליהן נבדקות. כפי שצוין קודם, כל JavaScript שמוענק ל-WebView צריך להגיע רק מדומיינים צפויים, לכן חשוב לוודא מה נטען.
בדיקת מסמכי התיעוד של אימות הקלט של OWASP ושל מכשיר Android הזה רשימת משימות לאבטחה עבור רכיבי WebView לקבלת עצות ודוגמאות טובות.
הגדרת הגדרות גישה מאובטחות לקבצים ב-WebView
כדי למנוע הפעלה שרירותית של JavaScript ברכיבי WebView, מוודאים שאין גישה לקבצים. כשמאבטחים את הגישה לקבצים, צריך להביא בחשבון את WebSettings
הבא:
- להשבית את הגישה לקבצים. כברירת מחדל, הערך של
setAllowFileAccess
מוגדר ל-True
ברמת API 29 ומטה, וכך מתאפשרת גישה לקבצים מקומיים. ברמת API 30 ומעלה, ערך ברירת המחדל הואFalse
. כדי לוודא שהגישה לקבצים אסורה, להגדיר במפורש אתsetAllowFileAccess
כ-False
להשבית את הגישה לתוכן. הגדרת ברירת המחדל של
setAllowContentAccess
היאTrue
. גישה לכתובת ה-URL של התוכן מאפשרת ל-WebView לטעון תוכן מספק תוכן שמותקן במערכת. אם לאפליקציה שלכם לא נדרשת גישה לתוכן, צריך להגדיר אתsetAllowContentAccess
לערךFalse
כדי למנוע שימוש לרעה פוטנציאלי במקרה של התקפת סקריפטים באפליקציות שונות.kotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false
java
java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);
הפעלת הגלישה הבטוחה
מפעילים את הגלישה הבטוחה ב-AndroidManifest.xml
כדי לסרוק כתובות URL שמועברות ל-WebView ולזהות פישינג או דומיינים זדוניים:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
משאבים
- מסמכי תיעוד בנושא גלישה בטוחה
- חומר עזר למפתחים של WebView
- חומר עזר למפתחים בנושא WebSettings ל-WebView
- מסמכי התיעוד למפתחים בנושא setAllowFileAccess
- חומר עזר למפתחים: setAllowContentAccess