WEBページを作る場合、セキュリティ常に意識して構築する必要があります。
ルール1.なるべく外部リンクを入れない
外部リンクを入れてはダメな理由を説明します。
外部をリンクから他のサイトにユーザーをアクセスさせた時、ヘッダー情報にreferer情報がのります。
相手側サイトのアクセス解析でこちらのURLが載る事になります。
トップページ等でしたら問題ありませんが、変数を持ったページだと悪意ある人に狙われます。
どうしても外部ページに飛ばしたい時は、リダイレクト用のクッションページを用意する事でrefererを洗浄する事が出来ます。
referer洗浄は↓こちらのページで詳しく書いています。
ルール2. 綺麗でわかりやすいソースを書く
一見関係ないように感じますが、綺麗なソースを書く事はセキュリティの基本と言ってもいいです。
インデントがずれているとバグが見つけにくいです。
クラスの命名がバラバラだとメンテナンスが難しくなります。
・インデントをしっかりいれる
・余分な空白を入れない
・クラスの命名ルールを統一させる
・長すぎるコードも意味不明な迷宮となります(1万行とか!)
ルール3. PHPDOCをわかりやすく入れる
PHPDOCを全部のクラスやメソッドに入れるのは結構時間もかかりますし、ちょっと直したらphpdocも書き直しになったりして、かなりメンドクサイです。
でも、そのコード3年後に見て自分でわかりますか?
1年後だって怪しい。
構築している時は全部把握しているのでPHPDOCなくても大丈夫ですが、1年後にメンテナンスする事になったらわかりますか?
phpdocは数年後の自分へのメッセージだと思ってわかりやすく書いて下さい。
ルール4. エスケープ処理を全部ちゃんと入れる
getとpostをしたらかならずエスケープ処理をしましょう。
数字しか受け取らないのならちゃんと数字だけなのかチェック。
数字の0や空白を許さなないならそれもチェック。
ルール5、管理画面に制限をかけているか
あなたは、どこかのサイトをハックしようとする時まず何をしますか?
まず最初に狙われるのは管理画面です。
管理画面に入られてしまったら、もう丸裸と同じです。
管理画面を守る
・もし可能ならIP制限をかけます
・IP制限が無理ならベーシック認証をかけます
・管理画面のディレクトリの名前も推測が難しいものにする
ルール6、アカウントロックをかける
ログイン画面はかならず、5回失敗したらロックかけるようにします。
これで総当たり攻撃を防げます。
ルール7、公開ディレクトリに重要なファイルを置かない
当たり前なのですが、ブラウザからアクセス出来る所に、重要なファイルを置くべきではないです。
重要なファイルというのは
・データベースのIDパスワード
・個人情報が書かれたファイル
等です。
重要なファイルはそもそもブラウザからアクセス出来る所におかず
include
して使うようにしましょう。
8、アップロードは拡張子のチェックをする
フォームにアップロード機能をつける時は、かならず拡張子のチェックをする。
画像なら、jpg/gif/png だけのように。
pdfならpdfだけ
エクセルなら、エクセルファイルだけ
拡張子を指定なしにアップロードを許可すると、ウイルスつきのファイルをアップロードされます。
9、フォームは入力値のチェックをする
お問い合わせフォーム等を設置する場合、かならず入力値のチェックが必要です。
数値なら数値かどうか
日付なら日付かどうか
カタカナなら、カタカナかどうか
英語なら英語かどうか
javascriptを埋め込まれてないか
SQLインジェクションを弾き返せるか
等のチェックをかならずします。
10、脆弱性診断を月に1回はやる
可能ならば、月に1度は脆弱性診断をやる。
全ファイルをスキャンかけて、ウイルスが潜り込んでいないかチェックする。
・マルウェアスキャンをかける
・ソースコードレビューをやる
コメント