Подскажите как сделать на php или сделайте

Статус
В этой теме нельзя размещать новые ответы.
  • Заблокирован
  • #11
писал не я, но почти то что тебе нужно:
PHP:
<?php

    if (!isset($_SERVER['PHP_AUTH_USER']))

{
        Header ("WWW-Authenticate: Basic realm=\"Enter Login/Password\"");
        Header ("HTTP/1.0 401 Unauthorized");
        exit();
}

else {
        if (!get_magic_quotes_gpc()) {
                $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
                $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
        }
        
        @$p = $_SERVER['PHP_AUTH_USER'];
        $lst = mysql_query("SELECT password FROM users WHERE username='$p' and is_moder='1'") or die(mysql_error());

        if (!$lst)
        {
            Header ("WWW-Authenticate: Basic realm=\"Введите Логин и Пароль\"");
        Header ("HTTP/1.0 401 Unauthorized");
        exit();
        }

        if (mysql_num_rows($lst) == 0)
        {
           Header ("WWW-Authenticate: Basic realm=\"Введите Логин и Пароль\"");
           Header ("HTTP/1.0 401 Unauthorized");
           exit();
        }

        $pass = @mysql_fetch_array($lst);
        if ($_SERVER['PHP_AUTH_PW']!= $pass['password'])
        {
            Header ("WWW-Authenticate: Basic realm=\"Введите Логин и Пароль\"");
           Header ("HTTP/1.0 401 Unauthorized");
           exit();
        }


}

?>
 
Сейчас пароли хранятся просто в текстовом файле. Чтоб использовать базу - нужно эти пароли туда запихать. И если добавится новый юзер, то нужно, что дабавить его легко можно было. А еще лучше прибить текущую базу и загрузить новую из текстового файла.

5 тысяч паролей, да по 10 символов (в среднем) каждый пароль, да плюс перевод строки - получаем 55к текстовый файлик. Уверяю, ни на одном хостинге у тебя с ним никаких проблем не будет. Проверка in_array() в массиве из 5 тысяч записей тоже отработает мгновенно. Не вижу смысла насиловать базу. Даже 10 тыс. паролей все еще будут летать.
 
  • Заблокирован
  • #13
Название файла с паролями думаю лучше будет сделать типо .htpasswords, чтобы извне не было доступа к нему. Это легче, чем прописывать запрет на доступ в файле .htaccess.
Можно сделать так: скрипт авторизации ставит куки, если человек прошел авторизацию, далее в файле .htaccess прописать, чтобы при обращении к secretfolder открывало скрипт (например access.php), который будет проверять эти куки и сравнивать пароль с файлом .htpasswords и уже по обстоятельству выдавать результат.
 
5 тысяч паролей, да по 10 символов (в среднем) каждый пароль, да плюс перевод строки - получаем 55к текстовый файлик. Уверяю, ни на одном хостинге у тебя с ним никаких проблем не будет. Проверка in_array() в массиве из 5 тысяч записей тоже отработает мгновенно. Не вижу смысла насиловать базу. Даже 10 тыс. паролей все еще будут летать.

Полностью поддерживаю ! Ни тормозов ни глюков не будит !
Было дело фаил в 1 метр обрабатывал так оно и там не гнало (правдо 1-2 сек. но всеже для файла с паролями это слишком большой размер).

Да к стати как вариант защиты страницы которая локатится при совподении пароля.
Пусть и не стандартно и глуповато но как выход ))

на странице авторизации при совподении пароля делаем локатион на страницу вида домен.zona/md5(IP).html
Делаем .htaccess с содержанием
RewriteEngine on
RewriteRule (\d{32}).html нужная_страница.php?code=$1

Делаем проверку с самого верха страницы "нужная_страница.php" проверку на совподение md5(IP) с $_GET['code'] если все ок то печатаем страницу ежели нет то локатим на авторизацию.

Вот.

Ток сильно не материте )) эт так идея.
 
Значит как я понял база не нужно.

Теперь осталось выяснить кто все это напишет и за сколько?
Желательно все сделать сегодня.

 
Могу начать прямо сейчас.
Зделаю за так. Но если есть желание вознагродить то буду только рад:)
Если что стучите в ICQ.
 
  • Заблокирован
  • #17
Значит как я понял база не нужно.

Теперь осталось выяснить кто все это напишет и за сколько?
Желательно все сделать сегодня.

*** скрытое содержание ***

Так что делать когда всё есть, создаешь файл:
допустим login.php с содержимым:
PHP:
<?
 $list = file(dirname(__FILE__).'/passwords.txt');
 
 $pass = trim($_REQUEST[pass]);
 if (!$pass) {
    echo "<br><br><form>Пароль:";
    echo "<input type=password name=pass>";
    echo "<input type=submit value=Go></form>";
    die();
 }

  if (in_array("$pass\n", $list) || in_array($pass, $list)) {
       header("Location:  http://site.com/secretfolder/");
       die(); 
  } else {
       header("Location:  http://site.com/error.html");
       die(); 
  }  
?>
где: header("Location: http://site.com/secretfolder/"); - это в случае успешного входа редирект на директорию secretfolder, измени на нужную тебе страницу/директорию
а: header("Location: http://site.com/error.html"); - это в случае неверного пароля ридерект на страницу с ошибкой, можешь изменить на свои нужды

Создаешь файл passwords.txt с паролями допустим:
Код:
123456
654987
321654
468768
899744
487982
Создаешь файл .htaccess с содержимым:
Код:
<Files "*.txt"> 
  deny from all 
</Files>
И всё готово. Если тебе что-то не понятно по этому посту пиши поможем :)
 
Поддерживаю, все уже написано было 15 постов назад )

Для просмотра ссылки Войди или Зарегистрируйся - "хорошая" ссылка
Для просмотра ссылки Войди или Зарегистрируйся - "плохая ссылка"
passwords.txt - файл с паролями, каждый пароль с новой строки
.htaccess (см. пред. пост) нужен чтоб у тебя не слили passwords.txt
сам файлик обзывай index.php (ну или login.php - как хочешь).
И понеслася.

Если что, вот error.html
Код:
<html><body><center><br><br><br>
<font color=red>Неправильный пороль</font>
</body></html>

Ну и good.html тогда уж до кучи (в скрипте вместо Для просмотра ссылки Войди или Зарегистрируйся пропиши Для просмотра ссылки Войди или Зарегистрируйся)

good.html
Код:
<html><body><center><br><br><br>
Вот информация которую вы запросили:  Ленин - Жив!
</body></html>
 

Вложения

  • 3456789.gif
    3456789.gif
    2,1 KB · Просмотры: 33
Окей, тогда маленькое уточнение:

PHP:
<?
 $fp = fopen(dirname(__FILE__).'/passwords.txt', 'r');
 $list = array();
 while($str = fgets($fp)) $list[] = trim($str);
 
 $pass = trim($_REQUEST[pass]);
 if (!$pass) {
    echo "<br><br><form>Пароль:";
    echo "<input type=password name=pass>";
    echo "<input type=submit value=Go></form>";
    die();
 }

  if (in_array($pass, $list)) {
       header("Location:  http://site.com/secretfolder/");
       die(); 
  } else {
       header("Location:  http://site.com/error.html");
       die(); 
  }  
?>

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