提醒:本文最后更新于 649 天前,文中所描述的信息可能已发生改变,请谨慎阅读。
思路来源
之前在次碳酸钴的博客闲逛的时候,发现前辈开发了独特的XEditor,觉得不错,但是貌似没有开源,于是不能拿来主义了,就自己开发了一下。
近日前辈的网站已经“挂了”,貌似是因为评论区广告太多。着实感觉心疼,如此好的一个纯粹的技术博客被逼得如此下场,心痛,心累。
言归正传,评论区有彩蛋,可以使用<x标签>来代替传统的<img>
、<code>
、<span>
、<a>
这四种常用标签。这个标签不是浏览器的标准的标签,服务器内部把他解析成以上几种标签。最后存入数据库的是标准标签。
使用例子
下面是几个使用的例子:
<x href="https://www.luckyscript.me">test</x>
这个标签会被解析成
<a href="https://www.luckyscript.me" target="_blank" rel="nofollow">test</a>
效果: test
由于安全性问题,这种场景下,标签只会对http(s)
开头的有效链接做解析成<a>
。如果不是这种情况,会毫不留情的解析成<span>
<x src="https://www.luckyscript.me/public/upload/article_nblog.png">
这个标签会被解析成img
。
<img src="https://www.luckyscript.me/public/upload/article_nblog.png" />
效果:
<x code="javascript">var</x>
这种场景会被解析成:
<code class="language-javascript">var</code>
效果:
var
其余场景,如果是合法标签,则会转为<span>
,否则则会进行实体化,防止xss的发生。
代码实现
parse部分,思路参考了leizongmin
的xss
包。实现起来也没多大难度,就不一一分析了。