LINUX.ORG.RU

О клиент-серверных приложениях

 , , , ,


0

3

Привет всем. А как в случае клиент-серверного приложения наиболее грамотно понять что пользователь работает с ним локально (понятно что можно многими способами)? Желательно кроссплатформенно. Имеется ввиду тот случай когда и клиент и сервер работают на одной машине? В качестве клиента веб браузер (в нем страничка которую отдаёт серверное приложение). Когда юзер работает удалённо, то скажем, наша веб-страничка должна уметь всё через веб делать. Но когда юзер работает локально с гуем, то мы можем и внешний гуёвый софт запускать со стороны сервера, например. Да знаю что звучит странно, но потому и спрашиваю. Лекцию о том что в 99% случаев на сервере нет и не должно быть GUI можете мне не читать, тут скорее аналог mpd с веб-мордой или трансмиссии. Типо да, можно через веб всё что необходимо делать, но в случае когда приложение на десктопе крутится то можно ещё чуть-чуть. Например открыть в файловом менеджере папку с файлами, а не скачивать их через загрузки как в случае когда клиент и сервер на разных машинах. Вообще меня asp.net core интересует, но в целом, интересны любые варианты. Знаю про

HttpContext.Current.Request.IsLocal
но насколько оно надёжно? Технически оно проверяет что адрес с которого прилетел запрос соответствует этому условию
"127.0.0.1" || remoteAddress == "::1"
Понятно что 127.0.0.1 это лупбек на локалхост, но линуксоиды - знатные извращенцы, а потому в теории кто-то может выставить любой адрес в интервале от 127.0.0.1 до 127.255.255.254 что поломает всю логику или я не прав? Или может даже какой-то дистрибутив от сумасшедших так делает из коробки ради «безопасности»?

★★★★★

Понятно что 127.0.0.1 это лупбек на локалхост

127.0.0.2 тоже локальный... и 3 тоже :-)

но туда можно понавесить всяких rev-proxy,маскардов и перебросить на удалёнку так что HttpContext.Current.Request.IsLocal будет true но это не так.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Конечно буратино злобные сами будут страдать и кто-то может даже специально так захочет, к примеру если смартфоном проги на компе запускать с дивана и когда они отработают поднимать попу и идти к компу чтоб 2 раза не ходить/полежать пока оно работает, но чисто из спортивного интереса а как-то это можно сделать более надёжно?

peregrine ★★★★★
() автор топика
Ответ на: комментарий от urxvt

Да как обычно делают оно понятно. Куда веселее что в изкоробочных вариантах рассматривается только 1 лупбек на 127.0.0.1 а вот 127.0.0.2 это уже не локалхост с точки зрения того же дотнета.

peregrine ★★★★★
() автор топика

Никак это не понять. Клиент может гонять локальный прокси и не передавать x-forwarded-for x-real-ip.

внешний гуёвый софт запускать со стороны сервера, например

Добавь тупо настройку в веб-морду.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Настройка это вариант конечно, а автоматом её если юзер не менял ставить как HttpContext.Current.Request.IsLocal определяет. Но всё же интерес то чисто спортивный, не практический.

peregrine ★★★★★
() автор топика

покуда geo & location теги не будут восприниматься на уровне идентификации (вместе с ключами/паролями/логинами), все попытки - бестолку, будут только порождать дополнительные проблемы.

так что забей. «местный телевизор» который ты хочешь включить, он такое-же сетевое устройство и сам может находится за 100500км. «Локальные программы» в действительности могут быть облачными прикладами.

То есть делай: «для клиента вот с этим ключом можно включать/выключать телевизор, для прочих нет». Единственные правильные атрибуты - ключ, логин/пароль, сессия..всё остальное - это просто так склалось в ран-тайм.

MKuznetsov ★★★★★
()

Сгенерь на сервере токен, отдай клиенту, клиентом стукнись с этим токеном на 127.0.0.1, если токены совпали значит сервер живет на локалхосте. Ну с определёной вероятностью.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)

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

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

или я не прав?

Нет, ты не прав. Такое,как ты вообще не понимаешь темы. Развернёшь пару сервисов и такие темы, надеюсь, отпадут.

anonymous
()

«127.0.0.1» || remoteAddress == «::1»

Плохая идея. API сервера часто вешают на 127.0.0.1 и проксируют через nginx. Добавь хотя бы проверку X-Forwarded-For в этом случае.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)