Перейти к содержимому

Сервис обмена электронных валют


Выборочная авторизация apache

#1 matveich_ex

matveich_ex
  • Пользователь
  • 12 сообщений
  • Репутация: 0
0

Отправлено 24 Март 2010 - 11:55

Здравствуйте!
Коротко: необходимо сделать следующее: ограничить доступ к определенной директории сайта так, чтобы пользователи локальной сети (находятся в четко определенном диапазоне ip адресов) могли получать доступ к этой директории без ввода логина и пароля (т.е. доступ по ip), а пользователи ходящие на сайт с других ip должны были вводить логин и пароль.
На данный момент: доступ обеспечен с помощью файла htaccess и пускает лишь пользователей локальной сети.
Как в htaccess сделать по отдельности авторизацию по ip или логину с паролем - знаю, а как совместить подобным образом (пусть даже не в htaccess) - без понятия!
Уверен, что кто нибудь да сталкивался с подобной проблемой, однако поиск в инете к сожалению результатов не дал (не исключаю что не то искал). Заранее спасибо!

P.S. если информация поможет, то сайт крутится на корпоративном сервере, стабильно работает LAMP, ось Debian

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 28 Март 2010 - 17:44

matveich_ex,
Хех, сделал но конечно через такую опу. Допустим, мы хотим запрашивать авторизацию с IP не из сетки:
1) Создаём файл .htaccess в корне с таким содержимым
# запрещаем чтение файла .htpasswd
<Files .htpasswd>
   deny from all
</Files>

RewriteEngine On # включаем модуль mod_rewrite

RewriteCond %{REMOTE_ADDR} 192.168.*.* # если из сетки
RewriteRule ^(.+)$ $1 [L] # перенаправляем на что запросили, то и получили

RewriteCond %{REMOTE_ADDR} !192.168.*.* # если НЕ из сетки
RewriteCond %{SCRIPT_FILENAME} !dsafwqggnqwe.php$ # и если имя скрипта НЕ заканчивается на dsafwqggnqwe.php
RewriteRule ^(.+)$ dsafwqggnqwe.php?http=$1 [QSA,L] # перенаправляем на файл dsafwqggnqwe.php с http - тем что запросили, так же не забываем передать все остальные GET параметры с помощью флага "QSA"

# Ставим на файл dsafwqggnqwe.php авторизацию
<Files dsafwqggnqwe.php>
AuthType Basic
AuthName "Authorization"
AuthUserFile [полный путь с именем до файла .htpasswd] 
require valid-user
</Files>
2) Создаём файл .htpasswd с помощью одноименной утилиты или ещё как. Затем помещаем его куда хотим, главное затем в .htaccess абсолютный путь до него правильно прописать

3) Создаём в корне файл с именем dsafwqggnqwe.php и содержимым
<?php

if( isset($_GET['http']) && file_exists($_GET['http']) ) // если передан параметр http и такой файл или папка существуют
{
$file = $_GET['http']; // заносим в $file содержимое GET-параметра http
if( !is_file($file) ) // Если передан не файл, а папка
$file = realpath($file)."/index.php"; // строим путь до файла index.php в этой папке
include_once($file); // включаем переданный файл в скрипт
}
else
echo "Файл не существует"; // если GET-параметр не был передан или не является файлом или папкой

?>

4) Попробовать в работе.

P.s.: Проверял на сервере HC - Linux: передаётся строка с GET, поддерживаются отправления формы.
  • 0

#3 matveich_ex

matveich_ex
    Topic Starter
  • Пользователь
  • 12 сообщений
  • Репутация: 0

Отправлено 29 Март 2010 - 10:00

Огромное спасибо за помощь! Сделал все по рекомендациям, возникла проблема, цитирую из логов ошибок апача:
htaccess: RewriteCond: bad flag delimiters, referer: http://адрес сайта
Непосредственно при входе на сайт: Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 05 Апрель 2010 - 12:02

matveich_ex, Сейчас скину архивчиком мой рабочий вариант. Возможно у вас сервер не поддерживает какие-то флаги. Надо поразбираться.

Прикрепленные файлы

  • Прикрепленный файл  IP.ZIP   1,68К   Количество загрузок: 155

  • 0

#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 20 Апрель 2010 - 21:24

matveich_ex, ну так и не заработал? Просто так долго мучался с этим скриптом, что даже стало интересно, работает ли он в реалии на всех серверах, или только на моем...
  • 0


Оформление форума – IPBSkins.ru