ちょっと心配になる電卓

リクルート内にあるMTLというラボblogに「超シンプルな電卓作ったよ」というエントリがアップされた。

で、この説明を読んでみたのだが、ちょっと心配になる。

「超シンプルな電卓」に欠けてるもの

blogっていうメディアは気軽なメディアなのだが、ある程度認知度のあるblogで紹介された記事は、google検索にヒットし、その内容を参考にされ様々なものが作られていくこともある。
MTLのような複数人数で書いているblogではちょっと別の人による精査が入っても良さそうだと思うのだが、この記事で、このblogには明らかにそういう思考が欠けているのではないだろうか。

「シンプル」という定義

JavaScriptでevalするだけの超シンプルな電卓」と説明している。
しかし、これでは「超シンプルな電卓」なのではなく「ただ何も考えていない危険な電卓」ではないのか?
例えば次のような文字列を入力してみよう。

document.body.innerHTML="DANGER?"

これを参考にして、「入力された数式の計算結果をサーバにリクエストしてどうのこうの」という仕組みを誰かが作って、そのリクエスト文字列の影響で情報が漏洩したりしても、その賠償責任はさすがにMTLにはこないだろうけど。

実際どうなのか?

自分自身セキュリティの専門家ではないので、evalは何となく危なそうだなー、と思っているだけですが、実際そんなに危なくないのかな?
どこかJavascriptの限界があり大丈夫な仕組みなのかな?

JavaScript 第5版

JavaScript 第5版

危険ではないらしい(追記 2009-02-22)

はてブでコメントいただきました。ありがとうございます!
はてブより、id:hirokidaichiさん曰く

危険ではない。JSのセキュリティに関する認知が低いのかもしれないなぁ。これを保存して他人が見れるようになったら問題。

なるほど、危険ではないのか。
もう一つ、はてブより、id:mogyaさん曰く

ボクも一瞬危険な気がしたけど、具体的なリスクが思いつかなかった。他人がマッシュアップして自爆することまでは責任とれないよ。

mogyaさん同様、私も「一瞬危険な気がした」のです。自分がもし同様のことをやろうとしたら、入力された文字列に文字種制限を入れて、それ以外の入力があったときにはエラーなりワーニングを出すだろうな、と思うのです。
でも、こういう問題って、危険な理由が思いつかないから危険ではない、というところで締めくくっていいのか?と思うわけです。
それを言ってたら何もできなくなりそうですが、それでも予想しうる限りのセキュリティ対策はとっておきたいなと。危険な可能性があるならその可能性を知っておきたいなと。
(ちなみに自分はセキュリティとか専門家でも何でもないです)
こうなると、「Javascriptでform入力文字列をそのままevalすることが、危険ではない理由」もしくは「Javascriptでform入力文字列をそのままevalすることが、危険である理由」を知りたくなってくる。
こういう問題は、想像をふくらませつつ、勉強するしかないですね。