Тема: Убрать авторизацию

Всем добрый день!
Strawberry 1.1.1. База данных- MySQL. Всё работает просто отлично. И дизайн заточил, и плагины ненужные убрал.
Единственное, помогите убрать авторизацию пользователей, т.к. Strawberry 1.1.1 я поднял во внутренней сети нашего предприятия, при входе на которую пользователь вводит своё сетевое имя (логин) и пароль.
Сетевое имя получаю при помощи конструкции

$login=$_SERVER['REMOTE_USER']; 

Искал на форуме похожие темы (http://strawberry.goodgirl.ru/forum/search/68106073/ например), но к сожалению темы по полному отказу от авторизации не нашёл.
Логика простая: Пользователь, прежде, чем попасть на новости, авторизуется на внутреннем сайте. Вбивая в базу cute_users админа, username задаю как сетевое имя, допустим kkk\\LSmirnov.  Затем проверять сетевое имя и давать соответствующие права.
В head.php нашел следующий код:

    if (check_login($username, $cmd5_password)){
        $is_logged_in = true;

        cute_setcookie('lastusername', $username, (time + 1012324305), '/');
        cute_setcookie('username', $username, (time + 3600 * 24 * 365), '/');
        cute_setcookie('md5_password', $cmd5_password, (time + 3600 * 24 * 365), '/');

    } else {
        $result = '<font color="red">'.t('Неправильное имя пользователя или пароль!').'</font>';
        $is_logged_in = false;

        cute_setcookie('username', '', (time - 3600 * 24 * 365), '/');
        cute_setcookie('md5_password', '', (time - 3600 * 24 * 365), '/');
   }

меняю его на

$link = mysql_connect("aaa", "news", "aaa") or die("Could not connect : " . mysql_error());
mysql_query ("SET NAMES UTF8");
mysql_select_db("news") or die("Could not select database");
$surname=mysql_real_escape_string("kkk\\LSmirnov");
$q=mysql_query("SELECT username FROM cute_users WHERE UPPER(username) LIKE UPPER('".mysql_real_escape_string($surname)."')");

while($res=mysql_fetch_array($q))
    {
    $string= $res[username];  }
   
    if (isset($string))
{
        $is_logged_in = true;

        cute_setcookie('lastusername', $username, (time + 1012324305), '/');
        cute_setcookie('username', $username, (time + 3600 * 24 * 365), '/');
        cute_setcookie('md5_password', $cmd5_password, (time + 3600 * 24 * 365), '/');

    } else {
        $result = '<font color="red">'.t('Неправильное имя пользователя или пароль!').'</font>';
        $is_logged_in = false;

        cute_setcookie('username', '', (time - 3600 * 24 * 365), '/');
        cute_setcookie('md5_password', '', (time - 3600 * 24 * 365), '/');
   }

Окно авторизации теперь вообще не открывается...
Заранее спасибо!

Я начинающий клубничник

Re: Убрать авторизацию

uchenik пишет:

нашел следующий код... меняю его на... Окно авторизации теперь вообще не открывается

uchenik с таким же успехом мог бы написать:

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

Давайте разбираться:

1. Конструкция while формирует из базы строковую переменную $string с именем последнего юзера, зарегистрированного в базе (интересно, зачем?). И даже если бы вы вместо:

$res[username];

правильно написали:

$res['username'];

(кстати, от этого, и от того что для цикла while вы не задали условие его прекращения, и зависает ваше окно), то это всё равно бы не помогло, поскольку:

2. Конструкция if (isset($string)) проверяет, создана ли переменная $string, которая в дальнейшем коде нигде не используется! Ну да, ну существует $string, и что дальше? Переменные $username и $cmd5_password сами не сформируются.

3. ...продолжать, думаю, не имеет смысла?

На что, интересно, вы рассчитывали? Что скрипт сам себя запрограммирует? Или что кто-то реализует вашу идею за вас, доведя ваш заведомо нерабочий код до рабочего состояния? Не тут-то было! Не поможет даже ваше благородное признание в принадлежности к "чайникам" wink Не умеете - не беритесь за такие сложные задачи.

Кстати, для этого всегда есть "Дополнения: хотелка", может быть кто-нибудь и возьмётся?

А тема переезжает в "Стандартные и не совсем решения", поскольку к таковым и относится. Долго я ещё буду напоминать вам правило:

Читайте, пожалуйста, правила

  • 2.6. Будьте внимательны при выборе форума, в котором создаёте тему.
  • как думаете?

    Re: Убрать авторизацию

    А для каких целей вся затея? Чтобы в комментах было видно кто отправил сообщение?
    Но тогда нарушается принцип авторизации. Вместо "кто отправил сообщение" вы будите получать "с какой машины отправили сообщение". Так что есть ли в этом смысл?

    Если смысл есть, то для комментов есть более простое решение.

     <? $login=$_SERVER['REMOTE_USER'];  ?>
    <input type="hidden" name="name" value="<? echo $login; ?>"> 

    Или у Вас какие-то более глобальные цели?

    Re: Убрать авторизацию

    cmd, вообще цель была другая- новости Strawberry 1.1.1 лежат на внутреннем сайте, видимом только для сотрудников. Каждый сотрудник прежде, чем войти на сайт авторизуется при помощи своего имени и пароля. Целью было то, чтобы сотрудник-админ новостей не авторизовался второй раз на strawberry 1.1.1. При помощи $_SERVER['REMOTE_USER'] проверять, админ ли это, и если да, то сразу давать права админа, если нет, то нет smile Вообще, идея очень хорошая для интранета предприятий.
    ANT-Soft,

    На что, интересно, вы рассчитывали?

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

    Не умеете - не беритесь за такие сложные задачи.

    а вот здесь с Вами вообще не согласен. Ну да Бог с ним, если доведу до ума, то сообщу.

    Я начинающий клубничник

    Re: Убрать авторизацию

    ANT-Soft пишет:

    На что, интересно, вы рассчитывали?

    ANT-Soft пишет:

    Не умеете - не беритесь за такие сложные задачи.

    Я к тому, что вы пока ещё делаете синтаксические ошибки в PHP-коде, но тем не менее уже берётесь за такое серьёзное изменение скрипта, как обход авторизации путём привлечения глобальных переменных сервера и сторонних баз данных.

    То есть, другими словами, нужно понимать, что вы делаете.

    Авторизация - одна из глобальных вещей скрипта. Вы ломаете файл head.php, который вешает всю систему.

    Я вам там в "хотелке" дал простой совет как не париться с авторизацией: уберите из админки ссылку "выход". Пользователь залогинится один раз (это не трудно) и больше никогда не увидит форму авторизации - сразу будет попадать в админку.

    Re: Убрать авторизацию

    Вообще, идея очень хорошая для интранета предприятий.

    Позволю себе не согласиться. На мой вкус идея бредовая (на грани полного абсурда).
    Админ на то и админ, чтобы пройти процедуру авторизации. Это раз.
    Клубничка - самодостаточная система управления контента, которая предусматривает многоуровневую систему доступа и при нормальной погоде не нуждается в сторонних системах авторизации. Это два.
    Ограничить доступ для локальных IP-адресов можно без системы авторизации вообще. Это три.
    Если у вас уже есть БД с юзернеймами и пассвордами, то вы можете ещё просто экспортировать и синхронизировать с таблицами Клубнички. Нафига объявлять глобальные переменные? Это четыре.

    Резюмируя: если воспринимать вашу идею как нечто большее, чем разминку для мозгов, то смысла в ней я вообще не вижу.

    Re: Убрать авторизацию

    cmd, позволю себе поспорить.
    Во-первых, про

    Ограничить доступ для локальных IP-адресов


    я ничего не говорил, к чему Вы это упоминаете?:)
    Во-вторых, возможно Вы не до конца поняли мою идею, т.к. выдвигать идеи как

    разминку для мозгов

    я бы не стал. В этой идеи есть здравый смысл. Веб-сервер- IIS. Следоваетельно, удобно использовать ntlm-аутентификацию пользователей в домене, что мы и делаем. К слову, её использует огромное количество предприятий. Поэтому я и говорю, что идея хорошая для интранета, а если быть точнее, для связки IIS+htlm_аутентификация.
    Смысл след: когда пользователь начинает работу, он авторизуется под сетевым именем в домене (ntlm-аутентификация). Когда заходишь в админку Strawberry 1.1.1 требуется ввести логин и пароль. Так почему бы не внести в MySQL базу Strawberry 1.1.1 админа с username="сетевое имя в домене" и password="пароль в домене". А вместо админки проверять- админ это или нет? Сетевое имя можно получить через

    $login=$_SERVER['REMOTE_USER'];

    . Если админ, то сразу пускать в админку. Что это дает?- это пусть и не большая, но автоматизация процесса:). Если новости вбиваются ежедневно, то это избавляет админа от одного обязательного шага- ежедневно вбивать логин и пароль. Я не говорю, что сложно вбивать логин и пароль, или, что это глобальная цель. Но согласитесь, это удобно. Тем более, что безопасность при этом никак не страдает. NTLM-аутентификация однозначно определяет пользователя в домене.

    Я начинающий клубничник

    Re: Убрать авторизацию

    Если админ, то сразу пускать в админку. Что это дает?- это пусть и не большая, но автоматизация процесса:). Если новости вбиваются ежедневно, то это избавляет админа от одного обязательного шага- ежедневно вбивать логин и пароль.

    Нет. Эту "автоматизацию" придумали лет 15-20 назад и она уже реализована во всех браузерах. Называется cookies.
    Один раз нажал "запомнить пароль" и забыл про авторизацию. Клубничка с cookies работает отлично.

    Объясню на картинках.
    Очень давно велосипеды были такие:
    http://t3.gstatic.com/images?q=tbn:ANd9GcTadJKhrkUOX5cTsWjmr7QVlmVvcwsdDai4BgfdwJt4NlaYKrc&amp;t=1&amp;usg=__-WVSg0sF2DyH-Oc9wPYIo20r_Y8=

    Потом придумали педали и поставили их на переднем колесе:
    http://t3.gstatic.com/images?q=tbn:ANd9GcT5E3k9UVAzU1WhoTP3lI_Wr0QBIyBHpWIb3tZNp_LyGnkd9xw&amp;t=1&amp;usg=__cVM_8OJW3S5uIlf_f2VDXkp-m_U=

    Вы говорите: "Я придумал классную идею. Если сделать переднее колесо большим, то велосипед будет быстрее ездить":
    http://cheshuyka.ru/foto/raznoe/091020183316/Starinnyi-velosiped-s-bol1shim-perednim-kolesom.jpg

    А я вам говорю, что уже давно придумали цепь:
    http://t1.gstatic.com/images?q=tbn:ANd9GcQAcMUF2brD-CkImuJnwoLCySpWEheRiGJsqaDW6wOQIJV-5pk&amp;t=1&amp;usg=__9-CSYa1837P0Fx4PMDvy2Pvbq4Q=

    И не надо выдумывать ничего лишнего.

    Re: Убрать авторизацию

    cmd, 100 баллов!

    Re: Убрать авторизацию

    cmd, Порадовал в преддверии ремонта на кухне (я жутко злой щас) ))) +1!!!

    Здесь молодость бродит крылато, и старость не клонит голов...
    Демо площадка Strawberry 1.2 - заходим и тестируем!

    Re: Убрать авторизацию

    Прошло 11 дней, а я до сих пор не справился с этой задачей...
    Четко опишу ситуацию:
    1) есть внутренний сайт <b>www.sait_777.ru</b>

    2) когда заходишь на него ты должен авторизоваться (htlm_аутентификация): выходит окошко, вводишь сетевое имя и пароль. Сетевые имена и пароли хранятся в отдельной базе данных. Только определённым пользователям можно заходить на www.sait_777.ru, а остальным доступ запрещён.

    3) сетевое имя в php скрипте можно получить при помощи <b>$login=$_SERVER['REMOTE_USER']</b>. Моё сетевое имя, допустим, kkk\\OIvanov (Oleg Ivanov)

    4) тот, кто зашел на www.sait_777.ru попадает на главную страничку <b>default.asp</b>, в которую я вставляю фрейм со strawberry 1.1.1 и с которой я Вас так замучил...

    5) анонс новостей strawberry отображается через <b>iframe</b> на <b>default.asp</b>, а админка strawberry находится по адресу </b>http://www.sait_777.kz/news/admin/index.php</b>

    6) я ручками вношу в таблицу <b>cute_users</b> админа с сетевым именем kkk\\OIvanov.

    Понимаете в чём изюминка?! В базе сайта Олег Иванов числится как тот, кому открыт доступ на сайт www.sait_777.ru, а в <b>cute_users</b> он же (с тем же именем "kkk\\OIvanov") числится как админ.

    Теперь в месте (<u>возможно это 116 строка файла head.php</u>), где идет проверка введённого имени и пароля нужно эту проверку заменить на следующую: <b>есть ли kkk\\OIvanov в базе cute_users</b>. Запрос:

    SELECT * FROM cute_users WHERE UPPER(username) LIKE UPPER('".mysql_real_escape_string($_SERVER['REMOTE_USER'])

    Если есть, СРАЗУ пускать Олега Иванова в админку <b>http://www.sait_777.kz/news/admin/index.php</b> с правами админа, если нет, то писать, что доступ запрещён.

    Т.е. <u><b>итог:</b></u> когда админ strawberry заходит в админку http://www.sait_777.kz/news/admin/index.php он сразу попадает на главную страничку админки (окна авторизации вообще нет). Если не админ, то получает сообщ, что доступ запрещен.
    Т.е. Олег Иванов <b>один раз<.b> авторизуется при входе на сайт www.sait_777.ru, а strawberry проверяет его сетевое имя и сразу пускает в админку.

    Возможно до этого не точно описал проблему. нужно на программном уровне вообще убрать авторизацию и выполнять проверку, описанную выше.

    Я начинающий клубничник

    Re: Убрать авторизацию

    6) я ручками вношу в таблицу <b>cute_users</b> админа с сетевым именем kkk\\OIvanov.

    Вы даже тут велосипед придумали!Можно просто:
    Админка Клубнички ---> Раздел "Пользователи" --> Добавить Пользователя
    Зачем руками в БД вносить? ЗАЧЕМ?!

    Всё остальное: без комментариев.

    Re: Убрать авторизацию

    hmm cmd, жаль, что Вы за такими мелочами не улавливайте ту пользу, которую реально могут принести изменения, которые я предлагаю. Это ("ручками вношу") не принципиально важно в данном случае и было написано на скорую руку, т.к. мысли заняты более сложной и ПОЛЕЗНОЙ задачей, <b>как привязать ntlm-аутентификацию к клубничке</b>.
    Что такое ntlm-аутентификация cmd можете, например, почитать вот здесь http://www.lan2net.ru/l2n_config15.shtml , т.к. я понял, что Ваше "без комментариев" связано с незнанием элементарного Active directrory. Более чем уверен, что на Вашем предприятии ntlm- аутентификация не используется, отсюда и непонимание проблемы. Не упрекаю и не говорю, что ntlm у Вас должна использоваться, но знайте, что под виндовс она используется ОЧЕНЬ часто и те, кто админит интранет под виндовым сервером, на чем я заострял внимание в 4 посте, поддержат любые привязки веб-приложений к active directory.
    Почему: представьте что ПОМИМО клубнички установлено ещё 20 приложений, при входе в которые нужно логиниться. Не удобно?! А переменная $_SERVER['REMOTE_USER'] доступна всегда, так как приложения доступны после прохождения ntlm-аутентификации. Теперь может почувствовали о какой "автоматизации процесса" я говорил в 7 посте???! И Вы предлагаете взамен этого обойтись при помощи cookies??????????!!
    Это ещё раз говорит, что Вы недопоняли проблему, но и в этом я Вас не  вправе упрекать, чего и не делаю,  а пытаюсь преподнести ситуацию по-другому.
    Я не спорю, ситуация "экзотическая", специфичная и не совсем понятна, но для этого и создан раздел в форуме "Стандартные и не совсем решения" если я не ошибаюсь, и именно поэтому я раз за разом ТЕРПЕЛИВО пытаюсь сформулировать проблему, потому что знаю, что этот "велосипед" пригодится не только мне!!!

    И, cmd, давно хотел заметить hmm в посте выше Вы "учите" меня как добавлять пользователей через админку, в http://strawberry.goodgirl.ru/forum/topic/3896/ в 4 посте Вы "учили" меня как просматривать код html-страницы, рассказывали мне о скорости реакции спортсменов в http://strawberry.goodgirl.ru/forum/topic/3899/ в 7 посте и вообще всегда очень много пишите, эмоционально, отходя от обсуждаемой темы... Успел это заметить за 2 неполных месяца жизни на форуме. Я за юмор, но ещё больше за дельные и чёткие советы начинающим.

    А велосипед этот я соберу. Это вопрос времени. И выложив код, надеюсь сумею лично Вам, моему основному критику smile, объяснить то, что хотел.
    С уважением, УЧЕНИК

    Я начинающий клубничник

    Re: Убрать авторизацию

    login.mdu

    <form name="login" action="<?=$PHP_SELF; ?>" method="post" onsubmit="return process_form(this)">
     
     <? if ($_SERVER['REMOTE_USER'] == имя_юзера_в_винде) { $login='логин_юзера_в_клубничке'; $pass='пароль_юзера_в_клубничке';}  ?>
     
      <tr>
       <td width="80"><?=t('Логин'); ?>
       <td>
    
       <input tabindex="1" type="text" name="username" value="<?=$login?>" style="width:134">
      <tr>
       <td><?=t('Пароль'); ?>
       <td><input type="password" name="password" style="width:134" value="<?=$pass;?>">
      <tr>
       <td>
       <td><input accesskey="s" type="submit" style="width:134;" value="<?=t('Вход...'); ?>">
      <tr>
       <td>
       <td><a href="<?=$PHP_SELF; ?>?mod=login&action=forgot"><?=t('Забыли пароль?'); ?></a>
      <tr>
       <td align="center" colspan="3"><?=$result; ?></td>
      </tr>
     <input type="hidden" name="action" value="dologin">
     </form>

    Полям username и password можно добавить type="hidden".
    С точки зрения безопасности вариант не очень...
    К тому же куки надо выключать или ограничивать время сессии или продумать систему автоматического лог-аута.
    Удачи во всех начинаниях! smile

    1 минуту и 42 секунды спустя:

    Ну и, ясный-красный, такая конструкция непригодна, если у Вас много админов.

    9 минут и 13 секунд спустя:

    Если username тождественен $_SERVER['REMOTE_USER'] (как вы сами пишите), то можно так попробовать:

    <? if ($is_logged_in == "true") {
    if ($row['username'] != $_SERVER['REMOTE_USER']) { header: ("/path/index.php?mod=logout"); } 
    }
    ?>

    Засунуть где-то в конце head.php

    Отредактировано cmd (27 Aug 2010 16:37:55)