2016-11-12 3 views
-2

Я использую ckeditor в простой cms i build со следующей конфигурацией.Браузер не интерпретирует php-код

<script> 
     if ($("#editor").length) { 
     CKEDITOR.replace('editor', { 
     language: 'en', 
     allowedContent: true, 
     }); 
     CKEDITOR.config.protectedSource.push(/<\?[\s\S]*?\?>/g); 
     } 
       </script> 

Он отлично работает, если перейти на вкладку источника в редакторе и введите некоторый PHP код вроде следующего:

<?php echo "hello"; ?> 

оно сохраняется в базе данных, как <?php echo "hello"; ?> so far so good

Теперь моя проблема это когда вы получаете это из базы данных и отображаете ее в браузере, она не появляется.

Я сделал var_dump на переменную, которая имеет код, и я вижу следующее:

...modules\pages\views\base.php:38:string '<?php echo "hola"; ?>' (length=21) 

Таким образом, значение существует, и его достижения точки зрения, я не undestand почему он не появляется на стр.

страница является template.php , если я смотрю на исходный код мой PHP код является beingg прокомментировал

<!--?php echo "hola"; ?-->

и это, как я пытаюсь показать код если я сделать следующее

<div class="article-content-container"> 
    <?php echo $this->security->xss_clean($content); ?> 
</div> 

он отображается как

<div class="article-content-container"> 
          &lt;?php echo "hola"; ?&gt;<!--?php echo "hola"; ?-->       
         </div> 

если я отображаться как этот

<div class="article-content-container"> 
     <?php echo $content; ?> 
    </div> 

он получает комментировал.

Надеюсь, что я был ясен, любая помощь будет вызвана.

Благодаря guys-

+3

Браузеры не запускают php-серверы –

+1

Строка выводится точно так, как должна. Что касается браузера, то PHP-код является просто строкой. Ожидается, что веб-браузер ничего не сделает с этим. – David

ответ

1

Браузеры не интерпретируют PHP-код, и они ничего не знают об этом. Их никогда не было, и они никогда не будут. PHP-код выполняется на сервере; оттуда он производит некоторый вывод, который отражается в браузере клиента, обычно HTML, но может также быть CSS или JavaScript, изображениями или другими загружаемыми файлами.

Если вы выведете PHP-код, то наибольший посетитель может сделать с ним, вручную сохранить его в локальном файле, установить собственное программное обеспечение PHP и запустить его в этом. В браузере он никогда не будет волшебным образом запускаться, независимо от того, что вы делаете.

Если вы хотите запустить код в браузере, это должен быть JavaScript.Если вы хотите запустить некоторые PHP-код на сервере, не echo это, eval это:

<div class="article-content-container"> 
    <?php eval($content); ?> 
</div> 

Обратите внимание, что eval рассматривает его вход, как уже имея PHP открытый тег, так что вы бы передать echo "hello"; к нему, а чем <?php echo "hello"; ?>. Вы все равно можете использовать ?> в коде eval'd, чтобы вернуться в режим HTML + PHP, если вам нужно.

Любой PHP или JavaScript-код может быть тривиально разработан для того, чтобы быть враждебным, и поэтому отправка любой разметки или кода для выполнения на вашем сайте должна рассматриваться как привилегированное действие. Вы должны быть уверены, что не позволяете никому, кто не является аутентифицированным администратором вашего веб-сайта, сделать это. Есть способы для песочницы или очистки такого кода, если вы действительно должны позволять случайным людям запускать его, но это сложнее. CodeIgniter xss_cleanis an incomplete attempt to stop XSS, и, конечно же, не предназначен для безопасного выполнения кода пользователя, хотя он будет искажать код и раздражать его.

В общем:

  • Если вам нужно выполнить представленный PHP затем использовать eval($content);.

  • Если вам нужно представить представленный HTML, который может включать исполняемый JavaScript, используйте echo $content;.

  • Если вам нужно вывести представленный простой текст (который является единственной формой, в которой, как правило, безопасно допускать ввод от пользователей), используйте echo htmlspecialchars($content);.

-1

Если вы не сохраните тег PHP в базе данных, вы можете использовать Eval() для запуска сохраненного кода:

eval($this->security->xss_clean($content)); 

Только тогда, когда накопленная бит не в окружении <?php and/or ?>

EDIT: Предоставление людям возможности запуска кода из базы данных или даже сохранение кода в базе данных - потенциальный риск. Он может быть использован.

+4

Обратите внимание, что разрешение пользователям вводить PHP-код, который будет выполняться * на сервере * с потенциально * повышенными разрешениями, несет с собой определенный риск. – David

+1

Спасибо, я редактировал свой пост. Это действительно потенциальный риск для безопасности. – SmartGuyz

Смежные вопросы