0

パスワードから文字を削除する機能があります。

public function stripChars($var)
{
    $bad_symbols = array(",", "|", "'","<",">",'"');
    $var = str_replace($bad_symbols, "", $var);
    return $var;
}

SQL ステートメントを台無しにすることなく、ユーザーがパスワードにコンマを使用できるようにする方法があるかどうか疑問に思っています。そうでない場合は、既に削除している記号以外に、パスワードで許可しない記号はどれですか。ありがとう。

4

4 に答える 4

9

データベースに挿入する前に、ユーザーのパスワードからどの文字を削除する必要がありますか?

まったくありません。削除する文字が多いほど、パスワードは弱くなります。

SQLステートメントを台無しにすることなく、ユーザーがパスワードにコンマを使用できるようにする方法があるかどうか疑問に思っていますか?

  1. SQL を手作業で作成しないでください。プリペアド ステートメントとバインドされた変数を使用します。これにより、問題を引き起こす可能性のある文字がエスケープされます。
  2. 平文のパスワードをデータベースに保存しないでください。それらをハッシュします
于 2013-03-15T21:13:31.007 に答える
1
without it messing up the SQL statement?

ああ、SQL インジェクションについて読む必要があります: http://en.wikipedia.org/wiki/SQL_injection

そのため、パスワードに任意の文字を許可し、SQL ステートメントで入力を直接使用しないようにする必要があります。

于 2013-03-15T21:15:27.870 に答える
1

ユーザーのパスワードから文字を削除しないでください。ユーザーがパスワードを "r2^£XS\'32" として入力し、保存する前にフィルター処理すると、パスワードが正しくないため、ユーザーはログインできなくなります。

パスワードの文字を制限する必要があるかどうかについては、別の問題です。使用する文字コーディングの一部ではない文字を制限する必要がありますが、それを除けば、それは悪い考えです. 使用可能な文字セットを制限すると、ブルート フォース攻撃が成功しやすくなります。

代わりに、準備済みステートメントを使用することで、SQL インジェクションを防ぐことができます (これはあなたの懸念事項だと思います)。

また、パスワードを保存する前にハッシュ化する必要があることにも注意してください。プレーンテキストまたは可逆暗号化として保存しないでください。理想的には、セキュリティを強化するためにパスワードもソルトします。

詳細については、パスワードハッシュPDO および準備済みステートメントを確認してください。

于 2013-03-15T21:15:32.077 に答える
-1

パスワードから文字を削除しないでください。ただし、データベースに入れる前、または認証のために比較する前に、それらを「エスケープ」してください。

于 2013-03-15T21:14:52.550 に答える