+  HandyCache форум
|-+  Главная категория» Новые предложения» Персонализация файлов при хранении в кэше
Имя пользователя:
Пароль:
Страниц: [1]   Вниз
  Отправить эту тему    Печать  
Автор Тема: Персонализация файлов при хранении в кэше  (Прочитано 16834 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mai62
Автор HC
*****

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

Сообщений: 6383


« : 01 августа 2008, 12:24:57 »

Предлагаю для решения этой проблемы сделать следующее.
1. Если в заголовке ответа есть одно из:
Pragma: no-cache
Cache-control: no-store
Cache-control: private
и включена опция Игнорировать No-cache, при формировании пути файла в кэше добавлять имя пользователя и получится что-то такое:
c:\handycache\cache\vasja_pupkin\mail.ru\...
Если опция Игнорировать No-cache выключена, такие файлы не писать вообще.
2. Дать возможность в списке Преобразование URL в колонке Замена использовать переменную #user#. Писать, например, так  #user#\1. При этом #user# будет заменяться на vasja_pupkin\
3. При поиске файла в кэше искать файлы сначала в персональной папке, а при неуспехе в общей. Это, конечно, увеличит нагрузку на диск, но не катастрофически. Чего не сделаешь ради соблюдения приватности.



 Отлично! В HC версии 1.0 RC2 (1.0.0.175) от 27.05.2009 г. в списке "Преобразование URL" в колонке Замена можно использовать подстановку #user#. При выполнении преобразования вместо #user# будет подставлена стока 'user_name/', где user_name - имя пользователя, чей запрос обрабатывается.
« Последнее редактирование: 17 октября 2009, 12:59:46 от DenZzz » Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #1 : 03 августа 2008, 11:04:03 »

Имхо, п.1 не очень - общий кэш лишится доброго куска, который будет распределен по частным кэшам. Контроля за тем, действительно ли это приват или нет, не получится. Может, эту возможность добавить скриптам?

Если файл подпадает под "приват" (т.е. в списке П сработало правило с #user#), то в общем кэше его искать и не получится. Т.е. п.3, получается, не нужен.

PS Предложенный luongo вариант галки "приват" в списке Запись в кэш, имхо, хороший. Правда, требует изменения формата списка. Можно принять его во внимание, когда будут меняться форматы.
Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #2 : 03 августа 2008, 11:29:12 »

Цитировать
Имхо, п.1 не очень - общий кэш лишится доброго куска, который будет распределен по частным кэшам. Контроля за тем, действительно ли это приват или нет, не получится. Может, эту возможность добавить скриптам?
В п.1 я собрал все способы, которыми, по моему мнению, сервер может пометить приватную информацию, дабы предотвратить ее всеобщую доступность. Стандартным поведением прокси должно быть обеспечение этой приватности. Все отклонения от стандартного поведения могут быть обеспечены скриптами, правилами и чем угодно еще.
Цитировать
Если файл подпадает под "приват" (т.е. в списке П сработало правило с #user#), то в общем кэше его искать и не получится. Т.е. п.3, получается, не нужен.
Откуда же НС узнает, что нужный ему файл подпадает под "приват"? Ему придется искать в обоих частях кэша пока не найдет.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #3 : 03 августа 2008, 12:19:11 »

no-cache и no-store не имеют отношения к привату. Чаще всего они обозначают динамические данные, которые, по мнению веб-мастера, не надо кэшировать. И только во вторую очередь (не по стандарту) могут обозначать приват. Копии неприватных файлов получатся разложенными по папкам пользователей, снижая общую экономию и тратя диск.
По умолчанию приват означает private.
Цитировать
Откуда же НС узнает, что нужный ему файл подпадает под "приват"?
- если сработает правило с #user#;
- если сработает скрипт, возвращающий, что это приват. И сделать один дефолтный скрипт, возвращающий такое значение при наличи в ответе private.
« Последнее редактирование: 03 августа 2008, 12:30:29 от Михаил » Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #4 : 03 августа 2008, 12:51:46 »

Личных наблюдений по использованию no-cache и no-store у меня нет. У меня есть в chm книжечка
HTTP Developer's Handbook
By Chris Shiflett
   
Publisher : Sams Publishing
Pub Date : March 21, 2003
ISBN : 0-672-32454-7
Pages : 312
Вот в ней про поле Cache-control написано
Цитировать
private
The private directive allows caching, but not on shared caches. Thus, this is more appropriate when somewhat sensitive information can potentially be included in a response, but you still want to take advantage of caching. An example of a private cache is that of a Web browser. This is obviously less exposed than a regional cache, where numerous Web clients may be communicating directly or indirectly with it.

no-cache
The no-cache directive does not prevent a caching system from keeping a cached copy. It simply requires that the caching system revalidate its cache prior to sending it back to the client.

no-store
The no-store directive specifies that no information pertaining to this transaction should be kept in the cache. This directive is especially helpful for sensitive transactions such as those that contain personal information, credit card numbers, authentication credentials (logging in on an HTML form), and so on.
И про Pragma: no-cache
Цитировать
Pragma: no-cache
Although other forms are allowed by the specification (in order to remain flexible to future implementations), the use of the Cache-Control general header has curtailed the use of any other forms of the Pragma header.

When used in the way just illustrated, all intermediate proxies are to forward the HTTP request to the origin server rather than replying to the Web client with a cached copy.

According to the HTTP specification, this header is intended to be used in HTTP requests as a way for the Web client to indicate that it wants the request forwarded all the way to the origin server. In practice, however, it is also used by Web servers to indicate that the HTTP response should not be saved in a caching system, and support for this behavior is fairly consistent.

Добавлено: 03 Августа 2008, 12:40:08

Цитировать
- если сработает правило с #user#;
- если сработает скрипт, возвращающий, что это приват. И сделать один дефолтный скрипт, возвращающий такое значение при наличи в ответе private.
На мой взгляд поведение прокси дожно быть безопасным по умолчанию, без использования специальных правил или скриптов.
Добавлено: 03 Августа 2008, 12:50:41

Цитировать
no-cache и no-store не имеют отношения к привату. Чаще всего они обозначают динамические данные, которые, по мнению веб-мастера, не надо кэшировать. И только во вторую очередь (не по стандарту) могут обозначать приват.
Так ведь могут же, значит это должно быть учтено стандартным поведением.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

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

Сообщений: 5513



« Ответ #5 : 03 августа 2008, 16:54:00 »

Цитировать
Личных наблюдений по использованию no-cache и no-store у меня нет.
У меня есть. Большинство таких ответов отношения к привату не имеют.
Цитировать
Так ведь могут же, значит это должно быть учтено стандартным поведением.
В назначении этих кэш-контролов обеспечивать приват - не единственная функция. Почему прокси должен по умолчанию приписывать им именно это назначение? Это учтет пользователь соответствующим правилом.

Результатом твоего подхода станет то, что в случае нескольких пользователей в кэше будет находиться куча (и она будет огромная) копий файлов, не имеющих отношения к привату.
Этого допускать, имхо, нельзя.

А вообще, очередной раз натыкаемся на проблему отсутствия хранилища метаданных.
« Последнее редактирование: 03 августа 2008, 17:03:52 от Михаил » Сообщить модератору   Записан
DenZzz
Модератор
*****

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

Сообщений: 5589



« Ответ #6 : 03 августа 2008, 20:34:35 »

Предлагаю для решения этой проблемы сделать следующее.
1. Если в заголовке ответа есть одно из:
Pragma: no-cache
Cache-control: no-store
Cache-control: private

Автоматически отличить "приват" от "паблика" так не получится. На каждом сайте у него могут быть свои отличительные признаки, т.к. слово "private" сервера вставляют в заголовки далеко не всегда. На многих сайтах "приват" можно отличить только по URL. Так, например, на ру-борде любые страницы (даже для "Гостей") сервер отдает с заголовками:
Цитировать
Pragma: no-cache
Cache-control: no-cache, must-revalidate, no-store
И, следовательно, если смотреть на "no-cache", то каждый пользователь будет качать страницы форума заново, хотя мог бы спокойно взять их из общего кэша.

ИМХО, пользователь (админ) должен иметь возможность тонко настроить, что по его мнению является приватом, а что можно выложить в общий доступ.

Цитировать
2. Дать возможность в списке Преобразование URL в колонке Замена использовать переменную #user#. Писать, например, так  #user#\1. При этом #user# будет заменяться на vasja_pupkin\

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

Цитировать
3. При поиске файла в кэше искать файлы сначала в персональной папке, а при неуспехе в общей. Это, конечно, увеличит нагрузку на диск, но не катастрофически.

Искать в двух папках не придется, если опираться только на правила в "Преобразовании URL".
« Последнее редактирование: 03 августа 2008, 21:04:27 от DenZzz » Сообщить модератору   Записан
kos32
Новичок
*

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

Сообщений: 6


« Ответ #7 : 14 августа 2008, 22:08:04 »

Я рад что эта тема поднята Улыбка  Отлично!
Я согласен с большинством что один no-cache не достаточен.
Я полагаю что отлично было бы иметь список регулярных выражений "Персональные данные" на ряду с Черными, Белыми и другими списками. По-хорошему тут одним фильтром на URL не обойтись.
Хотелось бы еще фильтровать по заголовкам.
Думаю нужно добавить правило на заголовок Set-Cookie.

Для того чтобы реализовать общий кеш (см. http://handycache.ru/component/option,com_smf/Itemid,10/topic,1584.new/topicseen,1/#new) было бы хорошо если бы для каждого набора каталогов кеша была галочка [ ] Разрешить запись персональных данных.
Тогда  для общих кешей ее можно было бы снимать.

Искать в двух папках не придется, если опираться только на правила в "Преобразовании URL".
Придется. Преобразование вида #user#\1 имеет смысл только для приватных данных. А решение о том персональные данные запрошены или нет можно принять только получив ответ от сервера и проанализировав заголовки, одного URL не достаточно.
« Последнее редактирование: 14 августа 2008, 22:14:35 от kos32 » Сообщить модератору   Записан
DenZzz
Модератор
*****

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

Сообщений: 5589



« Ответ #8 : 14 августа 2008, 22:30:05 »

Думаю нужно добавить правило на заголовок Set-Cookie.

Set-Cookie есть на многих сайтах, даже где вообще нет авторизации! Куки часто используются просто для сбора статистики, сохранения настроек сайтов и т.п.

В общем, это плохой критерий приватности данных!

P.S. Если желаешь вообще не кэшировать страницы, где есть заголовок Set-Cookie, то это уже сейчас можно сделать скриптом Lua.
Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #9 : 28 сентября 2008, 02:08:39 »

Пора нам уже договориться о том, как должна работать эта функция и я уже готов приступить к ее реализации.
Перечитал сейчас сообщения в этой ветке и остался при своем мнении. На мой взгляд прежде всего мы должны позаботиться о максимально возможной безопасности приватных данных даже ценой снижения эффективности кэширования. Такое поведение должно быть стандартным без использования специальных правил или скриптов. Никто ведь не знает заранее куда может занести нелёгкая какого-нибудь пользователя и не приготовит на каждый случай URL-фильтр или что-то подобное. Когда мы общими усилиями выявим меры, необходимые для соблюдения безопасности, я готов обсуждать с вами набор функций для того, чтобы пользователь (админ) имел возможность тонко настроить НС для снижения издержек соблюдения приватности.
Сообщить модератору   Записан
DenZzz
Модератор
*****

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

Сообщений: 5589



« Ответ #10 : 28 сентября 2008, 13:00:10 »

На мой взгляд прежде всего мы должны позаботиться о максимально возможной безопасности приватных данных даже ценой снижения эффективности кэширования.

Проблема в том, что четкого критерия приватности кроме неполуярного "Cache-control: private" не существует. А отнесение к привату всех данных с заголовками "Pragma: no-cache" и "Cache-control: no-cache, no-store" похерит большую часть общего публичного кэша, что скажется не только на экономии трафика, но и нагрузке на диск, которая в данный момент является узким местом программы и без того близка к критической!

Цитировать
Такое поведение должно быть стандартным без использования специальных правил или скриптов.

Главное, чтобы его можно было легко отключить и вернуть старый порядок организации кэша. Те, кого экономия трафика и производительность HC волнуют больше вопросов приватности, сделают это в первую очередь. Тем более, что безопасность приватных данных в большинстве случаев достижима меньшей кровью, а именно уже существующими на данный момент в HC средствами - запретом кэширования...
Сообщить модератору   Записан
mai62
Автор HC
*****

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

Сообщений: 6383


« Ответ #11 : 29 сентября 2008, 12:30:32 »

DenZzz
Цитировать
отнесение к привату всех данных с заголовками "Pragma: no-cache" и "Cache-control: no-cache, no-store" похерит большую часть общего публичного кэша
Похерит. Но ради безопасности с этим приходится мириться.
Цитировать
Главное, чтобы его можно было легко отключить и вернуть старый порядок организации кэша.
Согласен, выбор нужно предоставить.
Теперь я возвращаюсь к своим предложениям в первом сообщении этой темы. Пункт первый обеспечит максимальный (может кому-то понравится больше параноидальный) уровень безопасности. Второй пункт позволит более гибко подойти к вопросу безопасности, но оставляет возможность попадания некоторой части приватных данных в общедоступный кэш. Админ будет иметь возможность использовать тот или другой способ или оба сразу. Теперь давайте подумаем как было бы удобно организовать управление этим хозяйством.
Сообщить модератору   Записан
Страниц: [1]   Вверх
  Отправить эту тему    Печать  

 
Перейти в: