LINUX.ORG.RU

Защита скриптов от запуска через браузер.

 


0

2

Есть сайт на пхп.
Предположим index.php инклудит header.php и footer.php. header.php и footer.php предназначены только для инклуда и нужно убрать возможность их запуска из браузера (http://мойсайт.ru/header.php).
Есть способ определить что скрипт запущен через браузер или проще просто спрятать их в директорию в которую нет доступа?

★★★★★

Последнее исправление: TDrive (всего исправлений: 1)

Второе.

anonymous
()

В главном скрипте дефайнится переменная, а в инклюженных проверяется, что она установлена.

Добавьте пожалуйста метки «быдлокод» и «говностиль».

Кошернее конечно давать запускать только нужные скрипты, а не все подрад с расширением похапе.

Vit ★★★★★
()
Ответ на: комментарий от Vit

Добавьте пожалуйста метки «быдлокод» и «говностиль».

это к чему?

Думаю тогда лучше закрытую папку сделаю.

TDrive ★★★★★
() автор топика

Есть способ определить что скрипт запущен через браузер или проще просто спрятать их в директорию в которую нет доступа?

нет доступа КОМУ? что браузером, что include, всё одно апач будет файл читать. Как ему доступ запретить? Ну разве что только через .htaccess. Хотя способ с *.inc лучше. Переменную тоже есть смысл дефайнить, это если например .htaccess не сработает (например админ случайно кильнёт, или криво его отредактирует).

drBatty ★★
()
Ответ на: комментарий от Debasher

Просто вспомнил что в joomla в начале пхп скриптов вставляется код для защиты от запуска через браузер, вот и решил узнать какие вообще есть варианты. Видимо там какраз и есть с переменной.
Всем спс.

TDrive ★★★★★
() автор топика
Ответ на: комментарий от drBatty

Ну разве что только через .htaccess

Есть масса других не менее интересных способов не дать апачу прочитать эти файлы

boombick ★★★★★
()
Ответ на: комментарий от drBatty

ну лол править .htaccess каждый раз когда добавляешь фаел это сильно. Это не считая того что деплоиться можно и без апача. В целом по треду согласен с Vit`ом

zz ★★★★
()
Ответ на: комментарий от drBatty

что браузером, что include, всё одно апач будет файл читать

Вы думаете, что пых инклюдит файлы посредством апача? оО

boombick ★★★★★
()

Самый надежный способ - это оставить в DocRoot только index.php и статику. Все нормальные люди (и нормальные фреймворки) так и делают

boombick ★★★★★
()
Ответ на: комментарий от zz

ну лол править .htaccess каждый раз когда добавляешь фаел это сильно.

а зачем каждый раз-то? ТС ведь писал - в _отдельный_ каталог. А там запретить всё.

drBatty ★★
()
Ответ на: комментарий от boombick

Вы думаете, что пых инклюдит файлы посредством апача?

посредством php_mod, который работает от имени apache. Не?

Самый надежный способ - это оставить в DocRoot только index.php и статику.

этого недостаточно. Куда вы собрались убрать вкл. файлы?

drBatty ★★
()
Ответ на: комментарий от drBatty

посредством php_mod, который работает от имени apache. Не?

У вас тотальное непонимание того, как работает mod_php и вебсервер

этого недостаточно. Куда вы собрались убрать вкл. файлы?

Я собрался убрать их выше докрута, например. Или в свой хомяк положить.. Да куда угодно, куда у апача нет доступа. Тогда апач их точно прочитать не сможет. Логично?

boombick ★★★★★
()
Ответ на: комментарий от zz

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

boombick ★★★★★
()
Ответ на: комментарий от zz

zz

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

очевидно если действительно вне, то не надо.

drBatty ★★
()
Ответ на: комментарий от boombick

boombick

У вас тотальное непонимание того, как работает mod_php и вебсервер

ну дык просветите.

boombick

Я собрался убрать их выше докрута, например. Или в свой хомяк положить..

теперь понял.

boombick

Да куда угодно, куда у апача нет доступа. Тогда апач их точно прочитать не сможет. Логично?

нет. Потому-что:

boombick

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

я такой от рождения, и у меня совсем другая болезнь. Мы с вами по разному понимаем выражение «нет доступа у апача». Лично я считаю, что процесс запущенный юзером apache (или для Deb этот юзер завётся www-data) имеет доступ ко всем файлам, которые лежат в каталогах, у которых для этого юзера установлено право +x, и кроме того, у файлов есть право +r. Ну например /etc/passwd. А вот к файлу /etc/shadow у апача доступа нет. То, что «невозможно» получить доступ по http к чему-то, что лежит вне докрута, я конечно понимаю. Но это «невозможно» не зря в кавычках, ибо вы таки доступ получаете - скрипт исполняется. Или не исполняется, если это не скрипт.

drBatty ★★
()
Ответ на: комментарий от drBatty

ну дык просветите.

Гугл в помощь, мне миссионерством претит заниматься. Но вообще учите матчасть, и учитесь читать более внимательно (в данном случае ОП-пост рекомендую прочитать раз несколько, дабы понимать на какой вопрос вы отвечаете). У вас тотальная каша в голове.

boombick ★★★★★
()
Ответ на: комментарий от note173

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

Kalashnikov ★★★
()
Ответ на: комментарий от Vit

Vit, ты так низко пал в моих глазах... Такое кривое решение еще придумать надо.

Единственно верное решение: - вынести из docroot-а; - отделить HTML от PHP (что-то мне подсказывает из постановки задачи, автор это не делает)

Все остальное - сны извращенцев и склеенные скотчем костыли.

anonymous
()
Ответ на: комментарий от anonymous

Человек спрашивал, как сделать чтобы не запускалось, а не как сделать нормально. Кто я такой, чтобы его отговаривать?

Vit ★★★★★
()
Ответ на: комментарий от boombick

boombick

Гугл в помощь, мне миссионерством претит заниматься.

а что «гугл»? там все либо такие умные и гордые как вы, либо такие тупые как я.

boombick

Но вообще учите матчасть

вот и давайте сцылки.

boombick

У вас тотальная каша в голове.

угу. я и думаю сейчас совсем о другом :-)

drBatty ★★
()

вот еще одна идея для говностиля :)

поменяй разрешение с php на phpt или phpinc (в зависимости от назначения), назначь исполнимыми только .php и выруби mime-magic :)

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Было выше.

А если меряться говнокодовостью, то лучше сгненерировать папку с рандомным и очень длинным хэшем, её имя записать в конфиг и туда спокойно складывать инклюды. Для пущей секурности можно в папку положить index.html c «Access Denied!»

В некой веб аппликухе так хранится конфиг доступа к внутренней админке.

Kalashnikov ★★★
()
Ответ на: комментарий от drBatty

помойму при использовании mod_php, отдельного процесса под PHP не создается, так что ты прав. А вот при CGI — создается. Еще надо проверить, как работает apache2-mpm-worker + mod_fcgid.

еще надо подумать, как бы приспособить php+suexec для этого, чтобы получилось сферическое непотребство в вакууме :)

stevejobs ★★★★☆
()
Ответ на: комментарий от boombick

Я тупой и гордый :) Это моя вечная проблема :)

вы можете посмотреть на работу любого веб-сервера на апаче - там Over9000 процессов, и каждый из них имеет владельцем apache. Кроме одного, который запускает все остальные. О результатах можете не сообщать, меня уже от этих процессов тошнит. Насмотрелся.

drBatty ★★
()
Ответ на: комментарий от drBatty

Я вебдевом лет 8 занимаюсь :) Поверьте, я прекрасно знаю как там все работает. Мне просто правда лень писать. В ваших словах доля истины есть конечно же, зря я так накинулся :) Но вот понимания целой картины пока нет

boombick ★★★★★
()
Ответ на: комментарий от boombick

Я вебдевом лет 8 занимаюсь :)

это круто конечно. Вот только это ни о чём не говорит. (я сам вебдевом занимаюсь постольку-поскольку, больше локально).

Поверьте, я прекрасно знаю как там все работает.

не поверю. Это очевидно:

Мне просто правда лень писать. В ваших словах доля истины есть конечно же, зря я так накинулся :) Но вот понимания целой картины пока нет

всё это общие слова, а опытный «вебдев разраб» мне-бы указал на конкретные мои ошибки, и пробелы в моих знаниях. Не просто - «ты мал и глуп, и не видал больших за...», а конкретно, и по делу. Т.к. от вас я такого не услышал, а лишь общие слова... Вывод однозначен. Особенно позабавило вот это:

Я собрался убрать их выше докрута, например. Или в свой хомяк положить.. Да куда угодно, куда у апача нет доступа.

Вот скажите мне пожалуйста тупому, откуда на подотчётном мне сервере в продакшене мой хомяк??? Зачем он мне там? Сдаётся мне, что «вебдев» 8 лет админил http://localhost :-)

drBatty ★★
()

В index.php:

define("__run__", true);

Во всех включаемых файлах:

defined("__run__") or die();

KivApple ★★★★★
()
Ответ на: комментарий от boombick

в mod_php не запускается отдельного процесса PHP, так что ему видно ровно столько, сколько видно апачу. libphp - это вообще dll или so. Нет? Если да, то drBatty прав.

stevejobs ★★★★☆
()

Блин... уже давно придумали MVC, и одну точку входа =( Зачем вы снова быдлокодите?

VirRaa ★★★
()

А есть еще nginx-way

location /static/ {
    # картинки, цсски и прочее
    root /path-to-static/;
}
location / {
    # единая точка входа для пых-приложения
    # весь гребаный роутинг в одном месте
    # никаких отображений uri в элементы файловой системы!
    fastcgi_pass   unix:/var/run/php/php-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME /path-to-app/index.php;
    include fastcgi.conf;
}

anonymous
()
Ответ на: комментарий от stevejobs

в mod_php не запускается отдельного процесса PHP, так что ему видно ровно столько, сколько видно апачу.

ну пусть даже запускается (хотя IRL запускается не mod, а ещё один httpd), ну и что? на самом деле, в начале httpd запускает с десяток процессов, и они ждут запросов. При необходимости запускаются новые процессы. В любом случае у процессов хозяин apache, и ничего они сделать не могут, из того, что нельзя apache. Проблема в том, что лазать вверх от докрута и по хомякам apache обычно позволяется.

drBatty ★★
()
Ответ на: комментарий от TDrive

А вам уже перечислили варианты. Из того, что бросается в глаза:

- попытка вместо роутера/дисперчера использовать апачизмы - вместо системы шаблонов (partials, layouts), использование инклюдов.

Эти моменты должен решать любой современный фремворк. Как сейчас в похапе дела обстоят c фремворками - не в курсе.

Vit ★★★★★
()
Ответ на: комментарий от drBatty

Я вообще не админ - это раз. Ветка называется «веб-девелопмент» - это два. На ошибки вам пусть учителя в школе указывают - это три.

Конкретно и по делу я говорю за зарплату, а здесь я развлекаюсь. И на тупые вопросы и реплики даю тупые ответы.

boombick ★★★★★
()
Ответ на: комментарий от boombick

Я вообще не админ - это раз. Ветка называется «веб-девелопмент» - это два.

ну тогда и не надо записывать странные мысли, вроде той, что якобы apache не имеет доступа в «свой хомяк». Это вообще проблема системного администратора. ИЧСХ, по умолчанию, в большинстве дистрибутивов, таки имеет.

На ошибки вам пусть учителя в школе указывают - это три.

да, мы не в школе, и вы - не учитель. Однако я к вам на работу устраиваться тоже не собираюсь, потому ваше «drBatty не нужен» меня тоже мало трогает, и вообще мимо кассы и не по делу. Называется этот демагогический приём «переход на личности». Если вы не согласны с моим мнением, то либо промолчите, либо напишите - конкретно с чем не согласны. А так - явное 4.1

drBatty ★★
()
Ответ на: комментарий от boombick

Вы не тупой. Ваша позиция по данному вопросу мне ясна и понятна. Тут дело в том, что drBatty очень много говорит, но практически никогда не может подтвердить свои слова делом. Совсем недавно он не смог написать простой SQL-запрос (а до этого раскритиковал рабочее решение от другого пользователя) и такое его отношение к делу во всех тредах. Кроме ненужного жужжания от него редко когда можно добыться чего-нибудь полезного.

anonymous
()
Ответ на: комментарий от Vit

что такое апачизмы?
где у меня написано, что и как я использую? Инклудить не только html можно если что.

Сами додумали какй у меня быдлокод, вы**лись и сделали вид что выше всего этого, лол.

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

Что в первом посте написали, то и обсуждается. Лично мне без разницы, как вы пишете.

Vit ★★★★★
()

Вариант в лоб:

if(basename($_SERVER["PHP_SELF"])!=basename(__FILE__))
	exit(0);

Варианты с константами «плохи» в случае использования кода как библиотеки. Можно нарваться на конфликт имен.

anonymous
()
Ответ на: комментарий от Vit

Кошернее конечно давать запускать только нужные скрипты, а не все подрад с расширением похапе

Кошернее вообще не держать исполняемые скрипты в корне сайта :) А точку входа иметь только одну и жёстко прописанную в настройках сервера.

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.