fix: strip directory traversal sequences from asset paths
This commit is contained in:
		| @@ -5,6 +5,8 @@ const path = require('path') | ||||
|  | ||||
| const localeSegmentRegex = /^[A-Z]{2}(-[A-Z]{2})?$/i | ||||
| const localeFolderRegex = /^([a-z]{2}(?:-[a-z]{2})?\/)?(.*)/i | ||||
| // eslint-disable-next-line no-control-regex | ||||
| const unsafeCharsRegex = /[\x00-\x1f\x80-\x9f\\"|<>:*?]/ | ||||
|  | ||||
| const contentToExt = { | ||||
|   markdown: 'md', | ||||
| @@ -30,10 +32,14 @@ module.exports = { | ||||
|     // Clean Path | ||||
|     rawPath = _.trim(qs.unescape(rawPath)) | ||||
|     if (_.startsWith(rawPath, '/')) { rawPath = rawPath.substring(1) } | ||||
|     rawPath = rawPath.replace(unsafeCharsRegex, '') | ||||
|     if (rawPath === '') { rawPath = 'home' } | ||||
|  | ||||
|     // Extract Info | ||||
|     let pathParts = _.filter(_.split(rawPath, '/'), p => !_.isEmpty(p)) | ||||
|     let pathParts = _.filter(_.split(rawPath, '/'), p => { | ||||
|       p = _.trim(p) | ||||
|       return !_.isEmpty(p) && p !== '..' && p !== '.' | ||||
|     }) | ||||
|     if (pathParts[0].length === 1) { | ||||
|       pathParts.shift() | ||||
|     } | ||||
| @@ -73,7 +79,7 @@ module.exports = { | ||||
|       ['date', page.updatedAt], | ||||
|       ['tags', page.tags ? page.tags.map(t => t.tag).join(', ') : ''], | ||||
|       ['editor', page.editorKey], | ||||
|       ['dateCreated', page.createdAt], | ||||
|       ['dateCreated', page.createdAt] | ||||
|     ] | ||||
|     switch (page.contentType) { | ||||
|       case 'markdown': | ||||
|   | ||||
		Reference in New Issue
	
	Block a user