forked from orbit-oss/flask
fixed possible security problem in module branch
This commit is contained in:
parent
f1cde5bbfc
commit
8945a97a42
2 changed files with 22 additions and 1 deletions
|
|
@ -29,6 +29,7 @@ except ImportError:
|
||||||
json_available = False
|
json_available = False
|
||||||
|
|
||||||
from werkzeug import Headers, wrap_file, is_resource_modified, cached_property
|
from werkzeug import Headers, wrap_file, is_resource_modified, cached_property
|
||||||
|
from werkzeug.exceptions import NotFound
|
||||||
|
|
||||||
from jinja2 import FileSystemLoader
|
from jinja2 import FileSystemLoader
|
||||||
|
|
||||||
|
|
@ -334,7 +335,7 @@ class _PackageBoundObject(object):
|
||||||
.. versionadded:: 0.5
|
.. versionadded:: 0.5
|
||||||
"""
|
"""
|
||||||
filename = posixpath.normpath(filename)
|
filename = posixpath.normpath(filename)
|
||||||
if filename.startswith('../'):
|
if filename.startswith(('/', '../')):
|
||||||
raise NotFound()
|
raise NotFound()
|
||||||
filename = os.path.join(self.root_path, 'static', filename)
|
filename = os.path.join(self.root_path, 'static', filename)
|
||||||
if not os.path.isfile(filename):
|
if not os.path.isfile(filename):
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ from logging import StreamHandler
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from werkzeug import parse_date, parse_options_header
|
from werkzeug import parse_date, parse_options_header
|
||||||
|
from werkzeug.exceptions import NotFound
|
||||||
from cStringIO import StringIO
|
from cStringIO import StringIO
|
||||||
|
|
||||||
example_path = os.path.join(os.path.dirname(__file__), '..', 'examples')
|
example_path = os.path.join(os.path.dirname(__file__), '..', 'examples')
|
||||||
|
|
@ -645,6 +646,25 @@ class ModuleTestCase(unittest.TestCase):
|
||||||
assert flask.url_for('admin.static', filename='test.txt') \
|
assert flask.url_for('admin.static', filename='test.txt') \
|
||||||
== '/admin/static/test.txt'
|
== '/admin/static/test.txt'
|
||||||
|
|
||||||
|
def test_safe_access(self):
|
||||||
|
from moduleapp import app
|
||||||
|
|
||||||
|
with app.test_request_context():
|
||||||
|
f = app.view_functions['admin.static']
|
||||||
|
|
||||||
|
try:
|
||||||
|
rv = f('/etc/passwd')
|
||||||
|
except NotFound:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
assert 0, 'expected exception'
|
||||||
|
try:
|
||||||
|
rv = f('../__init__.py')
|
||||||
|
except NotFound:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
assert 0, 'expected exception'
|
||||||
|
|
||||||
|
|
||||||
class SendfileTestCase(unittest.TestCase):
|
class SendfileTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue