この世の常には、どうにかして他人のサーバーを利用して
私腹を肥やしてやろうとか、他人のHPを悪意を持って
メチャクチャに壊してやろうとか。
そういう輩(ヤカラね)が蔓延っている訳です。
僕だって大昔は、そんなハッカーと呼ばれたい願望?
の一族だった事実は否めない訳ですが苦笑。
プログラムを書く側にとっては、
こんな、僕からしてみると本当は愛しいアホなヤカラから、
お客様の大事なサーバーを守る施術を色々と思考錯誤してる毎日。
つか、本音は、ハッカー色の人種って嫌いではないのですが。
(僕が好きなのは、本物の秀才ハッカーではなく、庶民的?もしくは、
真のハッカーになりきれないオタクハッカー?の層かな笑)
PERLやPHPでプログラムを書いて、WEB上で動作させる場合。
しかも、これを仕事としている場合、当たり前だけど、
ある程度のセキュリティーを意識しなくてはなりませんよね。
(ほとんどの場合、個人情報の流出は内部からの人為的な漏れなんだけどね)
そこで、何らかの理由で、
どうしてもCGI(注1)をBASIC認証下のフォルダー内に置けない場合の、
セキュリティー確保の方法を、
10年以上に渡りサーバーと日夜格闘して来た
僕の経験値から(偉そう?)いくつか書いてみたいと思います。
★環境変数「HTTP_REFERER」を利用する
環境変数って素敵な言葉だと思いませんか?(僕だけですかね?)
あとね、確率論なんかを夜な夜な勉強していると、
とっても興味深い熟語に目を奪われたりもします。
例えば「標本空間」。な〜んかいい響きの四文字熟語ですよね。
そんな事はどうでもいいか。
環境変数ってのが何なのか理解できない人、
または、どうやって「HTTP_REFERER」を取得するのかを知らない人は、
是非のこの際、ググッて調べて下さい。
この環境変数の中に、「HTTP_REFERER」ってのがあるんです。
要するに「HTTP_REFERER」には、
どこのURLから飛んで来たアクセスなのかがマンマ書いてある。
この「HTTP_REFERER」を利用すると、
例えば、自社の管理画面から飛んで来たアクセスなのか、
それとも、全く関係ないハッカー的な悪意のアクセスなのかを
判断することが出来ます。
これにより、管理者からのみのアクセスに絞ることが出来るのです。
ただし、この「HTTP_REFERER」という情報、数年前から、
パソコンにイントールする一部のセキュリティーソフト(ノートン等)で、
プライバシーの侵害という大儀で、消されつつある傾向にあります。
だから、管理者が使うセキュリティーソフトによっては
利用出来ないケースもあるのですが。
★GETではなくPOSTを使う
どんなフォームやCGIへのテキストリンクでも、
目的のCGIを起動するには、GETかPOSTすることになります。
(GETやPOSTが分からない方は、すみませんググってください)
一回でもCGIを作成した経験のある人は分かると思うけど、
GETだと、URL欄に全てのクエリが丸裸で表示されてしまいます。
これではいささかマズい場合、CGIへの起動元リンクをPOST対応にして、
URL欄へのクエリ表示を無くす方法もあります。
例えば、自社の管理画面からの元リンクをPOSTにして、
ユニークなクエリを一つ追加する。
このようにPOSTする事によって、
受けるCGI側では管理画面からのアクセスなのか、
他人からのアクセスなのかを判断できます。
ただ、これにも避けられない欠点はあって、
管理画面のHTMLソースを見てしまえば、
クエリを特定することが可能になります。
でも、管理画面にパスワード無しでは入れないような仕組み(Basic認証等で)
を作っておけば、目的のCGIの起動は安全に保たれる訳です。
★クッキーを活用する
これまた、クッキー(cookie)を知らない人は、
申し訳ないですがググってください。
例えば、自社HPの管理画面から、
アクセス者のブラウザにクッキーを発行します。
今現在のネット世界は、
クッキー無しには成立しないまでにもカオス状態になっているので、
まあ今どき、クッキーを拒絶する設定にしている人はいないと思うのです。
管理者のみが知りうるページからユニークなクッキーを発行して、
そのクッキーを内包するブラウザだけに、CGIを起動する権限を与える。
こうする事によって、管理画面にアクセス出来た人、
要するに管理者のみが目的のCGIを使えるようにすることが可能になるのです。
※注1
CGIっていうと、最近の若い人のほとんどはPERLだと思い込んでるみたいで。
それは多分、PERLの拡張子が「.cgi」だからだと推測するんだけど。
CGIって、Common Gateway Interface の略だからして、
本来は、ウェブサーバー上でプログラムを動作させるための
仕組み全般を意味するのであって。
厳密には、PHPだってRubyだってCGIだかんね〜!
(こんなことほざいてる僕って、既に頭の硬い老人かな?)
だってだって、最近、PERLを軽視する傾向にあるんだもの。
こんなにモジュールが充実している現実的な言語なのに!
▼▼▼▼
今時のレスポンシブ・デザインのサイトが簡単に作れます!
▼このHPに連動した、メルマガも発行させてもらっています。もし気分が乗ったら、登録してもらえれば嬉しいです。
☆リンク集