YYPHP#97「掲示板を作るときに気をつけたほうがいいセキュリティ 」「PHPセキュリティのベストプラクティス」「掲示板のいいね機能の作り方」「MVCのServiceについて聞きたい 」「大規模インフラで向いているPHPの立ち位置とは」「Laravel向けに、AWSのセキュリティガチガチの構築スクリプトを作った話」

これは2019年8月23日に開催したPHPerイベント[YYPHP#97]のイベントレポートです。

[YYPHP#97]: https://yyphp.connpass.com/event/132261/
[YYPHP]: https://yyphp.connpass.com/

[YYPHP]は一言で「PHPerの部室」です。PHPについて、雑に、ゆるく、ワイワイ話し合う集いです。毎回お題を決めずに雑談を出発点にいろいろなことを突発的にやります。集まった人でコードリーディングをすることもあれば、一緒に開発ツールを触ってみたり、フレームワークについての情報交換をすることもあります。開催はほぼ**毎週**、高田馬場にて。

__今回の配信動画__

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">YYPHP97回の生配信を開始しました！ <a href="https://t.co/C9c5ALP2vu">https://t.co/C9c5ALP2vu</a></p>&mdash; suin❄️TypeScriptが好き (@suin) <a href="https://twitter.com/suin/status/1164848647219007488?ref_src=twsrc%5Etfw">August 23, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

__過去回の配信動画__

https://www.youtube.com/playlist?list=PLpOeTEye3Bg6PodrLHHC72jWMJYZz8VbG

__前回__ → [[YYPHP#96「フリーランスの仕事ってどう？」「ゼロから始めるPHPの勉強のしかた」 「GitHubにアップすべきでないファイルって何？」「コードレビューで何を見てあげたらいい？」「PHPerが楽できるサーバレスを教えて！」 - Qiita](https://qiita.com/suin/items/5b6207d01905f7bfd634)

## 雑談

### 掲示板を作るときに気をつけたほうがいいセキュリティ (はらだ)

掲示板を作っている。
XSS、クリックジャッキングを調べてみたが理解できなかった。
どういった対策が必要になってくるのか？

・・・

* バニラPHPを書いてたので、セキュリティは気にしてるほう。
* 「徳丸本」をまず読むべし
    * [体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践 | 徳丸 浩 |本 | 通販 | Amazon]( https://www.amazon.co.jp/dp/4797393165/ref=cm_sw_em_r_mt_dp_U_ii8xDbYE88FJ5)
    * [安全なウェブサイトの作り方：IPA 独立行政法人 情報処理推進機構](https://www.ipa.go.jp/security/vuln/websecurity.html)

* フレームワークを使っていると、典型的なセキュリティ対策はされる。
    * フレームワークを使っているとブルートフォース攻撃などは自前で対応していた。
* 掲示板でやること
    * XSS
        * `<script>`タグを本文に埋め込まれないようにする。
            * htmlspecialchars()
        * CSP: Content Security Policy → XSSのリスク軽減する
    * SQLインジェクション
        * PDO: プリペアドステートメントを使うとSQLインジェクションが起きにくい
        * [php - Are PDO prepared statements sufficient to prevent SQL injection? - Stack Overflow](https://stackoverflow.com/questions/134099/are-pdo-prepared-statements-sufficient-to-prevent-sql-injection)
    * CSRF
    * 認証
        * パスワードの暗号化
            * password_hash()
        * パスワードリセット機能
    * アクセスログ
    * DDoS攻撃
        * CloudFlare(無料)を使おう
        * AWS Shield …… マネージド型のDDoS保護

### PHPセキュリティのベストプラクティス (むらかみ)

* ベテラン勢がどんな対策をしているか。

...

* PHPを使ってない人からPHPのセキュリティがディスられているのはなぜか？
    * デフォルトで守られてないから？
    * 使っている人が多いから？
    * WordPressの脆弱性のせい？
* セキュリティもちゃんとしてて、開発速度も出るのは？
    * Laravelじゃない？
* [安全なウェブサイトの作り方：IPA 独立行政法人 情報処理推進機構](https://www.ipa.go.jp/security/vuln/websecurity.html)
    * セキュリティ実装 チェックリスト（Excel形式、18K）を見るべし
* [CVE - Common Vulnerabilities and Exposures (CVE)](https://cve.mitre.org/)
    * PHPやMySQLの脆弱性情報をチェックする
* [Japan Vulnerability Notes（JVN） | ScanNetSecurity[国内最大級のサイバーセキュリティ専門ポータルサイト]](https://scan.netsecurity.ne.jp/special/68/recent/Japan+Vulnerability+Notes%EF%BC%88JVN%EF%BC%89)
* [Security Newsletter](https://securitynewsletter.co/)

...

* 今CMSを使うならこれがいいってのある？
    * [Mezzanine - The Best Django CMS](http://mezzanine.jupo.org/)
    * ヘッドレスCMS？
        * Nettrify + Contentful + Nuxt
        * [StaticGen | Top Open Source Static Site Generators](https://www.staticgen.com/)
            * 動的なサーバがいらないのが売り
        * Netrifyは基本無料だが、Basic認証とかは制限ある
    * Ghost ブログ
    * MovableTypeは最近使われてない気がする
        * WPに淘汰されたイメージ
* Qiitaとかブログサービスがあるなか自前でCMSをインストールしてやる意味は？
    * セルフブランディング
    * こだわりとか？
    * 広告で
        * 収益化を狙ったブロガーはnote.muに移ってる
    * 技術的好奇心で

### 掲示板のいいね機能の作り方 (はらだ)

いいね機能の付け方を調べたが、難しいと感じたので。
Ajax通信を使ってやるというのが難しい。

...

* AjaxだけならjQuery使ったら簡単そう。
* いいねが飛んでくる
    * [potato4dさんはTwitterを使っています: 「いいねシステムを運営メンバーで作ったのはいいんだけど、みんな連打して暴走しすぎてクソ終わっててわらうwww #uit #uit_7 https://t.co/H5jbBJLg86」 / Twitter](https://twitter.com/potato4d/status/1153997798217404417?s=20)
* PHPだけでいいね機能を実装することもできる。
    * `<form>`タグで画面遷移して、リダイレクトで元記事に戻ってくるという方法もある。
    * AjaxでやるとJavaScriptを使うことになる。
        * jQuery
        * 今やるなら
            * LaravelならVueが入ってるから、Vue.js
            * Vanilla JSでの実装も簡単
            * Web Componentsでいいねボタンが配布されているかも？

### MVCのServiceについて聞きたい (かきうち)

MVCとServiceって別の話なの？
Controllerにどこまで書いて、どこからServiceに書くべきか？

...

* Serviceって名前、めっちゃ危ういですね。
    * 世の中、すべてのことがサービスになっちゃうよね。
* なんの処理が詰まっているかわかりにくい。
* Serviceが生まれた背景
    * RailsがMVCだけじゃ収まらないから、共通のコードをServiceに追い出した。
* やりすぎないMVC+みたいな感じで、共通化が必要になってからサービスを作っていく感じ。

### 大規模インフラで向いているPHPの立ち位置とは (かひろ)

マイクロサービスの話を聞くと、Goが多いイメージ。
PHPアプリが発展してってマイクロサービスになったとき、PHPは残り続けるのか？

...

* 言語によって向き不向きがある。
* 大規模かどうかあんまり関係ないと思う。
* 向いてない
    * 大量のコネクションは裁けないので、それ以外は向いていると思う。
    * バッチ処理
    * 並行処理
    * Office関係のファイル
* 向いている
    * ブートストラップ
    * 知見の多さ、研究する必要のなさ

### Laravel向けに、AWSのセキュリティガチガチの構築スクリプトを作った話 (れおりん)

* Kubernatesを選ばなかった
    * 熟練者じゃないと保守できない、オーバーキル感がすごい
* Nomadとは？
    * Kubernatesの簡易版的な立ち位置
    * コンテナのスケジューリングだけに限定したミドルウェア
* セキュリティ
    * ElasticStackで異常検知
    * Subnetをしっかり切っている
        * 行ける方向に強い制約がある
    * Laravelが入ったコンテナ自体もセキュリティのスキャナをかける
    * 余計なコマンドが入ってないコンテナ
* 可用性
    * Availability Zoneを2つ
    * コンテナはNomadが復旧してくれる
* ECSじゃなくてNomadなのは？
    * 柔軟性
    * ECSだとある程度制限がかかる
        * 起動時間とか
    * Windows系のプログラムも対応できる
* Nomadはマスターはいない。
    * リーダー選定という方式
* マスタースレーブもいいところはある
    * 自律的に復旧したり、リーダーが変わったりとかはできない
* 他にも選択肢はあった？
    * Docker Swarm
        * 手っ取り早いが、Windowsのコンテナとかになってくると対応できない
        * 大規模では安定しないことがあった
* SSH？
    * VPNでもいいかなと思ってる

### Nuxt.jsのテストフレームワークについて (すとまと)

Jest・Storybook

・・・

* NuxtはStorybookで動かすの大変
    * StorybookのVueチームのモチベーションが低いのが心配
    * StorybookはReact製
* 基本的には jest + vue-test-util でやるのがいい。
* 運用時のテスト
    * [Datadogでブラウザテスト機能がリリースされました！ – サーバーワークスエンジニアブログ](http://blog.serverworks.co.jp/tech/2019/04/17/datadog-browser/)



# YYPHPは毎週やってます

PHPについてワイワイ話したい方は、[YYPHPのイベント情報](https://yyphp.connpass.com/)をチェックしてみて下さい。

以上、YYPHPのレポートでした。次回もワイワイやっていきたいと思います！ では、また来週！