Почему я получаю предупреждение системы безопасности «Этот файл содержит потенциально небезопасный динамический контент» в этой конструкции - PullRequest
4 голосов
/ 21 декабря 2011

Я наконец смог воспроизвести это сообщение, которое я получаю время от времени.

Это на V8.04, на Windows 7.

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

Первый экран с сообщением об ошибке:

enter image description here

Теперь я нажимаю «включить динамику», и все выглядит хорошо. Но каждый раз, когда я снова открываю блокнот, я снова получаю сообщение. (Необходимо закрыть M и снова запустить, а затем открыть записную книжку, чтобы увидеть сообщение).

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

Код для его генерации:

Manipulate[

  DynamicModule[{p},
   p["x"] = 0;
   Row[{Dynamic[
      Refresh[p["x"]++; Row[{"p[x]=", p["x"]}],
       TrackedSymbols -> {n}]]}]
   ],

  Button["update counter", n++],
  {{n,0}, None}
  ]

Вышеприведенное написано на собственной записной книжке, в записной книжке больше ничего нет.

Я закрываю M, затем запускаю его, затем открываю записную книжку, и я вижу вышеупомянутое сообщение.

Теперь я сначала подумал, что для удаления сообщения мне нужно изменить p ["x"] на p [x], поэтому я закрыл вышеуказанную записную книжку и создал новую записную книжку с таким кодом:

Manipulate[

  DynamicModule[{p},
   p = 0;
   Row[{Dynamic[Refresh[p++; Row[{"p=", p}], TrackedSymbols -> {n}]]}]
   ],

  Button["update counter", n++],
  {{n, 0}, None}
  ]

Затем закрыл M, снова запустил и открыл вышеупомянутую записную книжку, и теперь я не не увидел предупреждающее сообщение. Но когда я повторил процесс, я увидел, что возвращается та же ошибка.

(я отправил этот вопрос в группу по математике, но это медленно, и мой пост там даже не появился, но в этом посте я сказал, что ошибка исчезла, когда я изменил p ["x"] на p [x], потому что сначала это действительно было, но когда я позже попробовал, пришло сообщение, которое я не понимаю почему)

p ["x"] является индексированным объектом, как описано на этой странице:

http://reference.wolfram.com/mathematica/tutorial/MakingDefinitionsForIndexedObjects.html

Вопрос в том, что в приведенном выше коде заставляет это предупреждение появляться? Я что-то не так пишу в приведенном выше примере?

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

Вот ссылка на страницу безопасности ноутбука

http://reference.wolfram.com/mathematica/tutorial/NotebookSecurity.html

Я не вижу в вышесказанном ничего, связанного с тем, что я делаю. Все, что я могу сказать, это связано с использованием DynamicModule [] внутри Manipulate, который сам по себе является DynamicModule. Но я не понимаю этого достаточно хорошо, чтобы понять, почему это проблема.

Обновление 1

Я не вижу, как это имеет отношение к пути. Я могу устранить ошибку, просто закомментировав внутреннюю динамику следующим образом:

Manipulate[


 (*
   DynamicModule[{p},
   p["x"]=0;
   Row[{Dynamic[Refresh[p["x"]++;Row[{"p[x]=",p["x"]}],TrackedSymbols-> \
   {n}]]}]
   ],
 *)

 n,
 Button["update counter", n++],
 {{n, 0}, None}
 ]

Сохраните записную книжку, закройте M, запустите M, откройте записную книжку. Ошибка ушла.

Итак, это в коде.

Обновление 2

Пытаться воспроизвести то, что Йода сообщил в своем ответе, я не могу.

  1. сделать новый блокнот, типа Dynamic@DateString[]
  2. ENTER для оценки.
  3. SAVE
  4. закрыть M
  5. открыто М
  6. открыть блокнот
  7. без ошибок

enter image description here

Обновление 21 декабря 2001 г.

В Математической группе Джон Фульц был достаточно любезен, чтобы ответить на мой пост, я не думаю, что он будет возражать, если я опубликую его ответ здесь, чтобы другие могли его увидеть

> > So, why is using p["x"] causing the security warning message?

That is a bug, which has already been fixed in development sources.
John Fultz
User Interface Group
Wolfram Research, Inc.

Извините, что у меня нет ссылки для включения в его ответ, я не смог найти ссылку в Google сейчас. Я использую Thunderbird для чтения новостных групп.

Должен ли теперь этот вопрос оставаться открытым? Или это должно быть закрыто? Если мне нужно закрыть его, я могу принять один из ответов, чтобы он был закрыт.

Ответы [ 4 ]

3 голосов
/ 21 декабря 2011

Это скорее продолжение ответа Йоды плюс комментарии, чем отдельный отдельный ответ, но, как уже говорилось, если вы открываете записную книжку из ненадежного каталога и , у вас есть динамическое содержимое в ячейке вывода, которую выполучит предупреждение безопасности.Если вы оцените следующий код:

CurrentValue[$FrontEnd, {"NotebookSecurityOptions", "TrustedPath"}]

CurrentValue[$FrontEnd, {"NotebookSecurityOptions", "UntrustedPath"}]

NotebookDirectory[]

, вы сможете убедиться в том, что ваш ноутбук находится в надежном или ненадежном пути (независимо от внешнего вида или нет предупреждения о безопасности).

3 голосов
/ 21 декабря 2011

Предполагая, что вы используете настройки параметров по умолчанию (т. Е. "TrustByDefault" -> Автоматически), вы увидите одно из трех вариантов поведения.

  • Если записная книжка находится в каталоге, указанном в «TrustedPath», содержимое считается безопасным, и вы никогда не увидите предупреждение.

  • Если записная книжка находится в каталоге, указанном в «UntrustedPath», содержимое считается небезопасным, и вы всегда увидите предупреждение.

  • Если записная книжка находится в каталоге, который не указан ни в «TrustedPath», ни в «UntrustedPath», вы можете или не можете видеть предупреждение в зависимости от содержимого выражения DynamicBox, хранящегося в записной книжке. Mathematica проверит выражение, прежде чем пытаться его оценить. Если он содержит только выражения из короткого белого списка «безопасных» выражений, вы не увидите предупреждение. Если он содержит какие-либо выражения, которые не включены в белый список «безопасных» выражений, вы увидите предупреждение.

2 голосов
/ 08 марта 2012

У меня тоже была проблема с этим сообщением, появляющимся на ноутбуках, которое, как я думал, раньше не появлялось, но теперь я уверен, что это из-за динамического вывода в ноутбуке и того факта, что динамический вывод работает впередний конец.Поэтому, когда вы открываете записную книжку с видимым динамическим выводом, FE попытается запустить ее.Если вы удалите весь динамический вывод из записной книжки, сохраните его, закройте его (и даже закройте и снова откройте Mathematica, чтобы быть уверенным), а затем снова откройте записную книжку, сообщение не должно появиться, поскольку нет динамического вывода.

Я сделалкак предложил йода, я открыл инспектор опций и отредактировал TrustedPath в глобальных настройках.Я публикую этот «ответ» как продолжение ответа yoda, так как мне пришлось немного поиграть, чтобы понять, как именно добавить путь к TrustedPath.

Я добавил документы в качестве доверенного пути следующим образом (в Mac OS 10.6) (и я стараюсь не сохранять там ничего, чему я не доверяю):

  1. Нажмите намаленькая кнопка редактирования слева от столбца Значение для TrustedPath.
  2. Нажмите кнопку Добавить в открывшемся окне.
  3. Вам будет предложено

    FrontEnd`FileName [{$ RootDirectory}, "x"]

  4. Замените x на путь, которому вы хотите доверять, например:

    FrontEnd`FileName [{$ RootDirectory},"/ Пользователи / Джон / Документы /"]

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

2 голосов
/ 21 декабря 2011

Это не из-за конкретного примера кода, а скорее из-за функций безопасности Mathematica.От tutorial/NotebookSecurity,

Когда пользователь открывает записную книжку с динамическим содержимым, Mathematica сначала определяет, является ли каталог записной книжки доверенным, ненадежным или ни тем, ни другим.

  • Если каталог записной книжки является доверенным, записной книжке будет разрешено автоматически выполнять динамические оценки без предупреждения пользователя.
  • Если каталог записной книжки не имеет доверия, пользователь будет предупрежден о любой попытке со стороны пользователя.записная книжка для динамических вычислений.
    enter image description here

По умолчанию только $InstallationDirectory, $BaseDirectory и $UserBaseDirectory являются "доверенными".Кроме того, есть набор каталогов, которые всегда ненадежны (могут быть изменены).Это ваши загрузки
Решение теперь состоит в том, чтобы добавить текущий рабочий каталог в список надежных папок.

Перейдите на Preferences > Advanced > Open Options Inspector и в Global Preferences, начните поиск trusted, и выдолжны увидеть три варианта всплывающих.Вы можете добавить их здесь.

enter image description here

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