コピー2019.04.07PHPを使ってWebサービスを開発していた時、いわゆるMassAssignment脆弱性に該当するセキュリティホールを発見してしまいました。初心者エンジニアはついつい飛ばしてしまいがちなセキュリティですが、その重要性を改めて認識しました。サイト:MassAssignment脆弱性とはそもそもMassAssignment脆弱性とは、悪意を持ったリクエストによって更新されるべきではないカラムが更新されてしまうことです。危険性がよくわからないかと思うので、具体的に実際起こった事例を見ていきましょう。作っていたWebサービスは、いわゆるフリマ系サービスメルカリのようなイメージで、一般のユーザーにはモバイルアプリのインターフェースを提供。バックエンド側はPHPで構成されており、モバイルアプリにAPIを提供すると共に管理ユーザーには管理画面のインターフェースも提供。今回の事例はバックエンドのPHPプログラムの方。管理画面からユーザーが登録した情報(住所や出品の取り消しなど)を更新したい。コード内容リクエストで渡ってきた情報を全て取得し、エンティティを作り直した上でパッチを当てるような形で更新する。問題点リクエストに入っている情報を全て取得してエンティティを作り直してしまうため、idやpriceなどのカラムを書き換えたリクエストを送ることで、なりすましや金額の改竄が可能になってしまう(フロントエンド(モバイルアプリ側)ではバリデーションがかかっていたものの、直接APIを叩くことなど容易なので危険)解決方法ControllerもしくはModelにおいてなんらかの条件を指定して、変更できるフィールドを制限するリクエストから取得する情報を制限する普通にフレームワークを使っていただけではこの脆弱性を無意識下に回避することはできないので、特に決済が絡むようなサービスの開発においては常日頃から頭に入れておくといいと思います。弊社ではPHP開発の際のフレームワークとしてCakePHP3を採用しております。CakePHP3は非常に柔軟でありながらセキュアな開発を行うことが可能ですが、インターネット上にあるサンプルコードなどを容易に参考にすると脆弱なアプリケーションとなることがあります。コピーut3をフォローするut3iOSも少々できるWebエンジニアut3をフォローするut3Utarog関連記事Programming【Python】enumerate関数の使い方!アンパックとの組み合わせが便利pythonのenumerate関数って便利ですね。引数にシーケンスを指定すると、カウント(≒インデックス)と要素をまとめたタプルを返してくれます。普通にQiitaとかの解説記事を読んでいるだけではなかなか理解しにくいですが、これらの大元の原理となっているARCについて知っておけばするする頭に...Excel【Excel】エクセルの外部参照をうまく使い、複数ファイルを1つにまとめる業務でエクセルをいじる機会があり、複数のファイルを1つにまとめる、という作業の効率化のためにいい感じの式を作りました。プログラミング、というほどでもないですがいい機会なのでまとめておきます。2016年1月1日〜2018年...Programming【Python】ファイルの読み込み方まとめた【read,readline,readlines】Pythonにはtxtファイルの読み込み方が3種類あります。違いがよくわからず頭がこんがらがってきたので、一旦みやすくまとめてみます。3つのメソッドの違...PHPMAMPでCakePHP3のローカル開発環境をサクッと構築!【PHP】CakePHP3を使った業務を行うことになり、さあ実行環境をどう作ろうかと考えていました。DockerかVagrantを使おうかなどとも考えていましたが、よく考えたら本番環境はLAMPだったのでMAMPを使ってささっと済ませることにしま...AWSCloud9でPython3環境構築入門!【AWS】PyQさんのおかげもあってPythonの文法や、簡単なWebアプリの開発周りについてはなんとなくわかってきました。なんでそろそろポートフォリオ作りたいなと思い、まずPyQから離れてプログラムを書き始めようと思ったわけです。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。【Swift】frameとboundsの違いは?UIViewにどう影響するのか【Swift】オプショナル型とは?4種類のアンラップ方法と共に解説!【Angular】html文書をエスケープしないでそのままtemplateに表示するアーカイブ2019年9月2019年5月2019年4月2019年3月2019年2月カテゴリーAngularAWSCSSDockerExcelJavaScriptMySQLPHPProgrammingPythonSwiftタイトルとURLをコピーしました。