NotCompromisedPassword

Validates that the given password has not been compromised by checking that it is not included in any of the public data breaches tracked by haveibeenpwned.com.

haveibeenpwned.com によって追跡された公開データ侵害のいずれにも含まれていないことを確認することにより、指定されたパスワードが侵害されていないことを検証します。

Basic Usage

The following constraint ensures that the rawPassword property of the User class doesn't store a compromised password:

次の制約により、User クラスの rawPassword プロパティが侵害されたパスワードを保存しないことが保証されます。
  • Attributes
    属性
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
// src/Entity/User.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class User
{
    #[Assert\NotCompromisedPassword]
    protected $rawPassword;
}

In order to make the password validation, this constraint doesn't send the raw password value to the haveibeenpwned.com API. Instead, it follows a secure process known as k-anonymity password validation.

パスワードの検証を行うために、この制約は rawpassword 値を haveibeenpwned.com API に送信しません。代わりに、k-匿名パスワード検証として知られる安全なプロセスに従います。

In practice, the raw password is hashed using SHA-1 and only the first bytes of the hash are sent. Then, the haveibeenpwned.com API compares those bytes with the SHA-1 hashes of all leaked passwords and returns the list of hashes that start with those same bytes. That's how the constraint can check if the password has been compromised without fully disclosing it.

実際には、未加工のパスワードは SHA-1 を使用してハッシュされ、ハッシュの最初のバイトのみが送信されます。次に、haveibeenpwned.com API は、これらのバイトを漏洩したすべてのパスワードの SHA-1 ハッシュと比較し、同じバイトで始まるハッシュのリストを返します。これにより、パスワードを完全に開示することなく、パスワードが侵害されたかどうかを制約で確認できます。

For example, if the password is test, the entire SHA-1 hash is a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 but the validator only sends a94a8 to the haveibeenpwned.com API.

たとえば、パスワードが test の場合、SHA-1 ハッシュ全体は isa94a8fe5ccb19ba61c4c0873d391e987982fbbd3 ですが、バリデータは sa94a8 のみを haveibeenpwned.com API に送信します。

See also

こちらもご覧ください

When using this constraint inside a Symfony application, define the not_compromised_password option to avoid making HTTP requests in the dev and test environments.

Symfony アプリケーション内でこの制約を使用する場合は、not_compromised_pa​​ssword オプションを定義して、開発およびテスト環境で HTTP リクエストを作成しないようにします。

Available Options

groups

type: array | string

タイプ: 配列 |ストリング

It defines the validation group or groups of this constraint. Read more about validation groups.

この制約の検証グループを定義します。検証グループの詳細を参照してください。

message

type: string default: This password has been leaked in a data breach, it must not be used. Please use another password.

タイプ: 文字列 デフォルト: このパスワードはデータ侵害で漏えいしたため、使用してはなりません。別のパスワードを使用してください。

The default message supplied when the password has been compromised.

パスワードが侵害されたときに提供されるデフォルトのメッセージ。

payload

type: mixed default: null

タイプ: 混合 デフォルト: null

This option can be used to attach arbitrary domain-specific data to a constraint. The configured payload is not used by the Validator component, but its processing is completely up to you.

このオプションは、任意のドメイン固有のデータを制約に添付するために使用できます。構成されたペイロードは Validator コンポーネントによって使用されませんが、その処理は完全にユーザー次第です。

For example, you may want to use several error levels to present failed constraints differently in the front-end depending on the severity of the error.

たとえば、いくつかのエラー レベルを使用して、エラーの重大度に応じて、失敗した制約をフロントエンドで異なる方法で提示することができます。

skipOnError

type: boolean default: false

タイプ: ブール デフォルト: false

When the HTTP request made to the haveibeenpwned.com API fails for any reason, an exception is thrown (no validation error is displayed). Set this option to true to not throw the exception and consider the password valid.

haveibeenpwned.com API に対して行われた HTTP 要求が何らかの理由で失敗すると、例外がスローされます (検証エラーは表示されません)。このオプションを true に設定すると、例外がスローされず、パスワードが有効であると見なされます。

threshold

type: integer default: 1

タイプ: 整数 デフォルト: 1

This value defines the number of times a password should have been leaked publicly to consider it compromised. Think carefully before setting this option to a higher value because it could decrease the security of your application.

この値は、パスワードが侵害されたと見なすために、パスワードが公に漏えいした回数を定義します。アプリケーションのセキュリティが低下する可能性があるため、このオプションをより高い値に設定する前に慎重に検討してください。