すでにここまでこの話題が進んでいる段階で遅きに逸している感もあるのだけれども。
高木浩光@自宅の日記最近では、万能な意味で「サニタイズ」を使う人が増えてきた。英単語として のsanitizeは「消毒する」という意味だが、これをわざわざ意味を変えて「無 害化する」と訳す人が目立つようになってきた。その背景には、「入力で対策 することが誤りである」という指摘に対して、「出力で対策することもサニタ イズと呼びたい」という思考が働いているのだろう。
まずは本題の前に"sanitize"の意味から。もちろん「あいてぃ〜系日本語ジャーゴン」の「サニタイズ」と"sanitize"がもはや違う物を指し示している点を留意した上で。
Definition of sanitize - Merriam-Webster Online Dictionary1 : to make sanitary (as by cleaning or sterilizing)
2 : to make more acceptable by removing unpleasant or undesired features <sanitize a document>
そう。この用法によれば、「サニタイズ」はとにかく"sanitize"を使うのは誤りではない。。しかもわざわざ御丁寧に"sanitize a document"というのが用法として載っている。もっとも「サニタイズ」という言葉の濫用が技術者の脇を甘くしたりいらぬ誤解を与えたりするのであれば、この言葉の使用は慎んだ方がいいし、その意味で「サニタイズ言うなキャンペーン」には賛成である。
それはさておき、私はカタカナ語が苦手である。英単語をそのまま使いたい場合はどうしても
Matzにっき(2004-08-07)小飼さんは「ぱーる」の発音が英語風。
なってしまう。「カタカナイズするな」キャンペーンをはりたいぐらいなんである。
というわけで、以下の提案をしてみる。
- 解毒
- 入力されたデータから危険および脆弱性を取り除くこと。
- 消毒
- 出力されるデータに危険や脆弱生が含まれないようにすること。
なぜこう分けたか?生物学にインスパイヤ(笑)されたからだ。アルコールや薬など、すでに摂取したものは肝臓が解毒する。食料品などこれから摂取されるものは出荷前に消毒する。これなら分かりやすい上に方向を間違えにくい。
そして解毒法として「メタ文字のエスケープ」や「スクリプトの禁止」があり、消毒法として「出力の正規化」があると説明するのだ。そうすると
高木浩光@自宅の日記 - プログラミング解説書籍の脆弱性をどうするか, 「サニタイズ言うなキャンペーン」とは何か, ASPとかJSPとかPHPとかERBとか、逆だ..これのどこが悪いかというと、 「id」と「postdate」について htmlspecialchars を通していない点である。
ということも、「缶詰なら缶ごと丸ごと火を通した方がいい」と実にすっきりと説明できるではないか。解毒と消毒の実践においても、解毒は細かく、消毒はいっぺんに行うとよいという点も共通している。
いかがだろうか?
Dan the Antidote
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。