FlawOpen

flawopen.com/Path Traversal/Node.js path.join()

क्या Node.js path.join() Path Traversal रोकता है?

संदर्भ पृष्ठ
संक्षिप्त उत्तर

नहीं। path.join() path segments को normalize करता है, लेकिन .. को तय directory से बाहर जाने से नहीं रोकता। candidate path को base directory के सापेक्ष resolve करें और पुष्टि करें कि relative path उसी के भीतर रहे। यह lexical जाँच filesystem symlinks को अपने आप सीमित नहीं करती।

अभी भी असुरक्षित
const filePath = path.join(
  BASE_DIR, userFilename
);
// userFilename = "../../etc/passwd"
// still escapes BASE_DIR
सुधारा गया — lexical containment जाँच
const base = path.resolve(BASE_DIR);
const resolved = path.resolve(base, userFilename);
const relative = path.relative(base, resolved);

if (
  relative === '' ||
  relative === '..' ||
  relative.startsWith('..' + path.sep) ||
  path.isAbsolute(relative)
) {
  throw new Error("Invalid path");
}

केवल path.join() पर्याप्त क्यों नहीं

path.join() platform separator से segments जोड़ता और परिणाम normalize करता है। यह .. को अस्वीकार नहीं करता, क्योंकि कई paths में यह वैध है। ../../etc/passwd को base से जोड़ने पर भी बाहर का path मिल सकता है; join() containment नहीं जाँचता।

अक्सर पूछे जाने वाले प्रश्न

क्या path.normalize() मदद करता है?

path.normalize() string में .. और . segments सुलझाता है, लेकिन यह नहीं जाँचता कि परिणाम अनुमत base के भीतर है। path.relative(base, resolved) की तुलना करें और file आवश्यक होने पर खाली परिणाम अस्वीकार करें; .., .. के बाद path.sep वाला prefix और absolute relative result भी अस्वीकार करें।

क्या यह जाँच symlink escape रोकती है?

नहीं। path.resolve() और path.relative() path strings की तुलना करते हैं; वे filesystem symlinks का अनुसरण नहीं करते। यदि हमलावर base के भीतर symlink बना या बदल सकता है, तो वास्तविक लक्ष्य validate करें और जाँच व उपयोग के बीच race रोकने वाला access तरीका अपनाएँ। संभव हो तो tree पर write access सीमित करें।

संदर्भ

यह भी देखें पाथ ट्रैवर्सल (CWE-22): यह कैसे काम करता है और हर भाषा में इसे कैसे रोकें — flawopen.com PHP include() और उपयोगकर्ता-नियंत्रित पथ Python os.path.join() में Path Traversal का समाधान Zip Slip भेद्यता क्या है?