PR TIMESのパスワードの安全性を高める

目次

概要

こんにちは、開発本部のグエン・ヴィエット・タイです。

このブログではPR TIMESのセキュリティーに関するパスワードの文字数・文字種制限を紹介します。

利用企業数は2021年5月に5万4000社を突破、国内上場企業46%超に利用いただいています。

PR TIMESのような多くの方に使ってもらっているシステムではセキュリティを高めることが非常に重要です。そのため、PR TIMESの開発本部のエンジニアがシステムの改善に取り組んでおり、そのうちの1つがユーザーパスワードの改善です。対象ユーザーは企業ユーザー、メディアユーザーと個人ユーザーです。以前、ユーザーのパスワードは英数字しか使用できませんでした。それに加えて、文字数の長さに制限がありました。この点から、パスワードの複雑さはそれほど高くなく、セキュリティ上好ましくないことがわかります。

アプローチ

アプローチは、ユーザーがより強力なパスワードを生成できるように、文字数と文字種制限を辞めるということです。

そもそもPHPドキュメントによると、新しくてより強力なアルゴリズムが PHP に追加されれば、指定したときの結果の長さは、変わる可能性があります。 したがって、結果をデータベースに格納するときにはカラム幅を 60 文字以上にできるようなカラムを使うことをお勧めします(255 文字くらいが適切でしょう)。

無停止で切り替えるためにはカラム変更が必要でした。文字数を増やすにあたって、保存するカラムの変更が必要になったため、PHPの標準に合わせてpassword_hashやらpassword_verifyなどの関数を使用するように変更しました。具体的に新しいパスワードのカラムを作成してデータベース上に255文字保存できるようにしました。

次に、より安全にPR TIMESを利用できるようになることにかけては長く複雑なパスワードを設定することが必要です。

そのために、ユーザーパスワードの変更内容は下記の通りです。

  • 文字数:最大50文字までの拡張制限。具体的にユーザーは50文字までの長さがあるパスワードが作成できます。
  • 文字種:文字種制限を削除します。具体的にユーザーのパスワードには、文字や数字に加えて、「!#$ @」など特別な記号が含まれている場合があります。ユーザーが使用できる文字は、ASCIIコードテーブルの文字です(印字可能な文字 – ユーザーがキーボードから入力可能)、範囲は[0x20-0x7E]です。

参考リンク : https://en.wikipedia.org/wiki/ASCII

スクリーンショット

まとめ

PR TIMESのような多くの方に使ってもらっているシステムでは初めて実装しましたので、データベースとソースコードに大きな変更するとき、ちょっと大変でした。しかし、他のエンジニアからサポートしてもらいましたので解決できました。さらに、PR TIMESのシステムが理解できて、新しい知識を学びました。

この記事を書いた人

目次
閉じる