propeller
написал 9 марта 2005 года в 12:33 (1001 просмотр)
Ведет себя
как мужчина; открыл 53 темы в форуме, оставил 158 комментариев на сайте.
Может тема эта и забита, но такого я еще нигде не видел.
Индекс — /var/www/html/. Есть файл /var/www/html/history/.htaccess:
AuthType Basic
AuthName «Adm area»
AuthUserFile /usr/local/apache/.passwd
Require user Pupkin
Файл создан htpasswd -c;
В конфиге апача изменил для /var/www/html на AllowOverride AuthConfig;
Так вот, что меня здесь удивляет. http://localhost/index.php?path=./history;
Просят меня ввести пароль. сопротивляюсь — жму на отмены, ввожу что-то в поля. так вот после какого-то числа таких операций у меня уже ничего не просят и просто показывают информацию. Да, а просьба о пароле-то тоже ведь на фоне той самой страницы, которую и защищаем! полная чепуха выходит.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
вместо последней строки:
Require valid-user
Нет, что-то не вышло. то есть тут опять раз восесь на отмену нажмешь и все нормально.
Да даже если и не так, когда я иду по ссылке http://localhost/index.php?path=./history;
Он просит с меня пароль\логин, но при это отображает все это на фоне как раз той самой страницы, которая и предполагает быть защищенной. там все видно!
да-да, а о содержимом index.php и о том, как именно оно обрабатывает переменную path, всем необходимо подключаться к астралу и вылавливать это там.
сам апача будет спрашивать только при прямом обращении http://localhost/history/
и вот там уже отвертеться ну никак не получится. ;)
Кстати говоря, подобная практика (указывать пути к инклюдящейся страничке в качестве параметра к php-шнику) очень часто предстявляет из себя большую дыру в security. Ибо первое, что приходит в голову — запроcить index.php?path=/etc/passwd. Конечно, кроме списка пользователей и хешированных паролей я ничего ценного не получу, но это же всего лишь первый шаг — много что ещё можно придумать. К примеру (если это действительно include), я могу сказать index.php?path=ftp://path.to.my.own.site/path/to/my/php, в которой будет прописана процедура изменения рутового пароля или запуска на каком-нибудь порту ssh с авторизацией по ключу. Да много что можно придумать.
А что такое астрал? Ну а если в пхп обходит такую защиту, то зачем надо просить пароль? Ну а доступ к папкам как таковым можно закрыть просто параметром Indexes на апаче. только вот теперь неясно, коль скоро .htaccess не помог, как делать ограничение доступа после авторизации.
ну допустим, что path я все-таки проверяю.
function block_path_name ($path) {
$rw="^\./([[:alnum:]]{3,15}/){0,10}[[:alnum:]]{3,15}(\.[[:alnum:]]{2,5})?$»;
$path=htmlspecialchars(stripslashes(substr(trim($path),0,200)));
return (!ereg($rw,$path))?(«./»):($path);
}
Ну и потом я открываю директорию opendir($path); вроде как таким образом разговор про скрипт со стороннего сервера пропадет.
.htaccess не ограничивает доступ к файлам и папкам нв уровне скриптов.
он ограничивает доступ на уровне запросов.
т.е. запрос вида http://localhost/getfile.php?what=adm/data при таком вот содержимом getfile.php:
просто выдаст adm/data.html
в то время как прямой запрос http://localhost/adm/data.html уже будет смотреть на содержимое .htaccess и, при необходимости, запрашивать пароль.
ps:
а это, попросту говоря, то, откуда телепаты и прочие экстрасенсорные личности дополнительную неуказанную информацию получают самостоятельно. ;))
Так я не пишу таких инклудов;
$path=$_GET["path"];
Ну а потом я ее обрабатывая той функцией, что писал выше. А потом я только открываю opendir($path). Ну и только если в этой директории я найду правильный файл я буду разговраивать этим каталогом. больше вообще нигде не использую переменную $path.
ну, раз не особенно понимаешь разницу…
в общем, может тебе самому проверку нужную прикрутить, а?
куда более понятный для тебя в плане работы механизм получится.
Ну ничего не понял! если я тут не понимаю где-то какую-то разницу, то скажи где!
Про проверку самому — ну а что я делаю функцией block_path_name?
Вот, кстати, на opennet.ru предлагают вот такую схему аутентияикации для пхп. Есть ли на нее претензии по поводу ее секьюрности?
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header(«WWW-Authenticate: Basic realm=\"My Realm\"»);
header(«HTTP/1.0 401 Unauthorized»);
echo «Текст, отправляемый в том случае,
если пользователь нажал кнопку Cancel\n»;
exit;
} else {
echo »
Hello {$_SERVER['PHP_AUTH_USER']}.»;
echo »
Вы ввели пароль {$_SERVER['$PHP_AUTH_PW']}.»;
}
?>
Мне вот кажется, что выводить на экран пароль после его ввода совсем не следует. но не это главное в моем вопросе.
вот же вредный-то…
в первом случае с меня ничего не спрашивают. и нормально отображается страница.
а во втором я на вопрос ввода пароля Esc жму. и тогда мне выводится
итак, вопрос на размышление:
какая разница в механизме вывода двух запросов
getfile.php приведён ранее.