Несколько веб-сайтов и незаконные «межсайтовые» запросы
-
18-09-2019 - |
Вопрос
У меня есть два сайта IIS, указывающие на разные физические папки.Это должно иметь возможность дифференцировать web.config, а файлы и сборки, используемые для базы данных сайтов, установлены на один и тот же экземпляр для обоих сайтов в web.config, настраиваемые для запуска с разных частей, настольная ставка такая:
/sitecore/content/home/default
/sitecore/content/home/intranet
Все идет нормально.
Проблема в том, что я могу получить контент, не принадлежащий реальному сайту, введя его полный путь.Т.е.
http://www.default.com/sitecore/content/home/intranet.aspx
<-- этого нельзя допускать, поскольку www.default.com
настроен с /sitecore/content/home/default
как корень.
Есть ли какой-либо встроенный механизм, позволяющий запретить это, или мне нужно создать подкласс itemresolver, чтобы сделать «межсайтовые» запросы незаконными.
Решение
Это как-то связано с тем, как Sitecore разрешает элементы. Я нашел 3 разных URL-адреса для каждого элемента.Например, скажем, у меня есть следующая структура:
-sitecore
-content
-home
-page1
Я могу получить доступ к странице 1 либо через:
http://mysite/sitecore/content/home/page1.aspx
http://mysite/page1.aspx
http://mysite/home/page1.aspx
Однако знание этого не поможет решить вашу проблему.Лучшее решение, которое я могу предложить, — это использовать безопасность.Однако, если оба сайта нуждаются в анонимном доступе, вопрос в том, как вы это контролируете?
Я предполагаю, что, поскольку у вас есть два отдельных файла web.config, вам также придется разделить разделы конфигурации Sitecore.Итак, что мы можем сделать, так это создать процесс конвейера, который выполняется как часть конвейера начала HTTP-запроса (в файле web.config как /configuration/sitecore/pipelines/httpRequestBegin), создавая по одному процессу для каждого сайта и обновляя соответствующий файл web.config.Когда этот процесс вызывается, он может создать виртуального пользователя, который принадлежит к группе, которая ограничивает доступ к сайту, запрошенному пользователем.
Есть некоторый код здесь который показывает вам, как создать виртуального пользователя:
И здесь на трубопроводах:
Надеюсь это поможет :-)
Другие советы
Что ж, если элемент интрасети (и ниже) защищен системой безопасности Sitecore, это не должно быть проблемой и доступ к нему невозможен :)
Если вы не можете справиться с этим с помощью безопасности, я бы выбрал ItemResolver.
Ваше здоровье