ITエンジニアが仕事に対して思うこと

ITエンジニアとして働く中で感じたことを、現場の温度感そのままに言語化するブログです。設計・実装・運用のリアル、学び続ける負荷、品質とスピードのせめぎ合い、コミュニケーションの難しさなど、きれいごとだけでは語れない「仕事の実態」を整理します。誰かを責めるのではなく、なぜそうなるのかを構造で捉え、明日から少し楽に、少し強く働ける視点を提供します。新人から中堅、マネジメントまで参考に。

【動画解説】平成23年度秋期情報セキュリティスペシャリスト試験午後Ⅰ問1過去問題解説 「レガシーコードの買、全部暴いてみせるわよ!」

 平成23年秋期の情報セキュリティスペシャリスト試験、午後I問1を徹底攻略する解説動画です。社内限定だったC++のWebアプリをインターネット公開する際の脆弱性対策をテーマに、SQLインジェクション、クロスサイトスクリプティング、バッファオーバフローの脅威と、Javaへの移行を踏まえた安全なプログラミング手法を学びます。2026年の最新技術の解説も交え実践的な知識が身につきます。

動画内で解説されている重要なセキュリティ用語と対策について詳しく説明します。まず、データベースと連携するWebアプリケーションにおいて非常に危険な脆弱性となるのがSQLインジェクションです。これは、外部からの入力値をそのままSQL文の組み立てに用いることで、攻撃者が意図しないSQLコマンドをデータベースに実行させてしまう攻撃手法です。ソースコードにおいて文字列連結でSQL文を作成している部分は、この脆弱性の原因となります。この問題を防ぐための根本的な対策として用いられるのがプレースホルダです。プレースホルダを使用すると、SQLの骨組みを先に作り、後から安全に値をバインドする仕組みが実現できます。Java言語においては、このプレースホルダの機能としてprepareStatementメソッドが用意されており、これを利用することでSQLインジェクション攻撃を防ぐことが可能です。 次に注意すべき脆弱性がクロスサイトスクリプティングです。これは、ユーザーからの入力値やデータベースから取得したデータを、Webブラウザの画面上にそのまま出力してしまうことによって発生します。攻撃者が悪意のある入力を行うと、DBやアプリを素通りし、それを閲覧したユーザーのブラウザ上で不正なスクリプトがそのまま実行されてしまう危険性があります。この対策として必須となるのがエスケープ処理です。HTMLにおける特別な記号を安全な文字列に変換することで、ブラウザがスクリプトとして解釈して実行してしまうのを防ぎます。画面に入力された値だけでなく、データベースから取得した値についても、すでに毒されている蓄積型クロスサイトスクリプティングの可能性があるため、出力時には忘れずにエスケープ処理を施す必要があります。 さらに、プログラミング言語の特性に起因する脆弱性への理解も重要です。C++言語は処理が高速ですが、ポインタ演算によってプログラマが自由に境界を越えてメモリアドレスを操作できるという特徴があります。このため、データ転送時のメモリ領域の境界チェックが漏れたり、ポインタによる誤った領域へのアクセスが発生したりすると、バッファオーバフローという深刻な脆弱性を引き起こす原因となります。一方で、Java言語を採用した場合は、メモリ内容へのアクセス手段が限定的であり、メモリ管理はJava仮想マシンが自動的に行います。不要になったメモリを自動で掃除するガーベジコレクションという仕組みが備わっていることに加え、アドレス自体を計算対象にできない仕様となっているため、プログラマに直接メモリアドレスを触らせません。この根本的な言語仕様の違いによって、Javaでは根本的に領域外アクセスが起きず、C++で問題となるようなバッファオーバフローの脆弱性が発生しないという安全設計上のメリットがあります。この動画では、こうした言語の特性を比較しつつ、よりセキュアなプログラミングの考え方を深めることができます。 www.youtube.com