前回の記事で、性格診断テストとして動作はするようになりました。今回は、セキュリティ対策をしていきます。
普段はwebデザインや静的なコードしか書かないため、セキュリティについては全く無知なため、まず何をしなければならないかまとめてみます。このページでは、プログラミングの素人が推測したことも書いてあるので、間違いがあった場合は指摘いただければ幸いです。
PHPプログラミングにおけるセキュリティ対策
詐欺から身を守るには、詐欺の手法を知ることから。同様にハッキング対策にはハッキングの方法を知ることから始めました。
代表的な脆弱性を突いた攻撃方法
- スクリプト埋め込み攻撃(Script Insertion)
- クロス・サイト・スクリプティング(XSS)
- クロス・サイト・リクエスト・フォージェリ(XSRF)
- SQLインジェクション(SQL Injection)
- セッションハイジャック
- 変数汚染攻撃
- HTTPヘッダインジェクション
- スパムメール踏み台攻撃
- ファイルアップロード攻撃
- nullバイト攻撃
- ディレクトリ・トラバーサル(Directory Traversal)
- eval利用攻撃
- インクルード攻撃
- パス・ディスクロージャ
- コマンド実行攻撃(Command Injection)
たくさんありますね。
そのうち、クロス・サイト・スクリプティング(XSS)を実演している動画を見てました。
この動画を見て抽象的に分かったことは、「ユーザーが入力できる箇所」を特に気を付けなければならないということです。なぜなら、そこから悪意のあるスクリプトやコマンドを入力される可能性があるからです。
ユーザーが入力
eg) 入力フォームに『Hello World』と入力
↓
その内容を動的に表示
eg) 『Hello World』と表示される
例えば、『別のページに飛ばす』という内容のスクリプトを入力された場合、そのスクリプトがページに埋め込まれ、訪れた他のユーザーが意図しないページに飛ばされる。といったことが起こるようです。
みなさんは、ググってリンクを踏んだとき、変なページに飛ばされたことはないでしょうか? それは、こういったハッキングをされいるページを訪れたからなのかもしれません。
以上のことから、まず以下のような対策をする必要がありそうです↓
- 入力側で悪意のあるコード・スクリプトを弾く
- 出力側で悪意のあるコード・スクリプトを無効化
また、さらに抽象的に考えると「意図した動作以外を機能させない」ことがハッキング対策のポイントだと思います。そう考えれば、先ほどのハッキング手法を全て暗記しなくても、ある程度はハッキングされるポイントが予測しやすくなりました。これを踏まえた上で次に進んでいこうと思います。
まず、性格診断テストで「意図する動作」としては、以下のことが挙げられます↓
- フォームから入力された情報をPOSTで取得
- →受け取る情報は、今回の場合「”i”」もしくは「”e”」のみ
- その情報から、特定のページにリダイレクトさせる
- →リダイレクト先は「shindan-result_i.php」もしくは「shindan-result_e.php」のみ
以上のこと以外が動作した場合、ハッキングされている可能性があるといえるでしょう。
次回は、実際にセキュリティ対策用のプログラミンをコーディングしていきます。
← 前の記事
コメント