高木浩光氏のプログラミング解説書籍の脆弱性をどうするかを読んでなるほど、と思った。
実際のところ私もセキュアなコードを書けますか?と言われたらあまり自信が無い程度のプログラマである*1。
そんな私も、世の中のプログラム書く人たちもおそらく、新しい言語を習得するときにたいていは書籍なりWebなりで「初心者向けの入門記事」を読む。けれど、そのサンプルコードがセキュアでなければそのコードをそのまま「お手本」として実際のシステムに使ってしまい、結果的に脆弱性ができてしまう。
高木氏の日記はたまにしか読まないので氏の主張を取り違えているかもしれないが、氏は「”セキュアプログラミング”だとか、「セキュアに書く」事を通常のプログラミングと比べて特別視しているのが問題で、「セキュアに書く」事はプログラミングの前提条件である」と兼ねてから言われていると捉えている。
そうだとするとたしかにその通りで、「セキュアプログラミング」だとか「サニタイズ」とかあえて「プログラミング」とは別の言い方をしてしまうと、何か特別なもの、あくまで付加的なものとして捉えてしまう可能性があるのだろう。
特に、あるプログラミング言語に対する初学者についてはサンプルコード*2が全ての取っかかりになると思う。そして「あ、こういう書き方をすればいいのか」と覚えてしまうと、そのサンプルコードに問題があっても本人が気づく可能性はそれほど高くない*3。だから、その書き方を拡大再生産してしまう。
初学者に「あ、こういう書き方をすればいいのか」と覚えさせる時点で、問題の起こらないコードを提示しておかないといけないということだ。例えそれが、見た目だけだと簡潔に見えないコード(PHPのhtmlspecialchars()でいちいち囲むとか)だとしても、「そういう書き方をするものなのだ」と思わせてしまえば、その後は本人はそれを面倒だとは思わずに「そういうものだから」とコードを書いていくだろう。
つまり、「セキュアプログラミング」うんぬんというのが話題になるのは、昔からプログラミングをしてきた人、私も含めてにとってセキュアプログラミングが「新しい概念」に見えてしまうからだ。プログラミング歴が長い人ほど、セキュアなコードを書くということに敷居の高さを覚えてしまうんじゃないだろうか。
昔はそこまでセキュアという概念が深刻なものでは無かったはずだ。Perlでアクセスカウンタとか掲示板CGIとか簡単なWebアプリしか無かったころは「HTMLタグを許すと荒らされる原因になるから削除しよう」くらいの認識だったと思う。
それがWebアプリの普及や高度化で、ECサイトや企業システムとかで使われるようになるとこれらの脆弱性の影響がクリティカルなものになった。そこで初めて「セキュアなプログラミング」というものがフォーカスされ、盛んに叫ばれることになったのだろう。
そうすると、昔からそんなのを特に考えずにプログラミングをしてきた人達は「セキュアプログラミング」という「新しいもの」を覚えないといけなくなったわけで、これは入門用の書籍を書いている人も例外ではないだろう。
自分のプログラミングスキルに後づけで「セキュア」を取り込むと、「セキュアプログラミング」は付加的なものに見えてしまいがちなのではないだろうか。そういうところが「書籍のサンプルコードは簡単なものでも良い」という、もはや初学者に対する「余計なおせっかい」な考えに繋がっているのではないか。
つまり「セキュアなこと」は付加的なものでなく、もはや前提になっている時代なのに、下手に長くプログラムをやって来たばかりに「セキュア」なコードは初学者には理解しづらいのではないかという考えをしてしまうことがあるのかもしれない。
逆にこれからプログラミングを学習していく世代は、いちばん最初に触れるサンプルコードで正しいコードを提示されればそのやり方を踏襲してプログラミングしていくだろう。
自戒を込めて、意識を変えないといけないのは今までプログラミングをしてきた経験者であって、新しく学習する人ではない。初学者に教える立場なのは経験者であるから、経験者の意識を早く変えていかないといけないということに尽きるのではないか。
- *1: なのでいまさらながら勉強中
- *2: 書籍やWeb上のに限らず、仕事の現場ならそこにある既存のコードも
- *3: 初学者だから。もちろん、他の言語の経験豊富な人はその経験と勘で気づくかも知れないが
関連する記事:
- 間食しすぎ ここ最近ずっと、会社から帰宅して食事した後にすぐに眠くなってしまって自宅にいる時間を有効に使えていない。 仕事自体は忙しくなく、毎日19時台には会社を出て博多駅や天神を少しブラついてから帰るくらいの余裕はある。ので、昔のように帰宅が23時や0時の時と比べて圧倒的に楽なはずなのに...。 読書とかネットで調べ物とかしたいのになぁといろいろ思っていたら、間食のせいかなと気づいた。 私の食事リズムは、自......
- 忘れっぽくなってきたのでGTDもどきを ここ最近、ふっと「今度時間ができたときに、あれしなきゃなぁ」と頭をよぎるのだけど、その数秒後には「あれ、何をするって思ったんだっけ」と思うことがしばしば。 特に仕事の休憩時間とかに思い出す、プライベートなことは即実行できないので忘れやすいような感じがする。そこで、思いついたらとにかくメモを取るようにしている。手元にプライベート用のロディアを常に起き、何かやらないといけないこと、どんな小さいことでも......
- Oracle Master Oracle Masterの試験体系が変更になるようだ。 なんでも、現行のSilverが"Silver Fellow"(現行のSilverレベル)と"Silver"(現行のGoldレベル)、現行のPlatimunが"Gold"になるようだ。 そうすると、ほぼSilver、Goldの位置づけが一ランク上がった形になる模様。 新体系の試験は10/1からだが、それまでに駆け込みで受験するか、新体系でまず......
- 大規模システムでアーキテクト不在は終盤で混乱を招く 大規模なプロジェクトで、全体を統括するアーキテクトを立てずにプロジェクトを進めていくというケースが意外と多い。 そうすると、各機能が自分たちの要件を満たすことしか考えずに設計、実装していくのでシステム全体として結合したときに問題が起こる。 組み込みなら、プログラムサイズ、使用RAMサイズ、そしてCPU負荷が主なところ。これがWebアプリや業務アプリでなら、最悪サーバー増設やスペックアップで回避とい......
- 若手の教育について考える(本が苦手な人には?) この間、教育を期待するのもいいけど、仕事に興味を持つことというエントリを書いて以来、後輩・若手に対する教育、もしくは会社の戦力にするにはどうすればいいんだろうかということを時折考えている。 前回のエントリでも、「興味を持てば勝手に勉強するので教育は要らない」と言っているわけではなく、教育するときに「それに興味を持っているかどうか」でその効果は大きく違ってくるだろう、と。 あと私の周りを見ていて「書......
- 大手SIerでないとやれない仕事のパイは頭打ちか 大手SIerの利益悪化がとどまることを知らない件 - GoTheDistance まぁ、厳しいですねぇ。 今まで比較的安定して要因を提供していたメーカーさんも、減員になったり人月単価が下がったりで人員を入れておく旨みが減ったこと、あと受託案件が減ったり、あっても短納期で作業量の多いハイリスクなものばかり。 社員をそれなりに抱えている会社だと、数人を食べさせるための仕事を取れば良いわけではなくて、数......
- 新しい: 今年のまとめ…?
- 古い: 吉野家の3―11月期、営業損益15億円の黒字に転換
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://www.swingingblue.net/mt/archives/000804.html/trackback
- トラックバックの送信元リスト
- 後づけで「セキュアプログラミング」と言うからダメということか - きままな日記帳 より
