概要

去年はスポンサーとして参加させていただきましたが、今年は一般参加者として参加させていただきました。 今回は皆さんの発表をちゃんと聞けたので、自分用メモ要素が多いですが、かんたんにまとめてみました。

MVCにおける「モデル」とはなにか

概念的な登壇でした。

ドメインモデルとはなにか、メンタルモデル、パーソナルコンピュータの概要を説明頂いた上で、MVCがどういったものであるべきかという話をされておりました。

全部は理解はできなかったのですが、いくつか面白い表現があったので、紹介させてもらいます。

  • 複写伝票の話と食券の話
    • 食後支払いの場合、ホールの人は「客とオーダーが満たされているか」が関心事であり、キッチンの人にとっては「料理をどの順番で提供しなければならないかが関心事」
    • 食券の場合は、事前決済のため、客とオーダーの紐付けは不要であり、複写伝票で切り出したものだけが提供されればいい
    • →ドメイン(=食オーダーシステム)とドメインモデル(=駆動の解決方法)は異なる
    • ドメイン: 問題の対象
    • ドメインモデル: 解決法の対象
  • メンタルモデルとは「ああなったらこうなる」という想起のもの
    • 直感的な結びつきのないUIだとユーザは混乱する
  • コンピュータに使われるのか、コンピュータを使うのかという観点
  • MVCとは、ドメインモデルとメンタルモデルのギャップを改善するためのツールとモデリング言語

徳丸先生による徳丸試験例題解説とPHP7初級書籍贈呈キャンペーンと市場動向

各種試験に関する紹介と、徳丸さんからの、試験例題の紹介をされておりました。

  • CookieのHttpOnlyの効果
    • JavaScriptからCookieを読めないようにする
  • ディレクトリトラバーサルの対策
    • basenameのパスを除外する
  • X-Frame-Optionsと関係のある脆弱性
    • クリックジャッキング

クリックジャッキングに関しては、 こちら でも紹介してます。最新のブラウザだとCSPでの制御のほうがいいと思います

思想と理想の果てに

  • ヘキサゴナルアーキテクチャ
    • プラグアンドポート
    • つなぐところが一緒なら、別のものを付け替えることが可能
    • いろんなUIをつないだり、保存先を色々指定できたりする
      • ビジネスロジックをUIとかに点在させない
  • 大事な概念はSOLID原則
    • 特にD(依存性逆転の法則)が大事
    • DIに関しては こちらでも紹介してます
  • クリーンアーキテクチャーとヘキサゴナルアーキテクチャとの違い。
    • クリーンアーキテクチャーは具体的な実装方法
  • 大事なのは依存性の方向
    • 内側は外側に依存しない
  • メリット
    • 入力や出力をかんたんに差し替えられる
    • ロジックを変える必要がない
  • 代償
    • Presenterという概念がHTTPの概念とマッチしない
    • OutputPortを使わない形
    • めんどくさい
    • めんどくさいならフレームワークつくればいいよね!
  • フレームワークの思想
    • めんどいのをスキャフォールディングすればいい
  • 10,15年立つとフレームワーク変わることがあるので、ちゃんと設計しておいたほうがいい

依存性が低くなるようなライブラリを自作する事によって、結局それに依存するという現象が発生してしまうのではないかという懸念と、5,10年経ったらそもそもの言語の変更も発生しうると考えると、どれほどまでに抽象度をあげて「きれいに作るべきか」というのは答えない気もしているし、プロダクトの立ち上がり段階ではスピードを求められるので、「売れる自信があるなら」ちゃんと作るって感じになるのかなぁと思いました。

PHPUnit: Past, Present and Future

  • 最初に書いたアセンブリがテストできないというところに課題を感じていた
  • PHPを作ったモチベーションは、CVとか訪問ログを取りたいため
  • PHP2はPHP/FIと呼ばれた。Formを使えるように
    • 当時は1ラインごとに実行していたためめちゃくちゃ遅かった。
  • 1998にPHP開発スタート
  • 1999にPEARが出たが、パッケージ管理ツールがなかったので、色々と問題が出てきた。
  • 2000にPHP4が出た。コントリビュート開始
    • 最初はWindowsのバグ解消をしていた
    • CppUnitが出てきた、初めてのJUnitクローンユニットテストツール
    • PHPでテスト書くのは非常に大変だった
    • PHPUnit作り始めた
    • ただ、すでに作っている人がいて、sourceforgeではユーザごとにディレクトリが切られていないので、ホストできなかった。
  • PHPUnit by Sebastian BergmannはJUnitを置換しただけなのだけど、それを消すのが遅くなってしまい、結局消えてない状況になってる。ごめん
  • PHP4までは例外処理がなかったため、PHPUnitの実装が大変だったが、5になって楽になった
  • PHP5.3はPHP6 - Unicode. Unicode入れるとめっちゃ遅くなるし、複雑だから抜いた
  • GithubにPHPUnitを移行してから、コントリビュートが増えた。今まではメール送る感じだったので
  • 2011にcomposerができてから、PEAR使うことはなくなった
  • composer 1.0が出たときに金ピカフロッピーが作られた
  • 2016にPHPUnit6出したけど、Namespace変えてごめん
  • PHP7.4は最後のPHP7。来年にはPHP8でるかも

PHPリリース20周年の歴史を知れる、エモい発表でした

オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法

様々な試練

  • 最大21%の還元率でキャンペーン
    • 景表法の違反
  • ログインIDを発番したのに、不正ログインが発生した
    • パスワードスプレー攻撃された
    • 多数の端末(ルーターやカメラ)からありがちなパスワードでログインを施行する
    • チョロチョロログインするので、発覚しづらい
      • 二段階認証をONにする
      • ユーザIDを連番にしない
      • 弱いパスワードを使わせない
  • 2段階認証を課しても不正ログインが止まらない
    • 実装上の不備
    • 二段階認証時に、userIdだけで承認していたために、ザル
    • セッション変数に、認証状態を追加した
  • ヘルプデスクが狙われる
    • パスワードリセットが悪用
    • ユーザIDとパスワードをヘルプデスクで教えちゃった
    • 基本的にシステム上のみでパスワードリセットを行う(管理画面も含め)
  • 端末側にパスワードが平文で保存されていた
    • keychainに保存させる
  • スマホアプリアップデートでリジェクト
    • iOSアプリでAndroidという文言のついたお知らせがあった
  • OSインジェクション
    • エスケープ処理が漏れていた。
    • PHP7.4にて、proc_openに機能追加がされている
    • コマンドを配列で渡してあげると勝手にエスケープしてくれる
  • WAF構築したらかえって脆弱になった
    • リバースプロキシがオープンだった
    • EC2のバージョン上げると、SSRF攻撃を防げる

防ぐ方法はスライドを参照

おすすめ本

起業の法務

NIST SP800

  • 文字列の複雑性は課すべきではない
    • その代わり脆弱なパスワードは弾く(辞書)
  • 秘密の質問は禁止
  • パスワードの定期的変更の強制の禁止

感想

防ぐ方法はちゃんと認識した上で、どれくらいやるかというのを考えておくべきだなと再認識。 ベンダー発注の概念が根本として存在していたので、大企業向けな要素は多いかなという印象。とはいえ自社で作るとしても考えるべきポイントは一緒なはずなので、無関係ではない OWASPは抽象的なのでIPAの資料が使えることもあるようなので、資料は色々探したほうがいいかもしれない。

おわりに

本日は早めに帰る必要があったため、LTまでは残れませんでした。 ただ、ランチのセッション含め、フルフルの時間、発表を聞く時間に当てることができたため、非常に満足度が高かったです。 それぞれ発表は素晴らしかったですが、特にSebastianさんの発表はPHP20周年にふさわしく、来てよかったなと思います。 スポンサーの皆さんやスタッフの皆さんありがとうございました!