Я разродился конфигами для апача. http://pinpie.ru/en/manual/server-configuration но так и не понял, каким образом можно обеспечить запрет запуска пхп-файлов напрямую на конфигах, у которых не отдельно статика отдаётся, а кучей вместе с пхп. Это небезопасно. Нужно отдавать статику отдельным конфигом.
если разделять статику и скрипты, то да. Несомненно. Я именно так и поступаю. Просто печально это, что в 21 веке нет какой-нибудь малюсенькой галочки типа "похапе не отдавать. точка."
В чистом виде, как исходники чтоль? Можно пример? Или я туплю, или ты хреново объясняешь. Просто от обычного прямого доступа к подключаемым файлам всю жизнь работало: 1) Выставить в точке входа некую константу. 2) в подключаемых файлах прописать в начале самом: PHP: defined('MYCONST') or die('Иди нахер');
Это работает. Как вариант, можешь, конечно, все подключаемые файлы хранить как .inc, и запретить апачу их отдачу клиенту. Так некоторые делают. Но как по мне это еще бОльший костыль.
Карочи, не изобретай велосипеды, юзай константу запирающую. Это не костыль, а бестпраксис. Юзается повсеместно. Просто подключаемый файл не будет позволять себя исполнять, если не является частью системы.
Во-первых, константы это костыль, т.к. можно без этого обойтись. То, что он юзается повсеместно, это не аргумент. Во-вторых, я не изобретаю велосипеды, а разношу бэкэнд скрипты и фронтэнд статику. И при таком подходе нет нужды трахаться с костылями.
так. вроде вот такой конфиг прокатил: Код (Text): <VirtualHost *:80> ServerName pintest.ru DocumentRoot "/var/www/pintest.ru" <Directory "/var/www/pintest.ru"> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*\.php$ - [F,L,NC] RewriteRule . index.php [L] </Directory> </VirtualHost>
блин, а так он файлы не отдаёт. --- Добавлено --- я не хочу делать так, чтобы *МОИ* файлы не работали без других *МОИХ* файлов. Я хочу, чтобы любые php файлы не запускались напрямую. Канэц. Решение с константами не подходит.
@igordata как написал @denis01 можно вынести всё выше индексного файла, в т.ч. папку pages, templates и т.д в твоем случае.
Подходит, потому что это часть логики приложения, и приложение само должно решать эту проблему. Завтра кто-то выкатит пинпай на безапачевый конфиг и лососнет прямца. А с закрывающей константой - пофигу. --- Добавлено --- Он же масспродукт пилит. А для массы такое не прокатит.
Это единственный способ? Я пользуюсь разнесением в разные папки, да. Но вдруг есть возможность отдавать все файлы, кроме пхп, а все урлы, если это не файл и не пхп - рулить на индекс. --- Добавлено --- блин есть композер. есть библиотеки. Я не могу и никто не может гарантировать, что кто-то где-то эту константу не забудет. Поэтому я и ищу способ предотвратить прямой запуск ЛЮБЫХ пхп файлов.
Ты не можешь гарантировать, что твой конфиг будет работать на конечном сервере. Помнится, ты сам яро отстаивал позицию, мол апач не нужен. Ты не первый, ты не последний. На финальном сервере может не быть апача. А может и nginxа не быть. Поднимет какой-нибудь хипстер от веба сервер на связке squid+bultInPHP и вся любовь. Гарантии закрытия исходников константой, собственно, можно нарулить программно, если они так уж нужны. Но это избыточная логика. А еще можно просто не считать конечного пользователя, если он взялся дописывать что-то под пинпай, дураком, который не разберется с такой фигней.
ну если он не будет использовать апач, то и конфиг для апача он использовать не будет. Я не вижу смысла в твоем сообщении. Это какая-то саморешаемая проблема. ну я пока не разобрался, хочу разобраться, чтобы пользователю не пришлось это делать. Но видимо придётся забить.
Смысл в том, что толку тогда с этих конфигов, если это, как ни крути, платформозависимое решение и вынос части логики на сервер, что совсем не круто, и гарантий работоспособности этого решения еще меньше, чем гарантий, что конечный разраб не забудет ничего закрыть ручками. Я понимаю, что ты хочешь прям прям изящно-красивое решение. Но они не всегда есть. Тут у нас два стула - или охренеть изящно в своем великолепии, или для широкого пользователя. На двух сразу не усидишь.
Следующее правило Код (Text): RewriteCond %{REQUEST_URI} .*\/.*\.php$ RewriteRule . index.php [L] делает ререайт с php-файлов из вложенных директорий на index.php, но из него нельзя убрать слеш, иначе сам индекс не будет работать. Впрочем, можно исключить индекс с помощью регулярки, но хз насколько разумно запрещать пользователю свои скриптики запускать. Можно наоборот, перечислить в.htaccess директории, используемые PinPIE.
всё, короче решение забить, с которого я начал свои поиски, было правильным. Я к нему возвращаюсь. Каждый пусть варит сам своё варево. Константы я пихать не буду тоже. =)
залил пример в гит https://github.com/pinpie/example-simplest --- Добавлено --- понатыкайте звёзд плс, и в главном https://github.com/pinpie/pinpie тоже, кто еще не тыкал.