ソルトは、エンコードしたい文字列のハッシュに追加された単なるランダムな文字列であるため、それを生成する方法は十分にあります [たとえばSO でこれ]。
sha [md5 など] はハッシュアルゴリズムであり、crypt関数ではありません。つまり、後で取得するために何かを隠すことを意図したものではないため、必要がなく、sha の結果を復号化することもできません。データベースからパスワードを読み取るために登録しているサイトの管理者。
ハッシュとは、データ セットの要素を別のデータ セットの短い要素に [ほぼ合計]単射的にマップすることです。任意の長い文字列を固定長のキーにマップします。これにより、実際に元の値。
hash( value1 ) = hash ( value2 ) => value1 = value2
私が言ったのは、ハッシュhash(value1) = hash(value2)
アルゴリズムにはいくつかの衝突があるためです[たとえば、2つの値が同じであることを意味しないなど、前のステートメントの例外]-ソルトはこの点でも役立ちます。
これは、パスワードをdbに保存する方法です:
- 塩を生成します。
- 実際のパスワードの前にソルトを追加します。辞書攻撃を防ぐために、ソルトを pwd の前に置くことが重要です。
- 連結された文字列を適切なアルゴリズムでハッシュ
sha1
します [例として選択しました];
- 文字列とソルトの両方を db に保存します。
コード内:
$user -> salt = your_salt_generator();
$user -> hashedPwd = hash('sha1', $salt . $userChosenPwd);
$username
/に対する Pwd チェック$password
は次のとおりです。
$username
データベースから指定されたユーザーを取得します。
- 存在する場合は、保存されたソルトと指定されたパスワードで上記のプロセスを使用し、保存されたハッシュと等しいかどうかを確認します。
コード内:
hash('sha1', $user -> salt . $sentPassword) == $user -> hashedPwd;
URL に値を隠すことについては、セキュリティよりも SEO / 読みやすさのトピックです。URL はルーティング時に作成する必要があります [ http://somesite.com/products/:id
id 番目の製品にアクセスする場合など]。あなたのサイトに作成されました [私が今すぐに来ることができない完全にがらくたのケースに関係なく].
MySQL インジェクションに関しては、 PDO 拡張機能からステートメントを準備して以来、それらを取り除きました。
これについては何百万もの答えがありますので、見て回ってください。
あなたの仕事でそれを維持してください!