Я создаю веб-сайт, где я делаю ajax-запросы для загрузки динамического контента ПОСЛЕ того, как я загружаю статическую страницу контейнера.По сути, мне нужно передать массив целых чисел на страницу с сервера, и я использую jQuery для загрузки данных.Я пишу целые внутри тега с известным именем и использую eval для чтения данных из него.Вот пример тега (возвращается из ajax):
<span runat="server" class="hidden" id="PhotoList" />
с codebehind list.ForEach(p => { sb.Append(p.ID.ToString() + ","); } );
, где sb является StringBuilder, поэтому сервер в результате возвращает что-то вроде:
<span runat="server" class="hidden" id="PhotoList">1,4,5,42,9</span>
У меня есть переменная photoList
, объявленная в javascript, и я звоню var scriptToEval = "photoList = [" + $("#PhotoList").html() + "];";
eval(scriptToEval);
Я не мастер Javascript, и я просто хочучтобы быть уверенным, что это безопасно, так как есть много дискуссий о том, является ли eval
безопасным или нет.Я думаю, что это безопасно (я вставил весь код, который я использую с eval), но я, возможно, упустил момент, поэтому для меня важно мнение профессионала.Я знаю, почему они говорят, что eval опасен, поскольку он способен интерпретировать любой код, злонамеренный или нет, но здесь, я думаю, этот путь вообще не может быть скомпрометирован, так как ответ от сервера полностью находится под моим контролем.Другим вариантом было бы сделать ДРУГОЙ вызов ajax для переменных и загрузить их напрямую без ajax из возвращенного массива, но это суммировалось бы до двух вызовов (я все равно уже сделал вызов load, так как он действительно загружает некоторый HTML-контент с сервера), нотаким образом, хотя это немного странно (помещение переменных в скрытый тег HTML), это кажется удобным (в конце концов, ASP.NET также делает это и для viewstate!).
В любом случае, мой фокус на eval,это совершенно безопасно, или я должен иметь некоторые соображения безопасности?Эксперты по Javascript, пожалуйста.