弊社ではPHP開発の際のフレームワークとしてCakePHP3を採用しております。CakePHP3は非常に柔軟でありながらセキュアな開発を行うことが可能ですが、インターネット上にあるサンプルコードなどを容易に参考にすると脆弱なアプリケーションとなることがあります。今回はよく陥りがちでありながら影響の大きい「想定しないフィールドの変更」を紹介したいと思います。以下のようなテーブル構造のデータ(foods)があり、このデータを変更するフォームを作るとします。id,name,owner_idowner_idはこのデータの所有権を表しています。データ変更フォームではこの中でnameのみを変更したいとします。$data);$this->save($entity);上記のコードはPOSTデータを既存データとマージし、DBに保存するというシンプルなコードです。問題のなさそうなコードですが、POSTデータというのはHTMLの構造に関係なく常に改竄される可能性があると認識しなくてはいけません。Chromeのデベロッパーツールなどを利用すれば簡単にPOSTデータを変更することができます。以下のようなフォームに改竄することができます。?></td></tr></table>これをそのままPOSTされれば自由にfoodの所有権を変更されてしまいます。$data);の部分には変更できるデータを制限する仕組みは一切ないことになります。(モデル側のvalidateなどを考慮しない場合)対処方法1:変更できるフィールドを制限する以下のように変更可能なフィールド名を明示的に指定する方法です。//変更可能なフィールド名の配列を渡す]);$this->save($entity);これによってfieldList以外の項目は無視されます。対処方法2:エンティティモデルで制限する以下のようにモデルの_accessibleに一括代入で変更可能かを指定する方法です。一括代入(cakebook)対処方法3:フォーム改ざん防止機能を利用するSecurityComponentを利用し、ユーザーがフォームを改竄をすることを防止することができます。フォーム改ざん防止(cakebook)以下のような制限をかけることができます。(マニュアルより抜粋)フォームに新規フィールドを追加することはできません。フォームからフィールドを削除することはできません。フィールドの値を更新することはできません。このようにフレームワークを利用する場合であっても公式マニュアル等をしっかりと確認しないと重大なセキュリティホールを作ってしまう可能性があります。CakePHPの初学者の方はCakebookのセキュリティ部分を読むことをおすすめします。エイミーではシステムの機能や最新技術だけでなくセキュリティ対策の研究にも力を入れております。今後もお客さまが安心して利用できるシステムを開発できるよう努力してまいります。S3で大量のファイルを低コストで運用するシステム運用時のサーバー選定ではストレージ容量の予測が非常に重要でした。システムサーバーとしてのQNAP業務システムのWEBシステム化を行った際、大きな検討事項はサーバーの選定です。技術情報UX/UIさらに表示ご相談・ご提案は無料です。Reservedクイックコンタクト閉じるお問い合わせありがとうございました。通常1営業日以内にご記載頂いたメールアドレス宛にご連絡させていただきます。以下よりお問い合わせいただけます。通常1営業日以内にご返信いたします。営業メールなどを送付することはございませんのでお気軽にご質問ください。お名前{{errors.name}}メールアドレス{{errors.mail}}お問い合わせ内容{{errors.body}}送信ご記載頂いた内容はお問い合わせのご返信のみに使用いたします。