热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Parsedown解析Markdown过滤XSS时应如何处理html转义

用Parsedown对Markdown进行解析的时候,遇到了一些XSS过滤方面的问题。发现Parsedown会对代码区域内的html代码进行转义,代码区域外的却不进行转义,如以下代码所示{代码...}这样,<script>...
用 Parsedown 对 Markdown 进行解析的时候,遇到了一些 XSS 过滤方面的问题。

发现 Parsedown 会对 代码 区域内的 html 代码进行转义,代码区域外的却不进行转义,如以下代码所示

PHPtext($test);

/**
  * 得到结果是:
  * 

* * */

这样,这句还是被成功执行了


既然如此,那我先自己给它转义一下

PHPtext($test);

/**
  * 得到结果是:
  * 

<script>alert(&#039;test&#039;)</script>
*

*/

虽然 XSS 是被过滤掉了,但是代码区域的内容就被转义了两次

然后我发现 SF 的 Markdown 好像是在后端就解析好的,例如这个页面,它的部分源码如下:

html

我现在的代码是这样的







但这样是错误的
我该怎样做呢

这里的转义就做得很好。


我想到的解决方案是:先转义,再用 Parsedown 进行解析,接着正则匹配出解析后 内的代码,对其进行反转义(一次)。

不知道是不是还有别的更好的转义函数,或者说 有没有其他的能够过滤 XSS 的 Markdown 解析类

P.S. 我在 github 上面找到有个 markdown-js。用这个东西的话可以把经htmlspecialchars(()转义后的字符串直接输出到一个 textaera 里,它能够正确地解析。虽然我可以把那个文本框隐藏起来,但是如果需要输出很多段 Markdown (帖子有很多回复)的话,那可不是一个好的解决方案啊!

回复内容:

用 Parsedown 对 Markdown 进行解析的时候,遇到了一些 XSS 过滤方面的问题。

发现 Parsedown 会对 代码 区域内的 html 代码进行转义,代码区域外的却不进行转义,如以下代码所示

PHPtext($test);

/**
  * 得到结果是:
  * 

* * */

这样,这句还是被成功执行了


既然如此,那我先自己给它转义一下

PHPtext($test);

/**
  * 得到结果是:
  * 

<script>alert(&#039;test&#039;)</script>
*

*/

虽然 XSS 是被过滤掉了,但是代码区域的内容就被转义了两次

然后我发现 SF 的 Markdown 好像是在后端就解析好的,例如这个页面,它的部分源码如下:

html

我现在的代码是这样的







但这样是错误的
我该怎样做呢

这里的转义就做得很好。


我想到的解决方案是:先转义,再用 Parsedown 进行解析,接着正则匹配出解析后 内的代码,对其进行反转义(一次)。

不知道是不是还有别的更好的转义函数,或者说 有没有其他的能够过滤 XSS 的 Markdown 解析类

P.S. 我在 github 上面找到有个 markdown-js。用这个东西的话可以把经htmlspecialchars(()转义后的字符串直接输出到一个 textaera 里,它能够正确地解析。虽然我可以把那个文本框隐藏起来,但是如果需要输出很多段 Markdown (帖子有很多回复)的话,那可不是一个好的解决方案啊!

刚刚把 Parsedown 源码里所有(共三处)转义用的语句(如下所示)给注释掉,

PHP$text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');

这句出现在了以下三个方法中:
protected function blockCodeComplete($Block)protected function blockFencedCodeComplete($Block)protected function inlineCode($Excerpt)

然后再修改一下 function text($text)

function text($text)
    {
        #添加下面这行
        $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
        # Code...
    }

这么做虽然说是解决了,但是可能不是最完美的解决方案,还请各位大大继续提供更好的方案~

我也遇到这个问题了,后来发现,只要把代码块外面的 写成即可,这样就会转换成文字了。

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • jvm内存区域与溢出为什么学习jvm木板原理,最短的一块板决定一个水的深度,当一个系统垃圾收集成为瓶颈的时候,那么就需要你对jvm的了解掌握。当一个系统出现内存溢出,内存泄露的时候 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 数据库(外键及其约束理解)(https:www.cnblogs.comchenxiaoheip6909318.html)My ... [详细]
author-avatar
手机用户2602902855
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有