【问题标题】:Javascript code sometimes printed on the screenJavascript 代码有时会打印在屏幕上
【发布时间】:2014-09-14 06:33:27
【问题描述】:

我在我的网站中使用 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 变量之后的代码,知道吗?

【问题讨论】:

    标签: javascript php highslide


    【解决方案1】:

    $RootPath 包含一些注入,不是值“Portal” - 什么!?!?忍受我。

    它包含“”或类似的;如果您是Doubting Taha查看实际呈现的 HTML。这反过来会导致浏览器关闭脚本元素,从而导致以下内容被处理为正常的非脚本HTML。 (如果浏览器遇到序列“”,则从技术上讲,它可以终止脚本元素的 PCDATA,尽管据我所知,现代浏览器要求它至少是“”。)

    为解决/防止此问题,始终使用 json_encode 来处理 PHP 中用于/用作 JavaScript 的值。这应该是自动的,就像在将不保证安全的 HTML 文本写入 HTML 上下文时使用 htmlentities 应该是自动的一样。

    这里是如何正确编写代码(虽然我推荐使用&lt;?= ?&gt;标签):

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

    在此更改之后,注入将导致 graphicsDir 值错误/无效,但它不会“破坏”HTML 本身。 (再次,查看实际 HTML 以了解 $RootPath 的真正价值。)

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

    【讨论】:

    • 好吧,我的朋友,这是真的,在 php 变量后面有一个 关闭,但是为什么呢?我不明白为什么会发生这种情况,为什么 $RootPath 包含 或类似的视图?请你解释一下。
    • @OmarTaha 我不知道哪里这个值是从哪里来的;那是让你去追查 :) 这可能是一个意外的分配.. 有人可能试图溜进恶意值。在代码中追踪它到哪里/为什么它被分配了有问题的值。
    • 好吧,我尝试使用你的代码,但还是一样,它仍然出现。
    • 不可能(好吧,这可能是可能的,但在我接受这个想法之前,我希望看到 actual HTML 生成) - 发布 actual HTML相关的hs3.graphicsDir = .. 行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    相关资源
    最近更新 更多