|
| 1 | + |
| 2 | +Environment(loader=templateLoader, autoescape=fake_func()) |
| 3 | +from flask import Flask, request, make_response, escape |
| 4 | +from jinja2 import Environment, select_autoescape, FileSystemLoader, Template |
| 5 | + |
| 6 | +app = Flask(__name__) |
| 7 | +loader = FileSystemLoader( searchpath="templates/" ) |
| 8 | + |
| 9 | +unsafe_env = Environment(loader=loader) |
| 10 | +safe1_env = Environment(loader=loader, autoescape=True) |
| 11 | +safe2_env = Environment(loader=loader, autoescape=select_autoescape()) |
| 12 | + |
| 13 | +def render_response_from_env(env): |
| 14 | + name = request.args.get('name', '') |
| 15 | + template = env.get_template('template.html') |
| 16 | + return make_response(template.render(name=name)) |
| 17 | + |
| 18 | +@app.route('/unsafe') |
| 19 | +def unsafe(): |
| 20 | + return render_response_from_env(unsafe_env) |
| 21 | + |
| 22 | +@app.route('/safe1') |
| 23 | +def safe1(): |
| 24 | + return render_response_from_env(safe1_env) |
| 25 | + |
| 26 | +@app.route('/safe2') |
| 27 | +def safe2(): |
| 28 | + return render_response_from_env(safe2_env) |
| 29 | + |
| 30 | +# Explicit autoescape |
| 31 | + |
| 32 | +e = Environment( |
| 33 | + loader=loader, |
| 34 | + autoescape=select_autoescape(['html', 'htm', 'xml']) |
| 35 | +) # GOOD |
| 36 | + |
| 37 | +# Additional checks with flow. |
| 38 | +auto = select_autoescape |
| 39 | +e = Environment(autoescape=auto) # GOOD |
| 40 | +z = 0 |
| 41 | +e = Environment(autoescape=z) # BAD |
| 42 | +E = Environment |
| 43 | +E() # BAD |
| 44 | +E(autoescape=z) # BAD |
| 45 | +E(autoescape=auto) # GOOD |
| 46 | +E(autoescape=0+1) # GOOD |
| 47 | + |
| 48 | +def checked(cond=False): |
| 49 | + if cond: |
| 50 | + e = Environment(autoescape=cond) # GOOD |
| 51 | + |
| 52 | + |
| 53 | +unsafe_tmpl = Template('Hello {{ name }}!') |
| 54 | +safe1_tmpl = Template('Hello {{ name }}!', autoescape=True) |
| 55 | +safe2_tmpl = Template('Hello {{ name }}!', autoescape=select_autoescape()) |
0 commit comments