Ошибка отказа в разрешении в корпоративной среде

Всякий раз, когда машина с IE9, которая находится в нашем корпоративном домене, переходит на веб-сайт (по ссылке), мы получаем диалоговое окно с сообщением об ошибке "Отказано в доступе" при обращении к любому из следующих свойств окна (styleMedia, clientInformation, screen, history, navigator, localStorage, performance, sessionStorage). Начальная страница загружается, но при наличии ссылки на ту же страницу возникает ошибка.

Первоначально это проявилось, когда была загружена библиотека JQuery. При первом обращении JQuery к window.navigator.userAgent возникнет ошибка отказа в доступе.

Все наши машины работают под управлением Windows 7 64 бит Enterprise SP1. Приведенный ниже код может быть запущен из IIS или непосредственно из файла.html.

Мы не можем воспроизвести эту проблему за пределами нашего корпоративного домена. Мы подозреваем некоторую политику в нашей корпоративной среде, но не смогли определить, какая политика вызывает эту проблему.

Мы можем смягчить проблему следующим образом:

  • Переключение в режим документов IE7 или IE8, а затем обратно в стандарты документов IE9, режим документа переведет браузер в состояние, в котором он будет работать с тех пор.
  • Обновление страницы устранит загрузку одной страницы, но проблема будет повторяться, если щелкнуть ссылку, и по ссылке будет загружена другая страница (может быть той, на которой вы сейчас находитесь).
  • Перейдите на сайт с компьютера за пределами нашего домена.

test.html

<html>
<head> 
    <title>Permission Denied</title>
</head>
<body>
    <a href="test.html">Click Here</a>
    <script type="text/javascript">
        alert(window.navigator);
    </script>
</body>
</html>

Чтобы увидеть все свойства, которые недоступны, мы можем открыть этот HTML-файл и щелкнуть ссылку на странице:

testWindow.html

<html>
<head> 
    <title>Permission Denied</title>
</head>
<body>
    <a href="testWindow.html">Click Here</a>
    <script type="text/javascript">
        var deniedProperties = '';
        for (var i in window) {
            var obj = window[i];
            if (obj == null) continue;

            try {
                obj._____x = 1; // Attempt to access the object and set a new value on that object.
            }
            catch (e) {
                if (e.number == -2146828218) { // Permission Denied error number.
                    deniedProperties += i + '\n';
                }
            }
        }

        alert('Permission Denied:\n' + deniedProperties);
    </script>
</body>
</html>



Обновить

Это была политика домена, которая была введена для решения проблемы с IE6. Мы выяснили, какая политика вызывала проблему, работая с сотрудником службы поддержки Microsoft, который записал и проанализировал, как политики использовались, когда я воспроизводил проблему на моей рабочей машине.

Еще одна идея, которую вы можете попробовать, - это настроить дочернюю организационную единицу в Active Directory, для которой у вас есть полные права на изменение. Пусть он унаследует все корпоративные политики, а затем использует бинарное исключение для блокировки политик, пока вы не найдете ту, которая вызывает проблему.

1 ответ

У нас была та же проблема, и мы обнаружили, что поиск в реестре по FEATURE_OBJECT_CACHING и установка iexplore.exe = 1 устранили ее.

Для нас это было на самом деле под:

HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Политики \Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_OBJECT_CACHING

Другие вопросы по тегам