Parsedown解析Markdown过滤XSS时应如何处理html转义
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Parsedown解析Markdown过滤XSS时应如何处理html转义,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6579字,纯文字阅读大概需要10分钟。
内容图文
![Parsedown解析Markdown过滤XSS时应如何处理html转义](/upload/InfoBanner/zyjiaocheng/238/5f56a09c03ab477892a01307a6abdb0a.jpg)
发现 Parsedown 会对 代码
区域内的 html 代码进行转义,代码
区域外的却不进行转义,如以下代码所示
PHP
text($test); /** * 得到结果是: *
* * */<script>alert('test')</script>
这样,
这句还是被成功执行了
既然如此,那我先自己给它转义一下
PHP
text($test); /** * 得到结果是: *
*<script>alert('test')</script>
<script>alert('test')</script>
*/虽然 XSS 是被过滤掉了,但是
代码
区域的内容就被转义了两次。然后我发现 SF 的 Markdown 好像是在后端就解析好的,例如这个页面,它的部分源码如下:
html
我现在的代码是这样的
<html>
<head>
<title>Untitled Document</title><script> function test(){ <?php $conn = mysql_connect("localhost", "username", "123123"); mysql_select_db("username", $conn); mysql_query("INSERT INTO ChargerTogether (Chat) VALUES ('test')"); $result= mysql_query("SELECT *FROM ChargerTogether"); echo "<p> {$result} </p>>"; ?> } </script>
</head>
<body>
<input type="button" onClick="javascript:test();"></body>
</html>但这样是错误的
我该怎样做呢这里的转义就做得很好。
我想到的解决方案是:先转义,再用 Parsedown 进行解析,接着正则匹配出解析后
内的代码,对其进行反转义(一次)。
不知道是不是还有别的更好的转义函数,或者说 有没有其他的能够过滤 XSS 的 Markdown 解析类
P.S. 我在 github 上面找到有个 markdown-js。用这个东西的话可以把经
htmlspecialchars(()
转义后的字符串直接输出到一个textaera
里,它能够正确地解析。虽然我可以把那个文本框隐藏起来,但是如果需要输出很多段 Markdown (帖子有很多回复)的话,那可不是一个好的解决方案啊!回复内容:
用 Parsedown 对 Markdown 进行解析的时候,遇到了一些 XSS 过滤方面的问题。
发现 Parsedown 会对
代码
区域内的 html 代码进行转义,代码
区域外的却不进行转义,如以下代码所示PHP
text($test); /** * 得到结果是: *
* * */<script>alert('test')</script>
这样,
这句还是被成功执行了
既然如此,那我先自己给它转义一下
PHP
text($test); /** * 得到结果是: *
*<script>alert('test')</script>
<script>alert('test')</script>
*/虽然 XSS 是被过滤掉了,但是
代码
区域的内容就被转义了两次。然后我发现 SF 的 Markdown 好像是在后端就解析好的,例如这个页面,它的部分源码如下:
html
我现在的代码是这样的
<html>
<head>
<title>Untitled Document</title><script> function test(){ <?php $conn = mysql_connect("localhost", "username", "123123"); mysql_select_db("username", $conn); mysql_query("INSERT INTO ChargerTogether (Chat) VALUES ('test')"); $result= mysql_query("SELECT *FROM ChargerTogether"); echo "<p> {$result} </p>>"; ?> } </script>
</head>
<body>
<input type="button" onClick="javascript:test();"></body>
</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... }
这么做虽然说是解决了,但是可能不是最完美的解决方案,还请各位大大继续提供更好的方案~
我也遇到这个问题了,后来发现,只要把代码块外面的 写成</script/>即可,这样就会转换成文字了。<a href="http://www.laitingfm.com" /><img src="http://www.gxlcms.com/ad/link.jpg" /></a> <a href="https://curl.qcloud.com/kfoLTs9R" /><img src="http://www.gxlcms.com/ad/1040x100.jpg" /></a> <font color="red">本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈<a href="http://www.gxlcms.com/?s=gb-show-p-1.html">版权投诉</a></font> </article> </div> <div class="w310 r"> <a href="https://www.gxlcms.com/server-467421.html" target="_blank"> <img src="http://www.gxlcms.com/Public/aiod/ts.jpg" /></a> <div class="youclmt"> <h3>PHP教程热搜</h3> </div> <div class="langmubt"> <ul> <li><a href="/PHPjiqiao-463254.html" target="_blank">php中$_SESSION获取不到值怎么办</a></li><li><a href="/PHPjiqiao-463079.html" target="_blank">php 如何修改图片像素大小</a></li><li><a href="/PHPjiqiao-462514.html" target="_blank">php date如何转换时间戳</a></li><li><a href="/PHPjiqiao-388448.html" target="_blank">PHP如何替换数组中的指定元素</a></li><li><a href="/PHPjiqiao-388428.html" target="_blank">php5ts.dll找不到怎么办</a></li><li><a href="/PHPjiqiao-381403.html" target="_blank">php如何多个字符串一次替换</a></li><li><a href="/PHPjiqiao-381265.html" target="_blank">php如何判断文件是不是图片</a></li><li><a href="/PHPjiqiao-380980.html" target="_blank">php正则如何替换a标签</a></li><li><a href="/PHPjiqiao-380978.html" target="_blank">php base64转换成图片的方法</a></li><li><a href="/PHPjiqiao-380945.html" target="_blank">php如何去除回车</a></li><li><a href="/PHPjiqiao-380870.html" target="_blank">苹果系统安装php环境的方法详解</a></li><li><a href="/PHPjiqiao-380756.html" target="_blank">php怎么实现数组随机且不重复</a></li><li><a href="/PHPjiqiao-380744.html" target="_blank">php do while用法详解</a></li><li><a href="/PHPjiqiao-380411.html" target="_blank">教你用PHP开发微信公众号文章付费阅读功能</a></li><li><a href="/PHPjiqiao-380395.html" target="_blank">php字符串太长怎么办</a></li><li><a href="/PHPjiqiao-380214.html" target="_blank">php fbclient.dll 丢失怎么办</a></li><li><a href="/PHPjiqiao-380162.html" target="_blank">php如何实现big5转utf8</a></li><li><a href="/PHPjiqiao-380160.html" target="_blank">php如何增加字段</a></li><li><a href="/PHPjiqiao-380131.html" target="_blank">php如何获取调用方法名</a></li><li><a href="/PHPjiqiao-380023.html" target="_blank">如何卸载源码安装的php</a></li><li><a href="/PHPjiqiao-379922.html" target="_blank">php smtp发送邮件失败怎么办</a></li><li><a href="/PHPjiqiao-379749.html" target="_blank">php如何把数字转成大写字母</a></li><li><a href="/PHPjiqiao-379732.html" target="_blank">php如何实现下载并修改文件名称</a></li><li><a href="/PHPjiqiao-379703.html" target="_blank">php找不到数据库怎么办</a></li><li><a href="/PHPjiqiao-379684.html" target="_blank">php如何设置项目虚拟路径</a></li> </ul> </div> <a href="https://curl.qcloud.com/I8w1gZa8" target="_blank"> <img src="http://www.gxlcms.com/ad/tx500x500.jpg" /></a> </div> </div> </div> </div> <script type="text/javascript" src="/layui/layui.js">
内容总结
以上是互联网集市为您收集整理的Parsedown解析Markdown过滤XSS时应如何处理html转义全部内容,希望文章能够帮你解决Parsedown解析Markdown过滤XSS时应如何处理html转义所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】