MATHEMATICA 教程

笔记本安全

Mathematica 给用户提供了访问计算机文件系统(文件),进程间通信(MathLink Mathematica 函数),作为代码计算数据(表达式和字符串间的转换),以及运行任意外部程序的能力(调用外部程序). 虽然这些功能使 Mathematica 用户能够穿件功能强大的程序来执行真正有用的任务,它们也带来了被滥用的可能.    

Mathematica 笔记本前端提供了计算代码的三种机制: Shift+Enter 计算、初始单元和动态内容.

请注意本教程含有正在运行的控制器,所以如果用户改变任何内容,它将立即更改本系统上的设置.

Shift+Enter 计算

由于 Shift+Enter 计算需要用户的交互来启动它们,Mathematica 没有对使用这一机制潜在的恶意代码进行保障. 用户应确保它们不从不可信来源执行 Shift+Enter 计算. 在编写自己的代码时,用户必须格外谨慎,以确保代码不会产生意想不到的后果. 例如,当用户计算一个程序以从他或她的计算机上删除文件的时候,Mathematica 不会提供一个警告.

初始单元

当用户首先计算笔记本中的任何输入时,初始单元给用户提供了计算给定该笔记本所需的启动代码. 由于该代码会自动计算,可能用户甚至没有看到该初始代码,Mathematica 会显示一个警告提示,询问用户确认他或者他的意图以运行代码. 除非代码已被确认为安全的,否则,用户不应该在一个笔记本中计算一个从不受信任的来源取得的初始代码.

1.gif

  • 点击 按钮将首先计算笔记本中的所有初始单元,接着计算选中的单元.
  • 点击 按钮将不计算任何初始单元,但是仍然将计算选中的单元. 注意,这可能引起计算中的错误,因为它们可能依赖于还没有被计算的启动代码.
  • 点击 取消 按钮将不会引起初始单元或者选中单元的计算.

动态内容

Mathematica 具有惊人的 动态交互. 包含交互 Dynamic 内容的笔记本可以自动计算代码,而不需要用户的任何其它操作,除了需要打开笔记本文件之外. 很多时候,这正是用户所希望的,而其它时候,用户应该在这种自动计算发生之前,被警告.

当用户打开一个包含动态内容的笔记本时,Mathematica 将首先判断该笔记本的目录是受信任的、不受信任的、或者两者都不是.

  • 如果该笔记本的目录是受信任的,那么该笔记本将被允许自动执行动态计算,而不警告用户.
    • 如果该笔记本的目录是不受信任的,那么用户将在笔记本进行动态计算是接到警告.

    2.gif

    • 如果笔记本的目录既不是受信任的,也不是不受信任的,那么相应的行为将取决于如下解释的 选项值.

    Mathematica 提供了一些选项,可以用来配置警告用户哪个笔记本将进行动态计算,而哪个笔记本将不进行动态计算.

TrustedPath

选项值是总是被 Mathematica 信任的目录列表. 位于 中的任意目录的任意笔记本文件受 Mathematica 信任. 当一个受信任的笔记本被打开,Mathematica 将不会显示警告信息,而该笔记本可以自动执行动态计算.

默认情况下, 选项值包含 $InstallationDirectory$BaseDirectory$UserBaseDirectory,因此 Mathematica 初始化文件和其它被安装的应用将能够在不提醒用户的情况下,显示动态内容.

以下是当前受 Mathematica 信任的本机上的目录:

In[3]:=
Click for copyable input
Out[3]=

"编辑 TrustedPath..."

UntrustedPath

选项值是一个总是不受 Mathematica 信任的目录列表. 位于 的任意目录中的任意笔记本文件不受 Mathematica 信任. 当一个不受信任的笔记本打开并且试图执行动态计算时,Mathematica 将总是显示警告信息.

默认情况下, 选项值包含用户桌面文件夹(其中网络浏览器下载可能被存储)、用户配置文件夹(其中邮件附件可能被存储)以及电脑临时目录. 如果用户已经配置他或者她的网络浏览器或者邮件程序以在非标准地址中保存下载的文件,那么该用户可以把这些地址增加到 选项值.

以下是不受 Mathematica 信任的本机上的目录:

Click for copyable input

"编辑 UntrustedPath..."

Nesting

中的目录可以是嵌套的. 笔记本是受信任的,如果包含该笔记本的最深层嵌套的目录是受信任的话. 考虑下列例子:

  • FrontEnd`FileName[{$HomeDirectory, "Desktop"}] 是不受信任的.
  • FrontEnd`FileName[{$HomeDirectory, "Desktop", "SafeNotebooks"}] 是受信任的.
  • FrontEnd`FileName[{$HomeDirectory, "Desktop"}, "SomeDownload.nb"] 由于"Desktop" 是不受信任的,将使不受信任的.
  • FrontEnd`FileName[{$HomeDirectory, "Desktop", "SafeNotebooks"}, "MyNotebook.nb"] 由于"SafeNotebooks" 是受信任的,将是受信任的.

TrustByDefault

选项决定当用户打开既不包含受信任、也不包含不受信任的具有动态内容的笔记本时,Mathematica 是否将显示警告信息. 以下是 选项的可能值.

True一个不位于 的目录中的笔记本被认为是受信任的,并且打开时将不会显示警告信息
False一个不位于 的目录中的笔记本被认为是不受信任的,并且打开是将显示警告信息
Automatic一个既不位于 也不位于 的目录中的笔记本在打开时将显示警告信息,仅当该笔记本包含不安全的动态内容 (见下)

选项的值.

选项的当前值为:

不安全的动态内容

动态内容被认为是不安全的,如果它:

改变选项值

类别中的选项. 它们可以使用 "偏好设置..." 对话框或者 "选项设置..." 改变.

任何试图对 或者 选项值的改变将引起 Mathematica 提示用户确认更改. Mathematica 把这作为一种安全预防措施,这使得恶意代码无法在用户不知情的情况下更改这些选项的值.

28.gif

New to Mathematica? Find your learning path »
Have a question? Ask support »