mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-29 14:23:43 -05:00
additional check for valid rootResource
This commit is contained in:
parent
a602629406
commit
4806da00a4
2 changed files with 26 additions and 1 deletions
|
@ -44,7 +44,7 @@ module.exports = RequestParser =
|
||||||
type: "string"
|
type: "string"
|
||||||
originalRootResourcePath = rootResourcePath
|
originalRootResourcePath = rootResourcePath
|
||||||
sanitizedRootResourcePath = RequestParser._sanitizePath(rootResourcePath)
|
sanitizedRootResourcePath = RequestParser._sanitizePath(rootResourcePath)
|
||||||
response.rootResourcePath = sanitizedRootResourcePath
|
response.rootResourcePath = RequestParser._checkPath(sanitizedRootResourcePath)
|
||||||
|
|
||||||
for resource in response.resources
|
for resource in response.resources
|
||||||
if resource.path == originalRootResourcePath
|
if resource.path == originalRootResourcePath
|
||||||
|
@ -92,3 +92,10 @@ module.exports = RequestParser =
|
||||||
_sanitizePath: (path) ->
|
_sanitizePath: (path) ->
|
||||||
# See http://php.net/manual/en/function.escapeshellcmd.php
|
# See http://php.net/manual/en/function.escapeshellcmd.php
|
||||||
path.replace(/[\#\&\;\`\|\*\?\~\<\>\^\(\)\[\]\{\}\$\\\x0A\xFF\x00]/g, "")
|
path.replace(/[\#\&\;\`\|\*\?\~\<\>\^\(\)\[\]\{\}\$\\\x0A\xFF\x00]/g, "")
|
||||||
|
|
||||||
|
_checkPath: (path) ->
|
||||||
|
# check that the request does not use a relative path
|
||||||
|
for dir in path.split('/')
|
||||||
|
if dir == '..'
|
||||||
|
throw "relative path in root resource"
|
||||||
|
return path
|
||||||
|
|
|
@ -223,4 +223,22 @@ describe "RequestParser", ->
|
||||||
it "should also escape the resource path", ->
|
it "should also escape the resource path", ->
|
||||||
@data.resources[0].path.should.equal @goodPath
|
@data.resources[0].path.should.equal @goodPath
|
||||||
|
|
||||||
|
describe "with a root resource path that has a relative path", ->
|
||||||
|
beforeEach ->
|
||||||
|
@validRequest.compile.rootResourcePath = "foo/../../bar.tex"
|
||||||
|
@RequestParser.parse @validRequest, @callback
|
||||||
|
@data = @callback.args[0][1]
|
||||||
|
|
||||||
|
it "should return an error", ->
|
||||||
|
@callback.calledWith("relative path in root resource")
|
||||||
|
.should.equal true
|
||||||
|
|
||||||
|
describe "with a root resource path that has unescaped + relative path", ->
|
||||||
|
beforeEach ->
|
||||||
|
@validRequest.compile.rootResourcePath = "foo/#../bar.tex"
|
||||||
|
@RequestParser.parse @validRequest, @callback
|
||||||
|
@data = @callback.args[0][1]
|
||||||
|
|
||||||
|
it "should return an error", ->
|
||||||
|
@callback.calledWith("relative path in root resource")
|
||||||
|
.should.equal true
|
||||||
|
|
Loading…
Reference in a new issue