Flask09 原始输出、转义、XSS攻击、过滤器???

 

1 怎么在jinja模板中原始输出模板语法

  1.1 用双引号引起来后放到 {{ }} 中

    例如  

      {{ "{{}}" }}

    输出

      

 

  1.2 利用raw

    例如   

{% raw %}
        {% for i in range(11) %}
            <li>{{ i }}</li>
        {% endfor %}
    {% endraw %}

    输出

      

 

2 模板中遇到带有script标签怎么办

  如果在模板遇到  >、<、&、” 等字符时Jinja2模板会自动进行转义,即利用其它的字符来代替这些模板,例如:利用 &lt; 代替<

    

      

  2.1 Jinja2模板如何判断需要渲染的字符串是否需要转义

    如果渲染的字符串有 __html__ 属性就认为是安全的,不需要进行转义;否则就会自动进行转义

    

    

    注意:也可以利用  {{ to_escape is escaped }} 去判断 to_escape 变量是否拥有 __html__ 属性,如果返回false就没有

      

      

 

  2.2 如何取消转义

    让需要进行渲染的模板拥有 __html__ 属性就会自动取消转义

    {{待渲染字符串|safe}}  这样写的话待渲染字符串就会拥有 __html__ 属性,从而会取消转义

      

      

  2.3 如何判断转义

     {{待转义字符串 is escaped}} 返回结果为False就表示需要进行转义,为True就表示不需要进行转义

    

    

  2.4 如何自定义是否需要进行转义

    利用 autoescape,设置为false表示不会进行转义,设置为true表示会进行转义

      

      

      

 

3 XSS攻击

  例如:用户评论的内容是一段 html 代码,如果这段代码不经过转义处理,那么其他用户在加载页面的时候机会执行这段代码

  3.1 模拟一个用户评论模块

    3.1.1 编写评论页面
{% from 'my_macros.html' import form, input, textarea %}

{% autoescape true %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试XSS</title>
</head>
<body>
    <h4>测试XSS相关知识</h4>
    <hr />
    {% call form('xss.test_xss') %}
        {{ textarea('comment') }}
        {{ input('button', type='submit', value='发表') }}
    {% endcall %}
    <hr />
    {% if comments %}
        <ul>
            {% for comment in comments %}
                <li>{{ comment }}</li>
            {% endfor %}
        </ul>

    {% endif %}
</body>he
</html>

{% endautoescape %}
View Code
{% macro url(filename) %}
    {{ url_for('static', filename=filename) }}
{% endmacro %}
{#宏:相当于在模板中定义函数,但是这个函数时使用的模板语法#}

{% macro link_to(endpoint, text) %}
    <a href="{{ url_for(endpoint, **kwargs) }}">{{ text }}</a>
{% endmacro %}


{% macro form(endpoint, method='post') %}
    <form action="{{ url_for(endpoint, **kwargs) }}" method="{{ method }}">
        {{ caller() }} {# caller() 获取 调用者 的 内容 #}
    </form>
{% endmacro %}

{% macro input(name, value='', type='text') %}
    <input type="{{ type }}" value="{{ value }}" name="{{ name }}" />
{% endmacro %}

{% macro textarea(name, value='', rows=10, cols=40) %}
    <textarea name="{{ name }}" rows="{{ rows }}" cols="{{ cols }}">{{ value }}</textarea>
{% endmacro %}
工具
    3.1.2 编写视图函数

    

    3.1.3 将HTML代码作为评论内容

      

      注意:会显示出来,因为flask进行了转义处理

        

        

    3.1.4 如果取消自动转义的效果

      将 autoescape 设置为 false 就可以取消转义啦

        

      

      注意:如果评论内容是HTML代码,那么chrome浏览器会进行拦截

 

4 本博客源代码

  点击前往

      

5 过滤器

  待更新...

  2017年10月7日23:03:56

 

转载于:https://www.cnblogs.com/NeverCtrl-C/p/7598789.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值