YuriBtr 58 Опубликовано: 6 марта 2019 Рассказать Опубликовано: 6 марта 2019 (изменено) Здравствуйте, не могу понять, каким образом Гостям удается отсылать сообщения на почту зарегистрированным посетителям сайта. В настройках всех групп отключены "персональные сообщения", но включено "использование обратной связи". Однако контактная форма по адресу /index.php?do=feedback не содержит возможности выбора имени пользователя. Там жестко заданный список "Администрация", "Редакция", "Рекламный отдел". Встает вопрос - каким образом гостю удается поменять адресата? Вариант с подменой ID в форме обратной связи не рассматриваю, так как он технически сложный, а люди, которые пишут сообщения вряд ли знакомы с HTML. Вариант запрета "использование обратной связи" не подходит, так как минимум две учетные записи ("Редакция", "Рекламный отдел") не являются администраторами. Соответственно им нельзя будет направить сообщение. Изменено 6 марта 2019 пользователем YuriBtr Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 6 марта 2019 Рассказать Опубликовано: 6 марта 2019 15 минут назад, YuriBtr сказал: Встает вопрос - каким образом гостю удается поменять адресата? да ни чего они не меняют, это у dle стандартная функция, зайди по адресу /?do=feedback&user=10 1 Цитата Ссылка на сообщение Поделиться на других сайтах
YuriBtr 58 Опубликовано: 6 марта 2019 Рассказать Опубликовано: 6 марта 2019 Автор 29 минут назад, odys сказал: да ни чего они не меняют, это у dle стандартная функция, зайди по адресу /?do=feedback&user=10 Блин, вот не знал. Сейчас буду думать как это запретить. Цитата Ссылка на сообщение Поделиться на других сайтах
Nektov 59 Опубликовано: 6 марта 2019 Рассказать Опубликовано: 6 марта 2019 8 часов назад, YuriBtr сказал: Сейчас буду думать как это запретить. Выйдите с учетной записи на сайте и попробуйте фокус от odys-a + настройте права группам Цитата Ссылка на сообщение Поделиться на других сайтах
YuriBtr 58 Опубликовано: 7 марта 2019 Рассказать Опубликовано: 7 марта 2019 Автор 10 часов назад, Nektov сказал: Выйдите с учетной записи на сайте и попробуйте фокус от odys-a + настройте права группам Нет такой настройки. Я могу либо запретить отправлять сообщения в обратную связь всем, кроме Администраторов (что меня не устраивает - Редактор и Рекламный отдел не должны быть администраторами), либо разрешить отправлять всем (как сейчас). По факту нужен белый список получателей. Придется делать плагин. Цитата Ссылка на сообщение Поделиться на других сайтах
radrigo 182 Опубликовано: 7 марта 2019 Рассказать Опубликовано: 7 марта 2019 (изменено) 7 часов назад, YuriBtr сказал: Нет такой настройки. Я могу либо запретить отправлять сообщения в обратную связь всем, кроме Администраторов (что меня не устраивает - Редактор и Рекламный отдел не должны быть администраторами), либо разрешить отправлять всем (как сейчас). По факту нужен белый список получателей. Придется делать плагин. Или можете убрать из feedback.tpl тег {recipient} и самому вместо него прописать код, где сами пропишете, кому можно отсылать письма. value это id пользователя. <select name="recip"> <option selected="selected" value="1">Директор</option> <option value="2">Бухгалтер</option> </select> Если хотите, чтобы письма могли отсылать только одному пользователю, то вообще можете убрать выпадающее меню с пользователями. Добавьте вместо {recipient} что-то вроде <input type="hidden" name="recip" value="1" /> Изменено 7 марта 2019 пользователем radrigo Цитата Ссылка на сообщение Поделиться на других сайтах
alex32 942 Опубликовано: 7 марта 2019 Рассказать Опубликовано: 7 марта 2019 (изменено) В 06.03.2019 в 19:35, odys сказал: /?do=feedback&user=10 5 минут назад, radrigo сказал: input type="hidden" name="recip" value="1" /> это разные вещи. И вставка input type="hidden" name="recip" не запретит отправить почту через do=feedback&user=10 Изменено 7 марта 2019 пользователем alex32 1 Цитата Ссылка на сообщение Поделиться на других сайтах
radrigo 182 Опубликовано: 7 марта 2019 Рассказать Опубликовано: 7 марта 2019 6 минут назад, alex32 сказал: это разные вещи. И вставка input type="hidden" name="recip" не запретит отправить почту через do=feedback&user=10 Ну а если добавить ещё такой редирект? 1 Цитата Ссылка на сообщение Поделиться на других сайтах
YuriBtr 58 Опубликовано: 7 марта 2019 Рассказать Опубликовано: 7 марта 2019 (изменено) Автор 1 час назад, radrigo сказал: Или можете убрать из feedback.tpl тег {recipient} и самому вместо него прописать код, где сами пропишете, кому можно отсылать письма. value это id пользователя. Именно так и сделано, но как правильно заметил alex32, это не влияет на отправку через do=feedback&user=10 1 час назад, radrigo сказал: Ну а если добавить ещё такой редирект? За идею с редиректом - спасибо, понадобились следующие правила: исходный адрес: /?*user=*&do=feedback* адрес для редиректа: /?do=feedback исходный адрес: /?*do=feedback*&user=* адрес для редиректа: /?do=feedback исходный адрес: /index.php?*user=*&do=feedback* адрес для редиректа: /index.php?do=feedback исходный адрес: /index.php?*do=feedback*&user=* адрес для редиректа: /index.php?do=feedback Но этот способ не защитит от прямой подмены ID в HTML коде, при отправке запроса. Выходит что единственная надежная защита - это создание белого списка. Изменено 7 марта 2019 пользователем YuriBtr Цитата Ссылка на сообщение Поделиться на других сайтах
Captain 625 Опубликовано: 7 марта 2019 Рассказать Опубликовано: 7 марта 2019 (изменено) А тупо им (нужным) отдельную группу создать ни как, с своими правами? Изменено 7 марта 2019 пользователем Captain Цитата Ссылка на сообщение Поделиться на других сайтах
Gameer 311 Опубликовано: 8 марта 2019 Рассказать Опубликовано: 8 марта 2019 <?xml version="1.0" encoding="utf-8"?> <dleplugin> <name>Список получателей</name> <description></description> <icon></icon> <version></version> <dleversion></dleversion> <versioncompare>less</versioncompare> <upgradeurl></upgradeurl> <filedelete>0</filedelete> <needplugin></needplugin> <mysqlinstall><![CDATA[]]></mysqlinstall> <mysqlupgrade><![CDATA[]]></mysqlupgrade> <mysqlenable><![CDATA[]]></mysqlenable> <mysqldisable><![CDATA[]]></mysqldisable> <mysqldelete><![CDATA[]]></mysqldelete> <phpinstall><![CDATA[]]></phpinstall> <phpupgrade><![CDATA[]]></phpupgrade> <phpenable><![CDATA[]]></phpenable> <phpdisable><![CDATA[]]></phpdisable> <phpdelete><![CDATA[]]></phpdelete> <file name="engine/modules/feedback.php"> <operation action="after"> <searchcode><![CDATA[$recip = intval( $_POST['recip'] );]]></searchcode> <replacecode><![CDATA[$whiteList = [1,2,3,4,5,6,7,8]; if (!in_array($recip, $whiteList)) { $stop = 'Ошибка отправки E-mail сообщения'; }]]></replacecode> </operation> </file> </dleplugin> 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.