Намедни пришла мне идея одного сервиса. Иногда возникает желание контролировать доступ к контенту который я выкладываю в сеть. Например я выкладываю нечто интересное на этот форум типа ссылки на архив или альбом фотографий. Я не хочу чтобы это было доступно кому-то вне этого форума, чтобы это не попало в чужие руки и не разошлось по интернету. Или я хочу чтобы ссылка была доступна только с определенной страницы (например чтобы я мог отслеживать посещаемость). Иными словами я хочу сервис, который возьмет на себя заботу об ограничении доступа к ресурсу.
Сказано, сделано. За пару дней я написал сервис http://lnkctrl.com, зайдя на который посетитель может сгенерировать себе ссылку которая будет валидна только для конкретной страницы/хоста.
Например ссылка http://www.lnkctrl.com/go/gH2AhSnCnVuHHmjKlwFgNEyk1OZqE4EL3BO8opZ0/P2I1/AQsJd/h3hOf0uvNeGWacxRjkDpjVBnaRHug1IWNg== откроет google.com только если вы нажали на неё со страницы этого поста. С любого другого сайта, она выкинет ошибку 404.
Или http://www.lnkctrl.com/go/k4l6Iw4lwfXf9oU0y+XuXxlUneYizuPS+w0KnAvBzmhr6EH5AG8XOn9ICrQAsFSRTDL/vyZttpOF9B98XnzObq54N9rsq4wg0N+ifnHVqLKwbN7qWYGPlnEY2/UUsjj+ откроет смешную картинку только отсюда.
Как оно работает
Само собой, Америку я не открыл, а всего лишь воспользовался существующими технологиями. Когда вы указываете пару ссылок, сервис соединяет их вместе и шифрует AES 256-битным ключом и переводит в base64. Соответственно, когда приходит запрос на сервис, он расшифровывает сообщение и проверяет реферер запроса. Если реферер совпадает с указаным URI, то браузеру возращается 304 с правильным адресом. Иначе возращается 404.
Ограничения
Самое явное, это, конечно, то что как только читатель страницы открыл ссылку, он увидит искомый адрес и может его распостранять как хочет. Чтобы этого избежать сервис должен работать как обратно-анонимным прокси, а это чревато расходом траффика. Я собираюсь такую фичу написать и предлагать её за деньги.
Кроме того, генерируемые ссылки получаются длинными, что неудобно. Как вариант можно воспользоваться любой сокращалкой ссылок широко доступных в сети. Например ту же картинку можно открыть по ссылке http://goo.gl/6vS6L. Я решил не создавать свою сокращалку, чтобы не напрягать БД по таким запросам. Сейчас БД вообще неиспользуется, все крутится на веб-сервере. Для платных аккаунтов же, такая фича будет предусмотрена.
На чем написано?
Проект написан на C#/ASP.NET MVC3 и хостится в облаке Microsoft Azure.
Что нужно?
Я прошу посетителей конфы протестировать существующий функционал и отписаться о багах. Это поможет мне лучше протестировать, а вам получить аккаунты в будущем.
[Хакер] :: Перенесено в «Наши проекты».