Python之Flask框架~HTML转义

1.HTML转义的背景

在Web应用程序中,用户输入的数据可能会被直接插入到HTML、JavaScript或SQL语句中,如果没有正确的过滤和转义,就会导致注入攻击。比如说,用户提交名称为`<script>alert('bad')</script>`,它将被直接插入到HTML代码中,从而导致恶意脚本在用户的浏览器中执行,可能会导致跨站脚本攻击(XSS)。因此,为了防止注入攻击,应该对用户输入的数据进行严格的过滤和转义,以确保它们不会被误解为代码。

2.代码展示

from flask import Flask
from markupsafe import escape

app = Flask(__name__)  # 创建flask核心对象

"""
当返回 HTML ( Flask 中的默认响应类型)时,为了防止注入攻击,所有用户提供的值在输出渲染前必须被转义。
使用 Jinja渲染的 HTML 模板会自动执行此操作。
"""


# 路由和视图函数
@app.route('/<name>', methods=['get', 'post'])
def hello(name):
    """
    使用escape() 可以手动转义,
    如果一个用户想要提交其名称为 <script>alert("bad")</script> ,
    那么 宁可转义为文本,也好过在浏览器中执行脚本。
    :param name:
    :return:
    """
    return f'hello, {escape(name)}'


if __name__ == "__main__":
    # 启动服务器
    app.run(debug=True)

3.代码讲解

上述代码中使用markupsafe导入escape方法将用户输入的内容转义为安全的内容。当然,使用 Jinja渲染的 HTML 模板会自动执行此转义操作。

    那么, 什么是jinjia渲染的HTML呢?Jinja渲染的HTML模板通常包含HTML标记和Jinja模板语言标记。以下是一个简单的示例:

```html
<!DOCTYPE html>
<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ heading }}</h1>
    <ul>
    {% for item in items %}
        <li>{{ item }}</li>
    {% endfor %}
    </ul>
</body>
</html>
```

在这个示例中,`{{ title }}`和`{{ heading }}`是Jinja模板语言标记,它们将在渲染时被替换为相应的变量值。`{% for item in items %}`和`{% endfor %}`是Jinja模板语言标记,它们用于循环遍历`items`列表中的每个元素,并将每个元素替换为`{{ item }}`。最终,Jinja将渲染出一个HTML页面,其中包含了相应的变量值和循环遍历的结果。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值