2014-09-14 1 views
1

Я использую библиотеку highslide на своем веб-сайте, а иногда не все время, код, который я использовал, печатается на экране, но я не знаю, почему это мой код :Код 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, любая идея?

ответ

0

$ RootPath содержит некоторую инъекцию и составляет не значение «Портал» - что!?!? Потерпите меня.

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

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

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

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

После этого изменения инъекции приведет к плохому/недействительному значению graphicsDir но это будет не " сломать "сам HTML. (Снова просмотрите актуальный HTML код, чтобы узнать, какое значение было $ RootPath.)

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

+0

Хорошо, это мой друг, есть близко после переменной php, но почему? Я не понял, почему это происходит, и почему $ RootPath содержит или аналогичные взгляды? Могли бы объяснить, пожалуйста, пожалуйста. –

+0

@ OmarTaha Я не знаю * где * значение исходит; это для вас, чтобы отслеживать :) Это может быть случайное назначение .. * или * кто-то, возможно, попытался соскользнуть со злонамеренным значением. Отследите его в коде, где/почему ему было присвоено проблемное значение. – user2864740

+0

ну, я пытался использовать ваш код, но то же самое, он все еще появляется. –