Threats and Attacks

מהו XSS (Cross-Site Scripting)?

Cross-Site Scripting, או XSS, הוא פגם אבטחה באתרים שמאפשר לתוקפים להוסיף סקריפטים מזיקים לדפי אינטרנט. רוב הזמן, סקריפטים אלו נכתבים ב-JavaScript.

מהו XSS (Cross-Site Scripting)?

Cross-Site Scripting, או XSS, הוא פגם אבטחה באתרים שמאפשר לתוקפים להוסיף סקריפטים מזיקים לדפי אינטרנט. רוב הזמן, סקריפטים אלו נכתבים ב-JavaScript.

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

XSS, כמו SQL Injection, מופיע באופן קבוע ב-OWASP Top 10 כאחת מהפגיעויות הנפוצות ביותר ביישומי אינטרנט.

plexicus-xss-attack-ilustration

איך XSS עובד?

XSS לעיתים קרובות מכוון ליישומי אינטרנט שלא בודקים ומנקים כראוי קלט משתמש.

לדוגמה, אם תיבת תגובות מאפשרת HTML גולמי או JavaScript ללא כל סינון, תוקף יכול להוסיף קוד כזה:

<script>alert('Hacked!');</script>

כאשר הקורבנות צופים בדף, הקוד הזדוני רץ בתוך הדפדפן שלהם.

למה XSS חשוב באבטחת סייבר

XSS יכול להוביל להפרה גדולה יותר:

  • השתלטות על חשבון (גניבת עוגיות סשן כדי להתחזות למשתמשים)
  • גניבת נתונים (לכידת קלטים מטפסים כמו סיסמאות או כרטיסי אשראי)
  • התקפות פישינג (הזרקת טפסי התחברות מזויפים)
  • הפצת תוכנות זדוניות (הפניית משתמשים לאתרים זדוניים)

סוגי XSS

  1. XSS מבוסס DOM
  2. ההתקפה מתבצעת כולה בדפדפן על ידי מניפולציה של מודל האובייקטים של המסמך (DOM) ללא מעורבות השרת.
  3. XSS מאוחסן
  4. סקריפט זדוני מאוחסן באופן קבוע בשרת, כגון במסד הנתונים או בדף הפרופיל.
  5. XSS מוחזר
  6. סקריפט מוחזר משרת אינטרנט (למשל, ב-URL או בהודעת שגיאה), הסקריפט יבוצע כאשר הקורבן ילחץ על קישור מעוצב על ידי תוקפים.

כיצד למנוע XSS

  • ניקוי קלט וקידוד פלט : תמיד לנקות נתוני קלט של משתמש לפני עיבודם, ולהפוך את קלט המשתמש לפורמט בטוח.
  • שימוש במדיניות אבטחת תוכן (CSP) : מגבילה אילו סקריפטים יכולים להתבצע בדפדפן.
  • הימנע מ-eval() וג’אווהסקריפט מוטמע : כדי להפחית סיכוני הזרקה.
  • בדיקות אבטחה (DAST/IAST) : להריץ בדיקות אבטחה כדי לזהות פגיעויות מוקדם.

דוגמה במקרה אמיתי - תולעת סמי (MySpace, 2005)

מה קרה: סמי קמקאר פרסם פרופיל MySpace שכלל מטען XSS מאוחסן. כאשר משתמשים אחרים צפו בפרופיל, המטען רץ בדפדפנים שלהם, הוא (א) הוסיף את סמי כחבר, (ב) הוסיף את המשפט “סמי הוא הגיבור שלי” לפרופילים שלהם, ו-(ג) שיכפל את עצמו לדפי הפרופיל של אותם משתמשים.

השפעה: התולעת התפשטה עצמאית ל-~1 מיליון משתמשים בתוך כ-20 שעות, מה שאילץ את MySpace לרדת מהאוויר זמנית.

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

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

מונחים קשורים

Ready to validate what matters?

Ready to validate what matters?

Plexicus is Proof-Driven AppSec: validated findings, contextual understanding, and reviewed remediation — anchored in evidence, scoped with you.

Qualification

Check whether AI Swarm Pentest fits your environment.

Share the minimum context. We will review the scope and tell you the next commercial step.

Before submitting — verify you fit

Teams with fewer than 50 developers: start a 14-day Trial instead of booking a demo. Start a 14-day Trial →

0 / 280

No commitment. If you don't fit, we'll tell you.

SAMPLE HANDOVER · ILLUSTRATIVE

Sample evidence handover

A trimmed view of what your team receives at the end of an AI Swarm Pentest engagement. Real engagements include full technical evidence, executive narrative, and a remediation plan.

VALIDATED FINDING Evidence attached

Server-Side Request Forgery in webhooks/receiver

demo-project/sample-app · src/webhooks/receiver.py:42

SeverityHigh CVSS 3.18.6 Priority79 Confirmedvia replay

Untrusted caller-supplied URLs reach an internal egress without an allowlist. Replayed in a sandbox against a fresh authorised target — the same control was validated to fail twice.

REVIEWER-READY REMEDIATION Merge-ready PR

Validate the target URL against an allowlist of permitted hostnames. Reject private/internal IP ranges. Enforce HTTPS only.

plexicus/remediation/webhooks-ssrf 3 changed · 0 new files
42resp = requests.get(target_url)
42+if not is_allowed_host(target_url):
43+  raise WebhookRejected(target_url)
44+resp = requests.get(target_url, timeout=5)
Every engagement hands over:
  • Executive briefing
  • Validated findings list
  • Merge-ready PRs
  • Compliance mapping (NIS2 · DORA · CRA)