首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >清除用户创建的带有代码的标记

清除用户创建的带有代码的标记
EN

Stack Overflow用户
提问于 2014-01-10 18:57:50
回答 1查看 916关注 0票数 0

我在清理用户输入和正确显示代码时遇到了问题。

使用bleach清理用户数据,它将

代码语言:javascript
运行
AI代码解释
复制
< ```a < b```

代码语言:javascript
运行
AI代码解释
复制
&lt; ```a &lt; b```

然后markdown将markdown文本转换为HTML

代码语言:javascript
运行
AI代码解释
复制
markdown.markdown(u'&lt;\n ```a &lt; b```')

输出结果是

代码语言:javascript
运行
AI代码解释
复制
<p>&lt;\n <code>a &amp;lt; b</code></p>

我知道发生这种情况是因为第一个<被认为是HTML,但代码块中的所有内容都被转义,因为您希望显示它,而不是解释它。

有什么建议或者其他专门清理markdown的库吗?

EN

回答 1

Stack Overflow用户

发布于 2014-01-11 03:34:11

漂白剂是HTML消毒剂,而不是降价消毒剂。如果你想清理网站上来自不受信任用户的输入,这是可以理解的。但是,您通常会对markdown的输出(即HTML)运行bleach,而不是对markdown文本本身运行bleach。

代码语言:javascript
运行
AI代码解释
复制
sanitized_html = bleach.clean(markdown.markdown(some_text))

接下来,将示例markdown文本传递给Python-Markdown。你会得到完全可以接受的结果。事实上,您的输出(首先使用漂白剂)实际上是不正确的。注意,代码现在包含&amp;lt;,它将在浏览器中显示为&lt;而不是<。您真正想要的输出是:

代码语言:javascript
运行
AI代码解释
复制
<p>&lt; <code>a &lt; b</code></p>

这正是Python-Markdown为您提供的开箱即用的功能。Python-Markdown的dingus显示给定输入的HTML源和预览。你可能想用它来理解我的意思。

如果你担心用户提交不好的markdown会破坏事情,你可能会很高兴知道Python-Markdown声明的goals之一是适合“在web服务器环境中使用的(从不引发异常,从不写入stdout等)”。换句话说,错误的用户输入不应该使您的服务器崩溃。当然,他们可以注入恶意的html/javascript,但这就是Bleach在markdown从用户输入构建html之后的用途。

最后一点评论。是的,我知道Python-Markdown有一个"safe_mode“。然而,这是一个不幸的命名功能。一个更贴切的名字可能是"strip_html“或"escape_html”(这两个名字都可以)。作为Python-Markdown的主要开发者,我推荐Bleach来清理来自不受信任用户的输入。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21052233

复制
相关文章
SAP MM 带有’Return’标记的STO,不能创建内向交货单?
The current version of ERP does not support Stock Transport Order returns as standard with Logistics execution; it is not possible to automatically or manually create an inbound delivery against a Stock Transport Order which has the ‘return’ indicator ticked.
SAP虾客
2021/01/09
7560
SAP MM 带有'Return'标记的STO,不能创建内向交货单?
The current version of ERP does not support Stock Transport Order returns as standard with Logistics execution; it is not possible to automatically or manually create an inbound delivery against a Stock Transport Order which has the 'return' indicator ticked.
SAP虾客
2021/03/01
7730
【说站】python标记清除的过程
以上就是python标记清除的过程,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/23
7050
【说站】python标记清除的过程
GC算法-标记清除算法
寻找所有的活动对象, 要从一个起点开始, 根集合(包括栈、常量池等等), 然后一层一层找下去. 简单来说就像这样:
烟草的香味
2020/04/08
7290
JVM 彻底搞懂几种常见的垃圾回收机制|标记清除|标记复制|标记整理
为什么会出现分代收集呢,这是由对象存活周期不同决定的。在jvm中有些对象是用完就不需要的(业务对象),有些对象则是长久存留的(如Spring的一些组件),所以我们不可能按照同样的收集方式去处理这些对象,所以jvm就会把这些对象进行区分,将存活不久的对象放在新生代,长期存活的放在老年代,然后分别对新生代和老年代采用不同的收集算法,所以这个就叫分代收集。
AI码师
2022/12/22
1.3K0
JVM 彻底搞懂几种常见的垃圾回收机制|标记清除|标记复制|标记整理
垃圾回收算法|GC标记-清除算法
GC 标记-清除算法由标记阶段和清除阶段构成。在标记阶段会把所有的活动对象都做上标记,然后在清除阶段会把没有标记的对象,也就是非活动对象回收。
goodspeed
2020/12/22
1.2K0
垃圾回收算法|GC标记-清除算法
垃圾回收算法(3)-标记清除算法
标记清除算法(Mark-Sweep)是一种非常基础和常见的垃圾收集算法,该算法被J.McCarthy等人在1960年提出并成功的发明并应用于Lisp语言。
一觉睡到小时候
2020/07/14
9150
【说站】javascript标记清除如何实现
2、从逻辑上讲,进入环境的变量占用的内存永远无法释放,因为只要执行流进入相应的环境,就有可能使用。
很酷的站长
2022/11/24
1.1K0
【说站】javascript标记清除如何实现
短代码-带有背景的Toast
这里逐渐收集了本人自己编写的「短代码」和「重复发明轮子(Reinventing the wheel)」。所有的短代码可前往 “时光”-“文章标签”-“短代码” 查看 DiyToast.class - 主要接口 /** * @author Administrator * @year 2019 * @Todo TODO 自定义Toast * @package_name com.example.shengsaidemo2019.toats * @project_name 2019ShengSaiDemo
奶油话梅糖
2021/03/16
1.1K0
标记-清除算法主要分成两个阶段
标记阶段:需要回收的对象。那么这个过程其实就是使用可达性分析去判断一个对象是不是垃圾的过程。
用户7365393
2021/09/24
1.5K0
面试题26:GC算法——标记清除法
与保守式GC算法相兼容(由于保守式GC算法中,对象是不能被移动的。所以,适用于标记-清除算法。)
爪哇缪斯
2023/05/09
1400
面试题26:GC算法——标记清除法
创建包含源文件的IP-带有参数
有时候我们想参考官方的源码,但是有些IP怎么也找不到官方的源码,具体原因是什么呢?
碎碎思
2021/01/13
2.1K0
创建包含源文件的IP-带有参数
JVM垃圾回收算法标记清除和复制算法
程序运行时堆中对象的状态(默认为0未标记,1为标记过),假如堆内存的可用空间被消耗完,那么GC线程就会启动,停止掉应用程序,使用根可达性算法进行搜索标记.
开源日记
2020/12/03
6650
如何在 Linux 中创建带有特殊字符的文件?
在 Linux 系统中,创建文件是进行各种操作的基础。有时候,我们需要创建带有特殊字符的文件,例如包含空格、特殊符号或非ASCII字符的文件。本文将详细介绍在 Linux 中如何创建带有特殊字符的文件,以便您能够轻松地完成这样的任务。
网络技术联盟站
2023/08/03
8540
如何在 Linux 中创建带有特殊字符的文件?
如何在 Linux 中创建带有特殊字符的文件?
在 Linux 系统中,创建文件是进行各种操作的基础。有时候,我们需要创建带有特殊字符的文件,例如包含空格、特殊符号或非ASCII字符的文件。本文将详细介绍在 Linux 中如何创建带有特殊字符的文件,以便您能够轻松地完成这样的任务。
网络技术联盟站
2023/07/14
7880
如何在 Linux 中创建带有特殊字符的文件?
JVM (标记-清除算法、复制算法、标记-整理算法、分代收集算法、分区算法)
在Java堆中存放着所有Java的对象实例 ,在GC执行垃圾收回之前,JVM需要标识出来哪些是对象已经不被引用(垃圾),哪些被引用,而JVM有两种垃圾标识对象是否存活,分别是:引用计数算法和可达性分析算法。
逍遥壮士
2021/07/29
2.4K0
JVM性能调优-算法内功之剖析标记清除
简介:标记清除算法讲解 最基础的收集算法是“标记-清除”(Mark-Sweep)算法,如同它的名字⼀样,算法分为“标记”和“清 除”两个阶段 ⾸先标记出所有需要回收的对象,在标记完成后统⼀回收所有被标记的对象,它的标记过程其实在前- -节讲述对象标记判定时已经介绍过了 它的主要不⾜有两个: ⼀个是效率问题,标记和清除两个过程的效率都不⾼; 另⼀个是空间问题,标记清除之后会产⽣⼤量不连续的内存碎⽚,空间碎⽚太多可能会导致以后在程序运⾏过程中需要分配较⼤对象时,⽆法找到⾜够的连续内存⽽不得不提前触发另⼀
cwl_java
2019/12/20
3020
git 清除用户名密码
清空所有用户名和密码:git config –system –unset credential.helper
全栈程序员站长
2022/07/23
6.9K0
详解gc(垃圾回收)机制四:GC标记-清除算法
可以看出,在gc之后,每个空闲的堆空间都是不连续的,大大小小,在之后分配内存可能会出现大内存对象无法分配到有效堆空间的问题
仙士可
2022/12/02
7140
点击加载更多

相似问题

如何创建带有空代码块的R标记?

211

使用REST创建带有标记的用户故事(非API)

11

创建带有输入的标记

11

如何快速清除带有代码的标签内容?

24

清除Python中用户创建的变量

44
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文