2016年2月3日シェアツイートシェアブックマークウェブ・アプリケーション開発にとってPHP言語は大変便利なプログラミング言語ですが、一方で使い方を間違うと開発したwebサイトがいとも簡単にハッカーに乗っ取られてしまいます。使う上で知っておきたいセキュリティ対策をまとめておきます。No.1のCodeCampが運営するプログラミング未経験の方のための学習メディアですCodeCampとは?(受講生体験記)「エンジニアは女性のキャリアとして魅力的」未経験からの転職体験記リモートワーク×多拠点居住の新しい生き方を実現する。目次PHP開発者必見!最低限知っておくべきセキュリティ対策まとめ実際にハッキングされる様子(XSS)クロスサイト・スクリプティング(XSS)SQLインジェクションディレクトリ・トラバーサルOSコマンド・インジェクションクロスサイト・リクエストフォージェリ(CSRF)セッション・ハイジャックHTTPヘッダー・インジェクションメールヘッダー・インジェクションまとめPHP開発者必見!最低限知っておくべきセキュリティ対策まとめ実際にハッキングされる様子(XSS)ハッキングって非日常的でイメージがわきにくいと思います。そのためセキュリティー対策を安易に考え、怠るケースがあります。そこで、まずはどんな風にwebサイトが乗っ取られるか様子を見てみると、PHPセキュリティ対策の必要性を感じていただけると思います。クロスサイト・スクリプティング(XSS)クロスサイト・スクリプティング(XSS)の一例XSSは、PHPを使ったwebアプリケーションの中でも特に気を付けたい脆弱要素になります。情報が漏えいし、なりすましが行われるようになります。始まるもののみに制限したり、<script></script>要素を生成しないようにする方法があります。入力された場合、エスケープ処理されるように設定しておけば大丈夫です。関数を用いて対策が行われます。人でもデータベースを操作できるようになることです。管理者以外でもデータベースにアクセスできるようになると、個人情報や重要情報の漏洩、データベースの改ざん、不正なログイン、サーバーの乗っ取りなどが発生する危険があります。外部から受け取った値をエスケープせずにSQLを実行するために起きる現象で、ユーザーから入力される文字列に関しては、可能な限りプレースホルダーを用いて対策します。他には、データベースに関するエラーメッセージを表示しないように設定したり、データベースへのアクセス権限を見直すことが挙げられます。ディレクトリ・トラバーサルディレクトリ・トラバーサルのイメージ一般公開していないファイルにアクセスされ、閲覧・改ざん・削除されてしまう脆弱要素です。外部から受け取った値をエスケープなしにファイル名を指定するために起こる現象なので、まずは外部からのファイル名要求を避けるように設定します。関数を用いて、ファイル名からディレクトリ情報を取り除くように設定します。OSコマンド・インジェクションOSコマンド・インジェクションのイメージサーバー上で意図しないOSコマンドが実行されて、間違ったアプリケーション処理が実行されます。自分のwebサイトが、他サイトへの攻撃の踏み台にされる可能性もある重大な脆弱性になります。外部から受け取った値をコマンドラインのパラメータに渡さない方法が、推奨されています。コマンドラインのパラメータに渡す場合は、escapeshellarg関数を利用して文字列をサニタイジングしてあげる方法があります。クロスサイト・リクエストフォージェリ(CSRF)クロスサイト・リクエストフォージェリ(CSRF)のイメージログイン後にユーザーが行える投稿などの処理を、第三者によって勝手に行わせる危険があります。対策トークンを利用して正しいリクエストであるかどうかチェックする方法があります。@$_POST['token']){}[/php]として検証する方法があります。対策として知られています。似たような現象ですが内容が異なります。ブラウザ上の処理を悪用されます。セッション・ハイジャックセッション・ハイジャックのイメージセッション不備によって、ログイン後に利用者のみが利用できるサービスの悪用や個人情報の閲覧・改ざん・削除の危険があります。対策セッションIDをURLに含めないことログイン時に既存のセッション情報を破棄し、新しいセッションIDを生成するHTTPヘッダー・インジェクションHTTPヘッダー・インジェクションのイメージ偽ページの表示や悪意あるスクリプトが実行され、ユーザーに不快感および被害を与える危険があります。対策リクエスト・ボディの値を、レスポンスヘッダの値へ送らないリクエスト・ボディの値を、レスポンスヘッダの値へ送る場合はエスケープを実行するメールヘッダー・インジェクションメールヘッダー・インジェクションのイメージ問い合わせフォームなどのメール送信画面で、内容が改ざんされたり、迷惑メール・ウイルスメールの送信に悪用される危険があります。対策メールヘッダを固定値にして、メール本文のみを入力させる(外部からのパラメータをメールヘッダに含ませないようにする)入力値のすべての改行を削除するCodeCamp提供のWebマスターコース当メディアを運営しているCodeCampではWebマスターコースを現役エンジニアのマンツーマンレッスンという形で提供しています。実際にWebサービスをを開発するのでポートフォリオとしても使用できる無料レッスン受講後の申し込みで10,000円クーポンをプレゼントしています!ぜひお試しください。\Webサイト担当者としてのスキルが身に付く/CodeCampの無料体験はこちら▶︎無料体験レッスンの申し込みはスマフォで1分で完了!まとめいかがでしたでしょうか?これからPHPを使ってwebアプリを開発しようと思っている方にとってはネガティブ要因ばかりだったかもしれませんが、基本的にはパラメータをエスケープしたり、値の戻し方に注意すればwebサイトの脆弱性をクリアすることができます。ゲームで自分のセキュリティー力を試すことも面白いかもしれませんね。家事も仕事もプログラミングも。【2020年版】社会人でも通いやすいプログラミング教室5選|選び方の基準も解説プログラミング学習プログラミングスクール・サービス「エンジニアは女性のキャリアとして魅力的」モノづくり好き理系女子がWebエンジニアへ転職するまで受講生インタビュープログラミング未経験で介護師からエンジニアへ。家事も仕事もプログラミングも。受講生インタビュープログラミング習得後、フリーランスに転身。受講生インタビューフリーランス塾講師からエンジニアへ26才で転職。先生の支えがあって成長できました。学習ガイドtwitterLINE。