fix: strip directory traversal sequences from asset paths
This commit is contained in:
parent
9ccd1f82e9
commit
084dcd69d1
@ -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':
|
||||
|
Loading…
Reference in New Issue
Block a user