<script> элементов - проблема безопасности в представлениях? Есть ли другой способ передачи значений из модели в JS? - PullRequest
1 голос
/ 09 мая 2019

В моем приложении мне нужно локализовать некоторые сообщения JavaScript. Поэтому я использую рендерацию, чтобы получить соответствующие строки из файла ресурсов путем отражения и сериализации через json. Смотрите код внизу

Код работает нормально, и javascript-объект json корректно обновляется при изменении локализации.

Но потом я прочитал эту статью

https://blog.uploadcare.com/vulnerability-in-html-design-the-script-tag-33d24642359e

Мне также нужно включить скрипт Google Analytics, а другие представления должны включать другие элементы <script> для конфигурации js. Каждый объект в этих элементах замораживается, а примитивы объявляются константами, остальная часть js находится в отдельных файлах.

Я просто параноик или это действительно серьезная проблема безопасности? Есть ли способ загрузить данные и значения модели в javascript без элементов <script>?

вызов в режиме макета

     @{Html.RenderAction("GetJsMessages", "Localization");}

код в контроллере (ClientMessages - это класс .resx)

        [OutputCache(VaryByCustom = "culture", Duration = 7200)]
        public ActionResult GetJsMessages()
        {
            string clientJsLocalizationJson
                = JsonConvert.SerializeObject(
                 typeof(ClientMessages)
                        .GetProperties()
                        .Where(p => !p.Name.IsLikeAny("ResourceManager", "Culture")) // Skip the properties you don't need on the client side.
                        .ToDictionary(p => p.Name, p => p.GetValue(null) as string););

            return PartialView("_jsLocalizationPartial", clientJsLocalizationJson);
        }

_jsLocalizationPartial view code

     @model string

     <script>
        var jsResources = Object.freeze(@Html.Raw(Model));
     </script>

1 Ответ

1 голос
/ 09 мая 2019

Глядя на ваши коды, я думаю, что вы в порядке.При условии, что вы не визуализируете какой-либо пользовательский ввод на странице или если вы в кодировке html.

Вы можете получить данные по вызову Ajax или загрузить их в скрытое поле и прочитать с помощью javascript.Но это не обязательно. Элемент

<script> можно использовать, если у вас есть другие меры безопасности.Google о том, как обезопасить JavaScript на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...