8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

nginx+php-fpm+CakePHP2.xでのセキュリテイ対策

Last updated at Posted at 2016-02-03

それぞれ実施するかはサイトの特性にあわせるとして、PHPでサイト作成する場合のセキュリテイ対策の備忘。
CakePHPについては、2.xの情報なのでご注意ください。

CORS(Cross-Origin Resource Sharing)対策

  • 対策方法:Access-Control-Allow-Originヘッダの出力
  • 設定方法:nginxのconfに記述。制限できるなら対応ドメインを指定。ドメインの複数指定は単純に2つ記述ではないので注意。

nginxの該当ドメインの設定ファイルで
add_header Access-Control-Allow-Origin http://hogehoge.com;

意図しないサイトからiframeのソースとして使われないための対策

  • 対策方法: X-Frame-Optionsヘッダの出力
  • 設定方法:nginxのconfに記述。同サイトは許可であれば、SAMEORIGIN。

nginxの該当ドメインの設定ファイルで
add_header X-Frame-Options SAMEORIGIN;

CSRF(Cross-Site Request Forgery)対策

  • 対策方法:CakePHPのSecurityコンポーネント利用が便利
  • 設定方法:フォームを利用するコントローラでSecurityコンポーネントを利用設定。ビューではフォームをFormヘルパのcreate/endメソッドで開始/終了する

コントローラ
class HogeController extends AppController {
:
public $components = array('Security');
:
}

ビュー

Form->create('hoge', array('type' => 'post')); ?>

:

Form->end(); ?>

上記後、formタグのすぐ後にdata[_Token][key]が自動挿入されていれば成功。

SQLインジェクション

  • 対策方法:CakePHPのModelを利用する際に、find/save等のデータアクセスメソッドを利用する。色々な理由でqueryメソッドを利用する場合は、個別でエスケープする。CakePHP2.xまではSanitizeクラスが使えるが、3.xでは削除予定らしいので注意。

クロスサイトスクリプティング(cross site scripting)

  • 対策方法:基本的にデータを出力する際はh()で括る。フォームの場合は、$this->Form->inputで項目を出力する。

Cookieのsecure 属性

  • 対策方法:サーバ全体がHTTPSというポリシーであれば、php.iniのsession.cookie_secureを1に。個々のアプリケーションで設定する場合は、CakePHPのコントローラのbeforeFilterで、$this->Cookie->secure = trueを指定。
  • 備考:Apacheの場合は、.htaccessでも可能。ロードバランサー配下の場合、CakePHPでHTTPSプロトコルが判別できない場合がある。この場合はphp.iniで設定すると対応できることもある。
8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?