こんにちはフロントエンドエンジニアのまさにょんです!
今回は、脆弱性対策として、SSIインジェクション対応する際のApacheの設定方法について解説していきます。
今回の実装Sampleでは「httpd.conf」に設定をしていきます。
SSI と SSIインジェクションについても解説しますが、手っ取り早くApacheでの実装方法を知りたい方は、
『SSIインジェクション対応する際のApacheの設定』の項目をご覧ください。
目次
SSI (Server Side Include) とは?
SSI (Server Side Include)とは、ApacheなどのWebサーバー側でHTMLファイルにプログラムを埋め込む技術です。
HTML文書中に #exec
などの特別な記法のコメントを挿入すると、
指定された内容で処理した結果でコメントを置換してくれます。
次の解説がわかりやすいので、引用します。
SSI とは、HTMLファイルに特定の書式で処理を記述することで、
サーバ側でその処理を実施してからクライアント側に応答を返す技術のことです。
「Server Side Includes」を何となく日本語にすると「サーバ側で含める」となります。
HTMLファイルでちょっとしたプログラムっぽいことをやるために出てきた技術がSSIです。
SSIは、HTMLファイルの中にプログラムっぽい処理が書けます。
Webサーバーは、その処理を実行してから、見る人のコンピュータにHTMLファイルを送ってくれます。
「JavaScriptみたいなもの?」と思う人がいるかもしれませんが、似て非なるものです。
JavaScriptは見る人のコンピュータ上であれこれ動きます。
それに対し、SSIはサーバ上で動きます。
SSIは、どちらかと言えばPHPさんとかPerlさんのお仲間ですね。
SSIを使うためには、サーバ側で設定しなくてはいけません。
また、SSIを埋め込むことによって、ページの表示が遅くなったりします。
余計なお仕事が増えますからね。
さらに、わざわざSSIを使わなくてもPHPとかで似たようなことができてしまいます。
そのため、現在ではあまり使われていない技術だと思います。
引用元: SSIとは?
上記にあるように、PHPやPerlに近いもので、ただしWebサーバーで実行するという点がポイントです。
ただ、今ではSSIを使わなくてもPHPとかで似たようなことができるので、現在ではあまり使われていない技術です。
SSIインジェクションとは?
SSIインジェクションとは、入力フォームなどに悪意あるSSIコマンドを入力し、
Webアプリケーション宛に送信し実行させることで、外部からOSのコマンドを実行したり、
ファイルの閲覧が可能になると言った脆弱性を突いたサイバー攻撃のことです。
引用元: SSIインジェクションやCSRFなどの新たな問題も~IPAの脆弱性届出状況
SSIの脆弱性を突いたサイバー攻撃である「SSIインジェクション」は、
ブラウザ側の入力を元にWebページを生成する環境で発生する可能性があります。
入力にOSコマンドを実行するSSIやシステムファイル名をSSIに埋め込んだ場合に、OS側で処理が実行され結果がブラウザに表示される仕組みを利用しています。
これを回避するには、サーバー側で「SSIインジェクション対策」の設定をする必要があります。
SSIインジェクション対応する際のApacheの設定
httpd.conf の Optionsにて以下のように設定するとexecを除き、SSIを使用することができます。
Options +IncludesNOEXEC
実際に「httpd.conf」の Directoryディレクティブに設定してみます。
<Directory "${SRVROOT}\htdocs\Robotama">
Options +IncludesNOEXEC
</Directory>
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!
プログラミング学習・エンジニア転職関連の情報
自宅で現役エンジニアから学べる『TechAcademy』 (エンジニア転職保証)
『GEEK JOBキャンプ』スピード転職コース(無料)
【IT道場】入校時0円! 就職目的プログラミングスクール
エンジニア転職なら100%「自社開発」求人に強い【クラウドリンク】
『techgym』 (Python特化・無料)
Apache関連の書籍
参考・引用
- SSIとは?
- SSI 【Server Side Include】
- SSIインジェクションとは | サイバー攻撃大辞典
- SSIインジェクションやCSRFなどの新たな問題も~IPAの脆弱性届出状況
- Optionsディレクティブ:ディレクトリで使用可能な機能を設定する
- 例えばこんなSSI