内容としてはだいたいこんな感じになる。弱い乱数.選択暗号文攻撃.サイドチャネル情報漏洩.世の中には悪い人たちがいて、あなたの書いたウェブアプリケーションもきっと狙われている。必要な対策をして、ウェブアプリケーションのセキュリティを固めておくことが大切だ。人たちが、既知のセキュリティ問題とその対策をまとめてくれている。セキュリティが気になる開発者は必読だ。ウェブアプリケーションセキュリティに関してPHP向けに書かれたよいドキュメントだ。アプリケーションを書くことになる。ユーザーのログイン時にそれを使って認証するというやつだ。混同されることが多い。パスワードのハッシュは不可逆な操作で、ユーザーのパスワードに対して一方通行で行う。できあがる結果は固定長の文字列で、元には戻せない。元の文字列が何だったかはわからないってことだ。万一第三者に不正アクセスされた場合に、すべてのユーザーアカウントが乗っ取られてしまう。(鍵さえ手元にあればね)。暗号化そのものは使う場面を選べば便利なものだけど、ことパスワードの保存に関してはうまい手段ではない。ランダムな文字列をパスワードに付けてからハッシュするってこと。しておけば、辞書攻撃から守れるし「レインボーテーブル(ありがちなパスワードとそのハッシュをまとめた変換テーブル)」による攻撃も防げる。ハッシュとソルトは欠かせない。パスワード自体も決して強力なものだとは言えないから。2018年6月時点でパスワードのハッシュに使ってもかまわないアルゴリズムはこんな感じ。このあたりも使いやすい。5.5からは、新たにpassword_hash()関数が使えるようになった。現時点では、この関数はBCryptを使っている。これは、現在のPHPがサポートしているアルゴリズムの中では最強のものだ。必要に応じて、将来はもっと強力なアルゴリズムをサポートするように更新されるだろう。5.5より前のバージョンでも使えるようにするため、password_compatライブラリも作られた。5.3.7以降で使える。この例では、文字列をハッシュした後でそのハッシュを新たな文字列と比較している。二つの文字列は違っている(‘secret-password’と’bad-password’)ので、このログインは失敗する。コードに外部から渡される入力は、絶対に信用してはいけない。外部からの入力は、常に検証してから使うようにしよう。外部からの入力にはいろいろな種類がある。リクエストのボディもそうだ。外部からの入力といっても、ユーザーがフォームで入力したものばかりとは限らないことに注意。クッキーのデータ、サードパーティのウェブサービスからのデータ。これらはみんな外部からの入力となる。外部からのデータをいったん保存して、何かと組み合わせて後で使うとしよう。それでも、そのデータが外部からの入力であるという事実は変わらない。「適切にフィルタリングできてる?」「信頼できる?」と確認しよう。データのフィルタリング方法は、その利用目的によって異なる。