Javascript код иногда печатается на экране

Я использую высокочастотную библиотеку на своем веб-сайте, и иногда не всегда код, который я использовал, напечатан на экране, но я не знаю почему, это мой код:

    <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

Решение

$ RootPath содержит некоторые инъекции и является не Значение «Портал» — что!?!? Потерпите меня.

Это содержит «</ скрипт>» или похожие; просмотреть фактический визуализированный HTML если ты Сомневаюсь таха. Это в свою очередь заставляет браузер близко элемент сценария, который приводит к тому, что следующее обрабатывается как обычный не-в сценарии HTML. (Браузер может технически прекратить PCDATA элемента скрипта, если он встретит последовательность «</ «, хотя, насколько мне известно, современные браузеры требуют, чтобы это было как минимум»</ скрипт «.)

Чтобы исправить / предотвратить это, всегда использование json_encode для значений из PHP, используемых в / как JavaScript. Это должно быть автоматический, Точно так же использование htmlentities должно быть автоматическим при написании HTML-текста, который не гарантированно безопасен, в контексте HTML.

Вот как правильно написать код (хотя я рекомендую использовать <?= ?> теги):

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

После этого изменения внедрение приведет к неверному / недействительному значению graphicsDir, но это не «сломать» сам HTML. (Опять же, просмотр фактический HTML чтобы увидеть, какое значение действительно имел $ RootPath.)

Использование json_encode также позволяет привести в порядок интерфейс PHP / JavaScript; в приведенном выше примере он позволял опускать окружающие кавычки JavaScript, поскольку они являются частью результирующего значения JSON String. Если необходимо передать много значений, рассмотрите построение массива и предоставьте результат в кодировке JSON, используя ту же технику.

0

Другие решения

Других решений пока нет …