Форум русской поддержки Joomla!® CMS
06.12.2016, 16:15:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

[Решено] Каждому элементу вида свой токен

 (Прочитано 285 раз)
0 Пользователей и 1 Гость смотрят эту тему.
platonische
Давно я тут
****

Репутация: +0/-0
Offline Offline

Сообщений: 297


Парусные экспедиции vk.com/tc670


« : 16.03.2016, 22:16:59 »

Думаю к виду "ЗАКАЗЫ" к каждому id прикрепить какую-нибудь индивидуальную переменную хэш-сумму или случайную генерацию для того чтоб никто просто так не мог обратиться к элементу из FrontEnd.

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

Подскажите направления для реализации. Есть ли чего в J! стандартного для подобных реализаций?
« Последнее редактирование: 17.03.2016, 00:30:22 от platonische » Записан
dmitry_stas
Профи
********

Репутация: +797/-4
Online Online

Сообщений: 7765



« Ответ #1 : 16.03.2016, 22:56:31 »

чем обычный md5 не подходит? не думаю что нужно что то сложнее в данном случае.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #2 : 16.03.2016, 23:05:49 »

<?php echo JHtml::_( 'form.token' ); ?> для формы
Проверка: if(!JFactory::getSession()->checkToken()) die('Пока хацкер');

Для простого гет запроса модно например так:
<a href="index.php?param1=1&params2=2&<?php echo JSession::getFormToken(). '=1'; ?>">Ссылка</a>
Проверка: if(!JFactory::getSession()->checkToken('get')) die('Пока хацкер');
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #3 : 16.03.2016, 23:11:28 »

Цитировать
<a href="index.php?param1=1&params2=2&<?php echo JSession::getFormToken(). '=1'; ?>">Ссылка</a>

Но это временная ссылка. После истечении сессии она окажется неработоспособной. Если нужна постоянная случайная строка:


http://stackoverflow.com/a/4356295


Там же есть ссылка на безопасный вариант.
« Последнее редактирование: 16.03.2016, 23:27:47 от zomby6888 » Записан
platonische
Давно я тут
****

Репутация: +0/-0
Offline Offline

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #4 : 17.03.2016, 00:29:45 »

Думаю то что надо! Цель: оградить от прямого захода типа ?id=2 и сделать ?id=2&key=kdspSaqew0(бла бла бла)
Чтобы ссылка лежала лично у человека на почтовике и он мое ею пользоваться без регистрации, а я мог определить что это именно он, конечно же "ОН". Чтоб не светились всем подряд заказы с именами и суммами.
Думаю тему можно закрыть.
Записан
dmitry_stas
Профи
********

Репутация: +797/-4
Online Online

Сообщений: 7765



« Ответ #5 : 17.03.2016, 09:50:29 »

как то это слишком сложно Azn в php есть http://php.net/manual/ru/function.uniqid.php. или как я уже сказал обычно в таких случаях используется что то типа
Код:
md5($order_id.time());
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #6 : 17.03.2016, 11:59:40 »


Думаю то что надо! Цель: оградить от прямого захода типа ?id=2 и сделать ?id=2&key=kdspSaqew0(бла бла бла)
Чтобы ссылка лежала лично у человека на почтовике и он мое ею пользоваться без регистрации, а я мог определить что это именно он, конечно же "ОН". Чтоб не светились всем подряд заказы с именами и суммами.
Думаю тему можно закрыть.
На сайте ничего из того что вам надо не описанно!
Вам в любом случае надо
1. для таблицы где у вас заказы добавлять поле где вы будете писать какой то ключ
2. когда пользователь делает что угодно по заказа, в поле с хешем пишете какой то хеш например md5(time().mt_rand());
3. У пользователя ссылка только ?key=hash
4. при входе в вид делаете выборку из таблицы по хешу! Если запись есть, выводите, если нет то ошибку выдаете!

Добавлять какой то ключ которого нет в базе нет смысла! Ибо
Записан
platonische
Давно я тут
****

Репутация: +0/-0
Offline Offline

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #7 : 17.03.2016, 12:18:33 »

На сайте ничего из того что вам надо не описанно!
Вам в любом случае надо
1. для таблицы где у вас заказы добавлять поле где вы будете писать какой то ключ
2. когда пользователь делает что угодно по заказа, в поле с хешем пишете какой то хеш например md5(time().mt_rand());
3. У пользователя ссылка только ?key=hash
4. при входе в вид делаете выборку из таблицы по хешу! Если запись есть, выводите, если нет то ошибку выдаете!

Добавлять какой то ключ которого нет в базе нет смысла! Ибо


Я это понимаю, спасибо. Конечно же ключ должен лежать в базе а не генериться налету и сверяться. Единственно отдельно поблагодарю за совет убрать id из get запроса - это думаю будет лучше.
Записан
dmitry_stas
Профи
********

Репутация: +797/-4
Online Online

Сообщений: 7765



« Ответ #8 : 17.03.2016, 12:29:40 »

убрать id из get запроса - это думаю будет лучше
а почему? ведь order_id=...&order_hash=... надежнее, чем просто order_hash=...
Записан
platonische
Давно я тут
****

Репутация: +0/-0
Offline Offline

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #9 : 17.03.2016, 12:40:26 »

а почему? ведь order_id=...&order_hash=... надежнее, чем просто order_hash=...
Задумался сейчас об этом - ведь надо будет для админке и фронтэнда разные обработки по таблице делать если удрать id - думаю оставлю
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #10 : 17.03.2016, 17:54:34 »

как то это слишком сложно Azn в php есть http://php.net/manual/ru/function.uniqid.php. или как я уже сказал обычно в таких случаях используется что то типа
Код:
md5($order_id.time());

Такой хэш легко подобрать. Достаточно знать ид заказа и время когда он был совершен. Можно и не знать, просто методом перебора. Кстатии, Joomla когда генерит свой токен для формы использует похожий алгоритм, что там описан так что можно и методом getFormToken() воспользоватся  
« Последнее редактирование: 17.03.2016, 17:58:30 от zomby6888 » Записан
dmitry_stas
Профи
********

Репутация: +797/-4
Online Online

Сообщений: 7765



« Ответ #11 : 17.03.2016, 18:50:17 »

хорошо, пусть будет md5($order_id.uniqid('', true)) Azn
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #12 : 17.03.2016, 19:18:47 »

Ну надо же выбирать оптимальный вариант, а на странице с описанием функции uniqid красным выделено:
Цитировать
Внимание
Эта функция не создает ни случайную ни трудно подбираемую строку. Нельзя использовать эту функцию в целях повышения безопасности. Используйте криптографически безопасные функции/генераторы случайных данных, и криптографически защищенные хэш-функции для создания непредсказуемых безопасных ID.


Если просто случаный ид нужен то можно юзать вполне, для создания безопасного хеша это не вариант...
Записан
dmitry_stas
Профи
********

Репутация: +797/-4
Online Online

Сообщений: 7765



« Ответ #13 : 17.03.2016, 20:35:18 »

для создания безопасного хеша это не вариант...
надпись эту я знаю Azn можете показать метод кроме прямого перебора, как вы подберете такой хеш? Azn
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #14 : 17.03.2016, 21:38:34 »

Ландо, в конце концов это ваше дело или ваших заказчиков как вы будете хэш генерить. Я лишь предложил более менее безопасный вариант. Я не вижу смысла доказывать то о чем сами разработчики PHP пишут.
Записан
fsv
Практически профи
*******

Репутация: +330/-2
Online Online

Пол: Мужской
Сообщений: 2239


« Ответ #15 : 18.03.2016, 02:44:48 »

В Virtuemart3 номер заказа, приходящий на почту:
/index.php?option=com_virtuemart&view=orders&layout=details&order_number=1SEX08&order_pass=p_ddB3PYiJ
В таблице заказов - поле order_pass .
Создание order_pass : \administrator\components\com_virtuemart\models\orders.php  static public function genStdOrderPass(). Плюс там подключение \administrator\components\com_virtuemart\helpers\vmcrypt.php  (virtuemart encrypt class, with some additional behaviours).
Если интересно, скачайте дистрибутив, посмотрите. Похоже на вышеуказанную ссылку на stackoverflow , только усложнили.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet