想象一下以下内容。
我主要关于如何让“script”标签表现出来的问题。
my $tree = someparser( $source );
....
print $somenode->text();
$somenode->text('arbitraryjavascript');
....
print $tree->serialize();
或者那个效果。
在决定如何在易用性和便携性/可用性方面对该领域的内容进行适当处理时会出现问题。
我自己想要做的是:
$somenode->text("verbatim");
- >
<script>
// <!-- <![CDATA[
verbatim
// ]]> -->
</script>
所以我生产的东西都有点安全,而且验证友好。
但是我犹豫不决,如果神奇地做这个是一个好主意,我是否应该有代码试图检测'安全块'的现有副本并在'解析'阶段替换它们/剥离它们。
如果我不从输入中删除它,我可能会在输出阶段加倍,特别是如果稍后想要重新解析此代码的输出时会出现问题。
如果我从输入中删除它将会产生有益的效果,即以编程方式获取脚本元素的内容,不会在任何一端看到安全块。
最终会有一种方法可以解决这种行为,但问题是/ default /处理方式应该是什么,以及为什么。
可能我的整个推理在这里有缺陷,除非想要处理,否则文本内容应该完全未经处理。
你在这样的工具中寻找什么行为?请指出我可能忽略的任何理由。
TLDR摘要:
我应该如何以编程方式处理这些脚本中的转义机制,即输入/输出方面两端的“//<
”安全填充!--<![CDATA[
答案 0 :(得分:1)
我在这里添加了自己的答案,所以我更加明显地想要找到答案。我已经确定的当前想法将表现如下:
my $html=<<'EOF'
<script>
//<!--<![CDATA[
foo
//]]>-->
</script>
EOF
#/# this line is here for the syntax highlighter
my $obj = parse($html);
print $obj->text();
# foo
$obj->text("bar");
print $obj->text();
# bar
print $obj->html();
# <script>
# //<!--<![CDATA[
# bar
# //]]>-->
# </script>
重点是:
如果有
<!-
,或没有<!
)部分现有的保护措施将被剥夺并替换为上述沼泽标准。
答案 1 :(得分:0)
我能想到的唯一类似的是ASP.NET的寄存器脚本块函数。它们都有一个重载,它是否应该添加脚本标记。
以下是一个文档的链接: