【发布时间】:2012-06-25 11:29:54
【问题描述】:
我有一个关于 xslt 的小问题
我有这段文字
newline<br /> <br /> newline<br /> <br /> <br /> newline<br /> <br /> <br /> newline<br /> <br /> <b>asdasdasd</b><br /> <br /> <script>alert(0)</script>
我想转义除<p> <br> <b> <a> 之外的所有实体,因此当我使用时
<xsl:value-of select="page/@post_content" disable-output-escaping="yes"/>
能够加粗文本,插入链接......等等,但是<script>标签被转义但不被strip_tags剥离......但是当我让disable-output-escaping="yes"收到一条消息时,所以有XSS这里的漏洞...
我的php代码是
$hrefs->item(0)->setAttribute("post_content",nl2br($PostContent));
那我该怎么做呢?
PS:我非常关心安全!谢谢。
【问题讨论】:
-
你为什么不把你想要的没有输出的元素转义?如果您担心安全性,您可以采用白名单方法。而且您不应该只禁用所有子元素的输出转义,这显然是错误的。
-
我真的不知道该怎么做,我相信这是一个简单的问题,但我没有找到答案,你的想法是,让 PHP 来做这个或 XSLT?
-
那么你是否一直在应用禁用输出转义?
-
IIRC 你应该可以在 select 属性中告诉哪些标签不应该被转义,可能使用 xpath 联合(
|运算符)。好的,我看到这是一个属性。您还需要将属性值视为 XML。您可能应该将 XML 也添加到您的问题和一些代码中,以便更清楚您在做什么。 -
没有简单的解决方案吗?因为这是一个简单的问题,只是输出一些东西..