web-dev-qa-db-ja.com

なぜ現代のウェブサイトはまだ古いユーザー名/パスワードの要件を主張しているのですか?

私は昨夜ウェブサイトにサインアップしていましたが、ユーザー名に特定の文字(スペースを含む)を含めることはできず、パスワードも含めることができないという事実にもう一度お迎えしました。

これには歴史的な理由がありますか、それとも特別な理由はありませんか?フレーズであるパスワードは、単純な文字/数字の置換よりもエントロピーが高く、解読が困難です(下の画像を参照)。

enter image description here

そして、ユーザー名の前にスペースはありませんか?本当に?それはただのひもです。 SQLインジェクション攻撃に対する歴史的な懸念は理解できましたが、現在のWebサイトは成功しています(希望します!)

11
Moo-Juice

特に理由はありません。 「パスワードは8文字以下にする必要があります」のように任意です。何をしているのかわからないのは、プログラマーや製品の所有者です。

これにはいくつかのレガシーな理由があります。これは、認証システムが、歴史的な理由(ある種の古いcrypt()の実装では、8文字目以降のすべてのパスワード入力が ここに記載 )としてスキップされますが、(Web)アプリケーションの大部分がカスタム認証システムの上に構築されており、資格情報がリレーショナルデータベースに保存されているため、現在、これは問題になりません。

13
CodeCaster

基本的に、SQLインジェクションが依然として非常に一般的であるのと同じ理由-より良いシステムの設計と構築を知らない人々。

SQLインジェクションの場合と同様に、SQLインジェクションの単純なバグやレガシーツールの場合、他のシステムとのユーザー名/パスワードの互換性の場合には、例外的な例外があります。しかし、99.99%の時間は単に「よくわからなかった」だけです。

OpenId(googleまたはfacebookログイン)をプッシュする理由の1つは、シンプルで簡単に理解できるシステムを誰もが知っているデフォルトにすることです。

2
jmoreno

ディスクスペースの歴史的な理由(はい、ディスクスペースが重要であった時代がありました!)に加えて、常にエンコード/エスケープの問題があります。特殊文字やスペースに直面するときは、常にそれらが適切にエスケープされ(インジェクション攻撃を防ぐため)、エンコードされていることを確認する必要があります(実際にパスワードが実際に機能するようにするため)。現在、これに対するツールのサポートは良好です。ベストプラクティスは既知であり、広く普及しています。昔は、すべての特殊文字を除外することで、生活が非常に簡単になりました。 「簡単」とは、ほとんどの場合「安全性が低い」という意味です...

結局のところ、最新のアプリケーションでこのような制限が生じる理由は2つあります。

  1. アプリは、この制限があるいくつかのレガシーシステムに依存しています。
  2. 誰かが「簡単な方法」を選びました。

つまり、誰かがセキュリティを気にしていませんでした。 4桁(!)の固定長パスワードを持つオンラインバンキングシステムで銀行がまだ機能するのはなぜですか。

1
Sven Amann

述べた他の答えと同様に、レガシーの理由。

ほとんどのWebフレームワークは、今すぐそれをエスケープして処理できます。

私には準備されたステートメントについて何も知らない同僚がいたので、彼は特定の違法な文字をチェックしてそれについて不平を言うだけのJavaScript正規表現をコーディングしました。

つまり、プログラマーの知識不足かもしれません...

0

文字制限は、SQLインジェクションとXSS攻撃対象を制限する最も簡単な方法であるためと考えられます。適切なエスケープはより包括的なソリューションである必要があり、最新のフレームワークはそれをサポートしますが、データが異なる環境の異なる開発者によって作成された異なるシステムによって処理される可能性があることを考えると、すべてが毎回適切に実行され、誰もミスを犯していないことを確認することは困難ですまたはショートカットを取った。可能であれば、文字セットを安全で予測可能なサブセットに削減する方がはるかに簡単です。

パスワードを使用することは、正当な理由はあまりありませんが、パスワードがそのまま保存または表示されることは想定されていないためです。文字セットを制限するために私が見ることができる唯一の理由は、開発者またはブラウザがそれらを正しく処理しない場合に発生する可能性があるさまざまなエンコーディングおよびバグに対処するためです。標準のASCII文字セット内では、文字列をパスワードとして受け入れない理由はまったくありません。

0
StasM

私は昨夜ウェブサイトにサインアップしていました、そして私のユーザー名が特定の文字(スペースを含む)を含むことができないという事実で再び迎えられました

多くのWebサイトは、データベース内のレコードを検索するためのキーとしてユーザー名を使用しており、従来のキーにはスペースがありません。除外される理由が多岐にわたる特殊文字については。サイトの所有者は、単に$%@#$%ユーザーとして。

フレーズであるパスワードは、単純な文字/数字の置換よりもエントロピーが高く、解読が困難です。

これは、あなたの観点から見たバイアスの観点であり、パスワードは解読されないが、ウェブサイトは解読されることに注意してください。

フレーズに基づく長い形式のパスワードを使用すると、実際にはハッシュアルゴリズムを解読しやすくなり、次に、大文字、小文字、数字、特殊文字を含む短いパスワードになります。その理由は、人間の言語では、ほとんどのフレーズでアルファベットの文字の数がはるかに少ないためです。これにより、ハッカーはハッシュに対する攻撃の範囲を狭めることができます。すべてのパスワードが8文字であることを知っているが、255の異なる文字の範囲が含まれている可能性がある場合、ハッシュの範囲は非常に膨大です。

Webサイトに対する最も一般的な攻撃は、そのWebサイトからではありません。 anotherWebサイトの弱点に起因します。 Webサイト[〜#〜] abc [〜#〜]にハッキングして、ハッシュされていないメールとパスワードのリストを取得した場合、そのリストを使用できます他のウェブサイトを攻撃する。

ハッカーがFacebook、Twitter、Googleなどの人気のあるWebサイトで彼のリストを使用する前。彼らは、より小さなWebサイトを攻撃してそのリストをクリーンアップし、どの馬鹿がパスワードを再利用したかを確認します。きれいなリストを作成したら、その人が主要なWebサイトでパスワードを再利用した可能性があります。

多くの場合、これらのWebサイトは攻撃者に気付かれることなく攻撃されます。なぜなら、有効な認証を使用することで彼らは正しく歩いたからです。

したがって、パスワードを再利用しないでください。常にランダムに生成されたものを使用し、フレーズの使用を停止します。

パスワード保管庫を使用

0
Reactgular