2017-10-17 13 views
1

asp.net c#webフォームアプリケーションの非常に厳しい要件を満たすためにパスワード検証ルールを書き直しました。ASP.NETパスワード検証には2セットの文字が含まれています

私はこれの大部分から正規表現を使用しています(最小文字、許可文字など)。

解決策を見つけることに問題があるという要件の1つは次のとおりです。 4つの文字クラスのうち2つの文字を含む必要があります。

この場合、許可されるクラスは大文字、小文字、数字、および特殊(US ASCII)です。

誰かがこれを覚えておいていただければ幸いです。 おかげ

+1

なぜこのような弱いパスワードですか?これは「非常に厳しい要求」ではなく、実際には非常に弱いと考えられています。人は*大きな*パスワードを人為的な制限なく使用して、短くて弱い*パスワードを使用させなければなりません。なぜASCII文字のみですか?なぜあなたは私にタイプを教えてもらえませんか? –

+6

実際に、要件は弱いより悪いです。これらは、米国のNIST、英国のNCSC、Microsoftの[パスワードガイダンス](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/06/Microsoft_Password_Guidance-1)によるガイダンスに違反しています。 pdf)。あなたが侵害された場合、意図的に脆弱なパスワードを強制することに二重責任を負うことになります。現在のガイダンスで[Troy Huntの記事](https://www.troyhunt.com/passwords-evolved-authentication-guidance-for-the-modern-era/)を確認してください。 –

+0

私はそれが単一の正規表現内のすべてを照合することは可能ではないと思います。しかし、最も簡単な方法は[contains](https://msdn.microsoft.com/en-us/library/dy85x1sa(v = vs.110).aspx)メソッドを使用して各制限を確認することです。しかし、@PanagiotisKanavosの記事を見て後で後悔するかもしれないことを前に投稿してください... –

答えて

1

すべてが有効な懸念を表明コメンターが、私はちょうど「4つの要素のうちの少なくとも2」をマッチングさせるため、この方法を共有したい:

(?:.*?(?:a(?!.*a)|b(?!.*b)|c(?!.*c)|d(?!.*d))){2} 

「D」への手紙「A」この質問の適切な文字クラスで置き換えることができますが、より一般的には "少なくともYの重複しない部分式"に一致するように拡張することもできます。

関連する問題