diff --git a/python/flask/security/dangerous-template-string.py b/python/flask/security/dangerous-template-string.py index 010c805407..fc8e47609f 100644 --- a/python/flask/security/dangerous-template-string.py +++ b/python/flask/security/dangerous-template-string.py @@ -28,18 +28,18 @@ def error2(e): ''' % (request.url) return flask.render_template_string(template), 404 -## Doesn't work yet -#@app.route("/error3") -#def error3(e): -# template = f'''{ extends "layout.html" } -#{ block body } -#
-#

Oops! That page doesn't exist.

-#

{request.url}

-#
-#{ endblock } -#''' -# return flask.render_template_string(template) +@app.route("/error3") +def error3(e): + # ruleid: dangerous-template-string + template = f'''{{ extends "layout.html" }} +{{ block body }} +
+

Oops! That page doesn't exist.

+

{request.url}

+
+{{ endblock }} +''' + return flask.render_template_string(template) @app.route("/error4") def error4(e): @@ -58,3 +58,38 @@ def error4(e): { endblock } """ rendered = flask.render_template_string(template) + +@app.route("/inline_fstring") +def inline_fstring(): + # ruleid: dangerous-template-string + return flask.render_template_string(f"

{request.url}

") + +@app.route("/inline_fstring_tuple") +def inline_fstring_tuple(): + # ruleid: dangerous-template-string + return flask.render_template_string(f"

{request.url}

"), 404 + +@app.route("/inline_format") +def inline_format(): + # ruleid: dangerous-template-string + return flask.render_template_string("

{}

".format(request.url)) + +@app.route("/inline_percent") +def inline_percent(): + # ruleid: dangerous-template-string + return flask.render_template_string("

%s

" % request.url) + +@app.route("/inline_concat") +def inline_concat(): + # ruleid: dangerous-template-string + return flask.render_template_string("

" + request.url + "

") + +@app.route("/safe_context") +def safe_context(): + # ok: dangerous-template-string + return flask.render_template_string("

{{ url }}

", url=request.url) + +@app.route("/safe_constant") +def safe_constant(): + # ok: dangerous-template-string + return flask.render_template_string("

static

") diff --git a/python/flask/security/dangerous-template-string.yaml b/python/flask/security/dangerous-template-string.yaml index a930632229..fb4117853a 100644 --- a/python/flask/security/dangerous-template-string.yaml +++ b/python/flask/security/dangerous-template-string.yaml @@ -60,3 +60,7 @@ rules: $V = f"...{$X}..." ... return flask.render_template_string($V, ...), $CODE + - pattern: flask.render_template_string(f"...{$X}...", ...) + - pattern: flask.render_template_string("...".format(...), ...) + - pattern: flask.render_template_string("..." % $X, ...) + - pattern: flask.render_template_string($A + $B, ...)