言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Squeak プラグインのセキュリティ

前に大島さんが Squeak-ja に Squeak プラグインのセキュリティは大丈夫か? という話をされていたので、ちょっと調べてみた。Squeak プラグインには untrustedUserDirectory という特別なディレクトリがあって、プラグイン時にはそのディレクトリ以外へのファイル操作は出来ない事になっているはずだ。ほんとかなあと思ってやってみた。

f _ FileDirectory default newFileNamed: 'c:\test.txt'.
f nextPutAll: 'untrusted'.
f close.

全然書き込める。。。とはいえ、機能としてはちゃんと実装されてあって、SecurityManager default disableFileAccess というような文を手で do it すればきちんと制限がかかるのだが、一体どのような条件でこの機能が有効になるのだろう。ソースを覗いてみると、以下のような箇所が関係している事が分かった。

ProjectLoading >> openName:stream:fromDirectory:withProjectView:
(略)
	t7
		ifFalse: [t14 := (t2 isTypeHTTP
							or: [t1 isNil])
						ifTrue: [Preferences securityChecksEnabled]
						ifFalse: [Preferences standaloneSecurityChecksEnabled].
			t14
				ifTrue: [SecurityManager default enterRestrictedMode
						ifFalse: [t2 close.
							^ self]]].

雰囲気的には、http からダウンロードしてきたプロジェクトを起動する時に有効になりそうだ。というわけで、SuperSwiki から「探す」で一度プロジェクトをダウンロードしてみるとちゃんと動いた。ほっ。

しかし問題があって、2度目に同じプロジェクトを読み込むと、ローカルに一度保存したプロジェクトファイルが使われるので、セキュリティ機能は働かないのだった。これは意図した動作なのかな?