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 %}
{% 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

Flask09 原始输出、转义、XSS攻击、过滤器???的更多相关文章

  1. .Net Core 项目中添加统一的XSS攻击防御过滤器

    一.前言 最近公司内部在对系统的安全进行培训,刚好目前手里的一个.net core 项目中需要增加预防xss的攻击,本文将大概介绍下何为XSS攻击以及在项目中如何统一的预防XSS攻击. 二.XSS简介 ...

  2. PHP 安全三板斧:过滤、验证和转义之转义篇 & Blade模板引擎避免XSS攻击原理探究

    PHP 转义 实现 把输出渲染成网页或API响应时,一定要转义输出,这也是一种防护措施,能避免渲染恶意代码,造成XSS攻击,还能防止应用的用户无意中执行恶意代码. 我们可以使用前面提到的 htmlen ...

  3. Java Web使用过滤器防止Xss攻击,解决Xss漏洞

    转: Java Web使用过滤器防止Xss攻击,解决Xss漏洞 2018年11月11日 10:41:27 我欲乘风,直上九天 阅读数:2687   版权声明:本文为博主原创文章,转载请注明出处!有时候 ...

  4. addslashes,htmlspecialchars,htmlentities转换或者转义php特殊字符防止xss攻击以及sql注入

    一.转义或者转换的目的 1. 转义或者转换字符串防止sql注入 2. 转义或者转换字符防止html非过滤引起页面布局变化 3. 转义或者转换可以阻止javascript等脚本的xss攻击,避免出现类似 ...

  5. 富文本编辑框和防止xss攻击

    一.后台管理页面构建 1.创建后台管理url urlpatterns = [ ... # 后台管理url re_path("cn_backend/$", views.cn_back ...

  6. Jsoup代码解读之六-防御XSS攻击

    Jsoup代码解读之八-防御XSS攻击 防御XSS攻击的一般原理 cleaner是Jsoup的重要功能之一,我们常用它来进行富文本输入中的XSS防御. 我们知道,XSS攻击的一般方式是,通过在页面输入 ...

  7. WEB安全实战(五)XSS 攻击的第二种解决方式(推荐)

    序 说到 XSS 攻击,前边已经有两篇文章在讲这个事了,这次又拿出来说,主要是针对近期工作中的一些新的问题.那么之前是怎么解决问题的呢?为什么又要换解决方式?以下就具体的跟大家分享一下. 旧方案 公司 ...

  8. xss攻击(转)

    什么是 XSS Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击.攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行.利用这些恶意脚本,攻击者可获取用 ...

  9. 根据白名单过滤 HTML(防止 XSS 攻击)

    https://github.com/leizongmin/js-xss/blob/master/README.zh.md 根据白名单过滤 HTML(防止 XSS 攻击) xss是一个用于对用户输入的 ...

随机推荐

  1. hd acm1466

    http://www.cnblogs.com/alihenaixiao/p/4107907.html#undefined.这个博客有详解,我这个只是写一些·自己的总结. 问题:平面上有n条直线,且无三 ...

  2. poj 1144 Network 【求一个网络的割点的个数 矩阵建图+模板应用】

    题目地址:http://poj.org/problem?id=1144 题目:输入一个n,代表有n个节点(如果n==0就结束程序运行). 在当下n的这一组数据,可能会有若干行数据,每行先输入一个节点a ...

  3. nginx gzip 压缩设置

    mime.types 中包含所有文件的类型,不知道的可以去里面查询 gzip配置的常用参数 gzip on|off;  #是否开启gzip gzip_buffers 32 4K| 16 8K #缓冲( ...

  4. Idea中配置Tomcat7的JNDI

    1.进入目录 D:\apache-tomcat-7.0.73\conf\Catalina\localhost 添加hello.xml ,内容为: <Context path="/hel ...

  5. JQuery- JQuery学习

    jQuery与JavaScript加载页面的区别 1.JavaScript传统的方式页面加载会存在覆盖问题,加载比jQuery慢(整个页面加载完毕<包含里面的其他内容,比如图片>) 2.j ...

  6. Hive- 表

    在hive中表的类型:管理表和托管表(外部表). 内部表也称之为MANAGER_TABLE,默认存储在/user/hive/warehouse下,也可以通过location指定:删除表时,会删除表的数 ...

  7. HYSBZ - 1588 splay

    题意:每天给你一个数,要求统计最小波动值,强制在线的就是每次从已经出现过的数值中找与当前值间隔最小的加起来 题解:splay维护,同时求解当前值的前驱和后继,找距离小的那个就好了 splay是一种二叉 ...

  8. POJ 2240 Arbitrage(Floyed-Warshall算法)

    题意:给出n种货币,m种兑换比率(一种货币兑换为另一种货币的比率),判断测试用例中套汇是否可行.(套汇的意思就是在经过一系列的货币兑换之后,是否可以获利.例如:货币i→货币j→货币i,这样兑换后,是否 ...

  9. runtime error 的原因

    1.  数组访问越界 2.  分母为 0 3.   括号 做题时偶然发现的! (详见 UVA 10158 War) 代码中出现了这种东西 else if( arefriends(x,y==-1)  ) ...

  10. 尴尬的app:layout_scrollFlags="scroll|enterAlways" 配合NavigationDrawer

    昨天想到了NavigationDrawer中Item点击的问题. 点击Drawer中的一个Item需要到一个新的页面,你是应该打开一个新的Activity呢还是直接用fragment呢? 如果打开新的 ...