ちょっと硬派なコンピュータフリークのBlogです。

カスタム検索

2012-02-20

あなたのサイトのJavascriptが自由なソフトウェアのであることを表示しよう! Javascript License Web Labels登場。

フリーソフトウェア財団から、JavaScript License Web Labelsという取り組みについての発表があった。これはひと言でいうと、ウェブページ上で使われているプログラミング言語であるJavascriptのライセンスをきちんと表示しようという取り組みだ。なぜそのような仕組みが必要なのか?どうやって使うのか?ということについて今日は説明しようと思う。


ユーザーの了承なしに実行される無数のJavascriptコードたち


Javascriptはかつて、ウェブページのちょっとした装飾というような目的で主に利用されていた。それはページの内容に大きな影響を及ぼすものではなく、とてもささやかなものであった。しかし、今は事情がまったく違う。ウェブページに付随するJavascriptは年々大きくなり、Google Docsのようにワープロや表計算までをも実行されるようになった。それはもはやささやかな装飾とはかけ離れ、れっきとしたひとつのプログラム作品であると言える。

今や世界はJavascriptで溢れている。どのページでもいい。あなたが普段訪れるウェブページを開くと、即座にJavascriptが実行されるだろう。Javascriptを拒否する選択権はユーザーにはない。いや、正確にはJavascriptそのものを無効化したり、NoScriptなどを使ってJavascriptの実行を拒否することが可能だ。だが、そのような手段を講じなければ、ユーザーの許可を得ることなくJavascriptが実行されるようになっている。Javascriptのないページなんて皆無に近い。

これはよく考えてみれば恐ろしいことである。あなたがウェブページを開くたびに、未知のプログラムがあなたのコンピュータで実行されているのだ。

Javascriptはスクリプト言語なのでどのような処理をするかは書かれているから未知ではないと思われるかも知れない。だが、最適化や難読化が行われている場合が多く、実際にはどのような処理が行われているかユーザーから分かるとは言い難い。

Javascriptはネイティブな実行形式のプログラムではないから問題はないという人も居るだろう。(ネイティブな実行形式のプログラム=.exeなどがあなたに無許可で実行されていたら空恐ろしいことである!)Javascriptはネイティブな実行形式のプログラムとは違い、ブラウザが用意したサンドボックス内で実行される。そのため、多くの方はJavascriptがOSのその他の部分に影響を及ぼすことはない、自分のコンピュータに深刻なダメージを与えることはないとお考えであろう。だが、それはJavascriptの実装が仕様通りに動けばの話である。Javascriptのインタープリタとて人が作ったものである以上、バグもあればそのバグがセキュリティホールになっていることだってある。その結果、システムに深刻な影響を与えてしまうことだってあり得るのだ。(Javascript経由で任意のコードを実行できる脆弱性は過去に星の数ほど報告されている。)

また、自分のコンピュータが攻撃を受けなくても、XSSやXSRF攻撃に利用されることだってある。これらはウェブサイトの脆弱性であるが、悪意あるJavascriptプログラムにとっては格好のターゲットとなってしまうからだ。

果たしてJavascriptの実行を無造作に許可し続けていいのだろうか?

ライセンスにまつわる問題

ふだん、あなたはウェブサイトを開いた時にブラウザ上で実行されるJavascriptのライセンスを気にしているだろうか。それらはウェブページを開けば自動的にロードされるようになっているので、暗黙のうちにそのJavascriptは自由に、無料で実行して良いものだと考えてはいないだろうか。通常はユーザーがライセンスの条件を了承してからコンピュータ上で実行されるものだが、ウェブページをロードするといきなり実行されるJavascriptに対して、ユーザーが望まない条件でライセンスされているものを拒絶するにはどうすればいいだろうか。

例えばGoogle()やYahoo! Japanでは明確にリバースエンジニアリングを禁止している。リバースエンジニアリングを禁止することはGPLで禁止されているので、これらのサイトではGPLなJavascriptプログラムが使われることはないだろう。FacebookTwitterでは特にそのような制限は記述していないようだ。(Facebookに至っては「ソフトウェアもFacebookの一部です」というような意味に取れる定義がある。)

ウェブサービス提供者(ないしは企業)が性善説で活動しているとは考えるべきではない。商売はきれいごとだけではやっていけない。ユーザーが望まない形で知らず知らずのうちにデータが収集されてしまっているということもある。ウェブページをロードした際に実行されるJavascriptが「自由なソフトウェア」なら、どのような処理がされているかを検証することもできるが、リバースエンジニアリングを禁止されている場合にはそうも行かない。「何をやっているのか調べるな」と言われているようなものだからである。リバースエンジニアリングを禁止するのなら、せめて「どのような情報を収集しているか」を明示するべきだろう。従って、「(何をやっているかユーザーが把握できる)自由なソフトウェアだけを実行したい、身勝手なライセンスのソフトウェアは実行したくない」というニーズが生じるのはごく自然なことではないだろうか。

そこで、フリーソフトウェア財団は立ち上がった!


かねてより、Javascriptのライセンスはフリーソフトウェア財団の懸念事項であった。このことは、リチャード・ストールマン氏の書いた記事The JavaScript Trapに詳しい。Javascriptの台頭によってユーザーのプライバシーやセキュリティがリスクにさらされているというのは少々過激な主張だと感じられるかも知れない。だが、SOPAの件で「リチャード・ストールマンは常に正しかった」と言われるように、一見すると突拍子もない過激な懸念のようでも、時が経ってから評価されることもある。リチャード・ストールマン氏の懸念は時代を先取りしすぎているのだ。

ノンフリー(自由でない)ソフトウェアがユーザーに様々なリスクをもたらすということをリチャード・ストールマン氏は主張してきた。それらはクライアントで直接実行されるネイティブ形式のプログラムでも問題になるが、それはウェブブラウザ上で実行されるJavascriptにもそのまま当てはまるというわけだ。フリー(自由な)ソフトウェアだけがそのようなリスクから我々を守ってくれる。

JavaScript License Web Labelsの使い方

そこでフリーソフトウェア財団が提唱しているのが「JavaScript License Web Labels」だ。これは、Javascriptのライセンスを分かるようにしようという取り組みで、なおかつ機械的に(プログラムから)そのライセンスを読み取れるようにしようというものだ。とは言え、Javascriptのライセンスを仰々しくすべてのページに表示するというのは無理がある。そこで、Javascript License Web Labelsでは、ライセンス表示用のページを作成し、次のような構造のテーブルにライセンスを記述するという形式を提案している。

<table id="jslicense-labels1">

<tr>
<td><a href="/js/jquery-1.7.min.js">jquery-1.7.min.js</a></td>

<td><a href="http://www.jclark.com/xml/copying.txt">Expat</a></td>

<td><a href="/js/jquery-1.7.tar.gz">jquery-1.7.tar.gz</a></td>
</tr>

</table>

この形式では、1行(ひとつの<tr>)に対してひとつのソフトウェアが対応するようになっており、各行は3つのセルで構成され、それらは順に、Javascriptファイル名、ライセンス、ソースコードという順で記述される。独立したJavascriptプログラムの数だけ、この3つのセルからなる行を登録するという寸法だ。

そして、ユーザーが開く可能性がある全てのページから、このページへ次のようにリンクを貼るのである。

<a href="/about/javascript" rel="jslicense">JavaScript license information</a>

これらのテーブルとリンクはそれぞれid="jslicense-labels1"、rel="jslicense"という属性値で機械的に検出することが可能だ。

まとめ


Javascriptのライセンスが分かるのはいいことだし、機械的にライセンスを判断することが出来ればユーザーがノンフリーな(自由でない)Javascriptをブロックするのに役立つ。悪意あるサイト管理者がライセンスを偽れば、ノンフリーなjavascriptに対して機械的なブロックをかいくぐらせることが可能だが、そのような場合には後から人間がページやJavascriptの内容から検証することが可能だ。

とはいえ、そのような機械的にライセンスを判断してブロックするソフトウェアはまだ存在しない。Firefox用のLibreJSプラグインで実装する予定であるという話になっているが対応はまだである。そもそもウェブサイトが対応するのにはまだ時間がかかるだろうし、あまり直接の金銭的なメリットがないこの取り組みに参加するかは甚だ疑問が残る。正直に言うと、本ブログも対応はまだであるので、時間を作って早急に対応したいと思う。

Javascript License Web Labelsは、Javascriptを同梱しているフリー(自由な)ソフトウェアまたはオープンソースソフトウェアならば比較的対応しやすいだろう。なので、そのようなソフトウェアを配布している人は、ぜひJavascript License Web Labelsにも対応して頂きたい。

まだまだ成果は出ていないJavascript License Web Labelsだが、ともあれJavascriptに対するフリー(自由な)ソフトウェアの戦いは大きな一歩を踏み出したのだ!

0 コメント:

コメントを投稿