flawopen.com/XSS/XSS के प्रकार
Reflected, stored और DOM-based XSS में क्या अंतर है?
Reflected, stored और DOM-based XSS अविश्वसनीय data से browser के असुरक्षित context तक पहुँचने के अलग रास्ते बताते हैं। ये आपस में overlap कर सकते हैं: value का source, उसका persist होना, उसे render करने वाला code और प्रभावित user पहचानें।
तीन प्रकार
Request की value context-appropriate encoding के बिना response में आती है और browser उसे markup या script की तरह समझता है। Attacker victim को तैयार link भेज सकता है, पर मूल दोष request data का असुरक्षित rendering है। Rendering sink पर output ठीक करें।
अविश्वसनीय content सहेजा जाता है और बाद में comment या profile field में अन्य users के लिए असुरक्षित रूप से render होता है। Content देखने वाला हर visitor उसी असुरक्षित context में पहुँच सकता है, जब तक stored value या rendering path ठीक न हो।
Client-side JavaScript अविश्वसनीय source (जैसे location.hash, query parameter या server से मिली value) पढ़कर उसे innerHTML जैसे असुरक्षित DOM sink में लिखता है। Value server तक न पहुँचे, यह जरूरी नहीं; DOM-based XSS client-side source-to-sink path है और reflected/stored delivery से overlap कर सकता है। Client-side data flow ठीक करें।
सुधार के लिए यह अंतर क्यों मायने रखता है
XSS को rendering sink पर context-appropriate output encoding या सुरक्षित DOM API से ठीक करें। Reflected और stored XSS में अक्सर server rendering शामिल है, लेकिन client rendering भी असुरक्षित sink बना सकती है। DOM-based XSS के लिए text में innerHTML की जगह textContent उपयोग करें; rich HTML जरूरी हो तो स्पष्ट policy वाला maintained sanitizer लें। Server-side encoding client-side source-to-sink flows की समीक्षा का विकल्प नहीं है।
ये श्रेणियाँ एक-दूसरे से overlap कर सकती हैं
Reflected और stored यह बताते हैं कि input page तक कैसे पहुँचती है और क्या persist होती है। DOM-based client-side source-to-sink path बताता है। ये श्रेणियाँ एक-दूसरे को exclude नहीं करतीं: client code द्वारा persisted profile text को innerHTML में डालना stored और DOM-based दोनों XSS हो सकता है।
DOM-based XSS: असुरक्षित sink और केवल text rendering
const value = new URLSearchParams(location.search).get("q") ?? "";
target.innerHTML = value;
const value = new URLSearchParams(location.search).get("q") ?? "";
target.textContent = value;
संदर्भ
- OWASP XSS Prevention Cheat Sheet
- OWASP DOM-based XSS Prevention Cheat Sheet
- flawopen.com — Cross-Site Scripting