有时会在屏幕上打印Javascript代码

时间:2014-09-14 06:33:28

标签: javascript php highslide

我在我的网站上使用highslide库,有时不是所有时间,我使用的代码都打印在屏幕上,但我不知道为什么,这是我的代码:

    <script type="text/javascript">

hs3.graphicsDir = '<?echo $RootPath;?>/ExternalLibrary/highslide/graphics/';
hs3.align = 'center';
hs3.transitions = ['expand', 'crossfade'];
hs3.fadeInOut = true;
hs3.outlineType = 'glossy-dark';
hs3.wrapperClassName = 'dark';
hs3.captionEval = 'this.a.title';
hs3.numberPosition = 'caption';
hs3.useBox = true;
hs3.width = 600;
hs3.height = 400;

hs3.addSlideshow({
    //slideshowGroup: 'group1',
    interval: 5000,
    repeat: false,
    useControls: true,
    fixedControls: 'fit',
    overlayOptions: {
        position: 'bottom center',
        opacity: 0.75,
        hideOnMouseOut: true
    },
    thumbstrip: {
        position: 'above',
        mode: 'horizontal',
        relativeTo: 'expander'
    }
});

var miniGalleryOptions1 = {
    thumbnailId: 'thumb1'
}
</script>

其中$ RootPath是php变量,其值为Portal。打印在屏幕上的代码是$ RootPath变量之后的代码,有什么想法吗?

1 个答案:

答案 0 :(得分:0)

$ RootPath包含一些注入,并且值&#34; Portal&#34; - 什么!?!?忍受我。

它包含&#34;&lt; / script&gt;&#34;或类似的;如果你是Doubting Taha查看实际呈现的HTML 。这反过来导致浏览器关闭脚本元素,导致以下内容被处理为普通的非脚本HTML。 (如果遇到序列&#34;&lt; /&#34;,浏览器在技术上可以终止脚本元素的PCDATA,但据我所知,现代浏览器要求它至少为#34;&lt; /脚本&#34;。)

要修复/阻止此操作, 始终使用json_encode来获取/作为JavaScript 中使用的PHP的值。这应该是自动,就像在将不保证安全的HTML文本写入HTML上下文时自动使用htmlentities一样。

以下是如何正确编写代码(尽管我建议使用<?= ?>标记):

hs3.graphicsDir = <?echo json_encode("$RootPath/ExternalLibrary/highslide/graphics/"); ?>;

在此更改之后,注入将导致错误/无效的graphicsDir值,但它&#34; break&#34; HTML本身。 (再次,查看实际HTML 以查看$ RootPath的真正价值。)

使用json_encode还可以整理PHP / JavaScript界面​​;在上面它允许省略周围的JavaScript引号,因为它们是生成的JSON String值的一部分。如果需要传递许多值,请考虑构造数组并使用相同的技术提供JSON编码的结果。