$wa->user("password")

$wa->user("password") отдает далеко не тот хэш, что лежит в таблице wa_contact.

При этом выдаваемое значение меняется. Есть подозрения, что в этой функции поверх md5 прикручена соль от времени или еще какой переменной. Как получить хэш пароля?  Если в публикуемом в магазине Webasyst приложении я напрямую обращусь к таблице не будет ли это перечить правилам?

ЗЫ: Попробую объяснить зачем это надо. В приложении есть api которое смотрит наружу через фронт. Что бы кому попало не отдавало, есть мысль пользоваться справочником приложения "контакты" сравнивая с ним входящие в api login и хэш пароля. 

2 ответа

  • 2
    Михаил Ушенин Webasyst 2 февраля 2021 09:16 #

    Если наследовать классы API приложения от системного класса waAPIMethod, то можно использовать его метод getRights() для проверки прав доступа. Это не поможет решить вашу задачу?

    • +1
      Алексей Фомин Алексей Фомин 2 февраля 2021 21:55 #

      Нет. Это немного другое. Тут невозможно сделать проверку пары логин и хэш. Еще раз попробую объяснить. Определенной странице фронта приходит методом post или get 3 переменных: login, hash и аналитический признак действия... назовем его условно  api_action. Экшены фронта проверяют наличие пары login/hash и если все ок, то формируются данные по запрошенному api_action и отдаются как результат запроса post. Если пары login/hash нет, то ничего из данных не отдается. Возможно где-то между проверкой пары login/hash и api_action стоит прикрутить getRights, но глядя в код функции

      public function getRights($name) 
      {
              return wa()->getUser()->getRights(wa()->getApp(), $name);     }

       полагаю, что это только для текущего авторизованного пользователя.  Видимо придется что-то свое писать для этой задачи. Или я заблуждаюсь? Если нет, то вторая часть вопроса остается актуальной. Можно ли (де-юре) прямым sql-запросом без плейсхолдеров в экшене фронта или бэка обращаться к таблице  wa_contact ?

  • 1
    Алексей Фомин 3 февраля 2021 15:21 #

    Немного заблуждался.

    Следующая конструкция позволяет считать права любого пользователя.

    $wa->Contact($id)->getRights('app', 'app_custom_directory_item_group.read')

    Однако вопрос о сравнении хэша пароля полученного постом в экшен с хэшом в базе, остается открытым.

    • +2
      Алексей Алексей Webasyst 3 февраля 2021 21:46 #

      Зависит от того где вы просите данные. В шаблоне будет фейковый хэш, в самом PHP всё корректно.

      $contact = new waContact(1);
      echo $contact->get('password');

      Даст хэш пароля, но не стоит верить что он будет всегда md5.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите