stackoverflowで、
「"Null"という文字列をAS3のWSDL(SOAP)からColdFusion Webサービスに、"missing parameter error"というエラーを出さずに渡すにはどうすればいい?」
という質問が注目を集めていた。
はて、この問題はどこかで見た気がする。
「もしもし、あなたの息子さんの学校です。うちの学校がコンピューターシステムのトラブルに見舞われまして」
「あらまぁ、うちの子が何か壊しまして?」
「ある意味・・・」「あなたの息子さんの名前は本当に、Robert'); DROP TABLE Students; -- なのですか?」
「ええ、そうですわ。うちではLittle Bobby Tablesちゃんって呼んでますの。」「えーと、うちの学校は本年度の生徒の記録を全部失いました。ご満足いただけましたか?」
「あなたも入力をサニタイズする重要性に気がついたなら嬉しいのだけれどね」
その解決方法として提案されている一つが、このxkcdへのリファレンスで面白い。
AS3に以下のコードを追加
if(lastname == 'null') lastname = 'Little Bobby Tables';ColdFusionに以下を
if(lastname =='Little Bobby Tables') lastname = 'null';問題は全て解決。
// これはwork-aroundである. ドキュメントを参照されたし: xkcd.com/327
「おいグレッグ君。きみはNullさんの問題の修正を実装してくれたよね。あんがとさん。ところで、新しい社員のLittle Bobby Tablesさんにも何故か問題があるんだけど、修正できるかな?」
このstackoverflowの質問は、最近注目を集めたらしく、Hacker Newsでも議論されているが、そのコメントに興味深いものがある。
We have an employee whose last name is Null. He kills our employee lookup (2012) | Hacker News
A Japanese company once made the decision that they needed "virtual" employees i... | Hacker News
日本のとある会社は、あるシステムに、架空の社員が必要であるとの決定を下した。例えば、組織図に、まだその役職につく人が決まっていない時に、役職を加えるだとか、その他多数の目的のためだ。そこで彼らは賢いアイディアを思いついた。「おい、これが必要なら、俺らは単に、XX_JOB_REQUESTとかXX_INCOMING_TRANSFERみたいな状態フラグの一種として「日本語の名前」[訳注:後のコメントで補足しているがローマ字]を入力すればいいんじゃね?」
この会社のある開発者が、新しい状態フラグを追加するたびにシステムを変更しなければならないことに嫌気が差し、書いたコードが、大体以下のようなものだった。
if (InternalStringUtils.isAllLatinCharacters(employee.getJapaneseName()) { /* この「社員」には給料を支払う必要がないので、 給与振込の社員情報取得のバッチリストからは除去する */ ...なぜ私がこの興味深い実装の選択について知っているか、言う必要はあるかね?
他にも、中国の社員管理とか銀行とかのシステムは全部中国語で入力する前提で作られているので、ラテンアルファベットを入力すると大抵動かないとか、苗字に空白文字が入っている人の喜劇などが報告されていて興味深い。
Base64エンコードを強制するのがベターな気がします。データ量増えますけど、文字絡みのトラブルはほぼ無いと思いますよ。空白がないはずなのでコマンドにもなりませんし。
ReplyDelete