Как заинклудить php-шку на одной определенной странице?

InstantCMS 2.X
#16 20 февраля 2022 в 18:02

что будет, если я на сайте example.com размещу файл example.com/php.js

IamB

Это сырой набросок одного файла, здесь уже по вашему желанию в строке 16 регулярными выражениями, можете разрешить, запретить всё что угодно. В первой ветке есть папка myphp, на одном из моих сайтов находятся около 20 файлов, 10 лет всё нормально. Данное поле нужно только для вебмастера, доступ сторонних пользователей к нему должен закрыт! (описывать как закрыть доступ к созданию и редактированию контента вы знаете), мне оно нужно для работы с  API Яндекса.

P.S. Это просто набросок файла для поля «Добавить файл PHP», по его принципу можно легко переделать поле «Файл» и тогда оно станет универсальным.

#17 20 февраля 2022 в 19:52

 Nikolay, я ни в коем случае не противник набросков. Но поскольку большинство пользователей этого форума любят по-быстрому сделать ctrl+c, ctrl+v и не склонны к анализу кода, я и указал на возможный вектор атаки при бездумном использовании вашего кода.

#18 20 февраля 2022 в 20:42

о поскольку большинство пользователей этого форума любят по-быстрому сделать ctrl+c, ctrl+v и не склонны к анализу кода

IamB

Поэтому один файл и без второго он работать не будет

на возможный вектор атаки при бездумном использовании вашего кода

IamB

Бездумно не получиться у тех кто не хочет создать второй файл

#19 21 февраля 2022 в 18:46

В качестве дополнительной защиты можно добавить в настройку строку «папка с php файлами», а в поле $value разрешить только имя файла (без слешей), и выводить по составному пути

  1. return '<div class="add_files">' . @file_get_contents ($php_folder.$value, false) . '</div>';
#20 21 февраля 2022 в 20:11

Хотелось бы ещё убрать собачку перед file_get_contents, к примеру если добавляем ссылку на не существующий файл, то выводилась надпись — Не верный путь к файлу, без собачки идут нотисы. Как это реализовать, то времени нет рыть инет.

#21 21 февраля 2022 в 22:43

require, include, require_once и include_once с ними не получилось указать путь к файлу, перебрал много способов, но у вы.

Nikolay

Попробуйте так

  1. public function parse($value) {
  2.  
  3. if ($value === "") {
  4. return "";
  5. }
  6.  
  7. $path = PATH.$value;
  8.  
  9. if (file_exists($path)) {
  10. include $path;
  11. $out = ob_get_clean();
  12. return '<div class="add_files">'.$out.'</div>';
  13. } else {
  14. return 'Указана неверная ссылка';
  15. }
  16.  
  17. }

$value должно быть записано, например, так

/templates/custom/hw.php

#22 21 февраля 2022 в 23:08

Попробуйте так

IamB

Код не сработал выдал ошибку: Parse error: syntax error, unexpected end of file, expecting function (T_FUNCTION) or const (T_CONST)

#23 22 февраля 2022 в 15:49

У меня работает, не знаю как вам удалось заполучить такую ошибку, не понятно также, где она произошла. Я вам показал как метод parse() переписать, остальной ваш код никто не отменял.

Плюс моей реализации кроме прочего  в том, что в подключаемом файле доступен функционал CMS. В файле  /templates/custom/hw.php (см. пример выше)  работает такой код

  1. <?php
  2. $user = cmsUser::getInstance();
  3. echo "Hello, {$user->nickname}!";
#24 22 февраля 2022 в 18:23

У меня работает, не знаю как вам удалось заполучить такую ошибку

IamB

Очень просто, вместо фигурной скобки поставил круглую. По вашему мнению, как лучше делать с буферизацией или без неё.

#25 22 февраля 2022 в 18:59

Вариант с file_get_contents() организует отдельный get-запрос к серверу, т.е. запускается web-сервер, он запускает интерпретатор php, php файл выполняется и web-сервер отдает результат, этот результат «ловит» file_get_contents(). Это затратный способ, к тому же в этом варианте вы имеете автономный скрипт — у него нет доступа к функционалу CMS. Я выбрал бы «буферизацию». 

#26 22 февраля 2022 в 19:30

Я выбрал бы «буферизацию».

IamB

Выбираю ваш вариант, создам папку в дочерней теме и ни кому она не мешает.

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.