9

私は大量の個人データを処理するサービスを作成しているので、パスワードを単純に飛ばすのは適切ではありません。私は可能な解決策を見つけるために掘り下げてきました、そして私の注意を引いたのはphpassです。私はここのStackOverflowでそれについて読みました。

このテーマについて多くの質問があることは承知していますが、phpassはパスワードを安全に保存する方法であることを明確にしておきたいと思います。私が疑う理由は、塩を一切使用していない(少なくとも使用していないように見える)ためです。これは、安全な保管の鍵であると言われています。

私の現在の方法は、1つのユーザー固有のソルトと別のサイト固有のハッシュを使用したsha512ハッシュです。これが私のPHPコードのクリップです:

hash_hmac('sha512', $password.$account_specific, $site_specific);

この問題について専門家のような意見を聞くのは素晴らしいことです。いつも質問されてきた主題のために別のスレッドを作成したことをお詫びします。前もって感謝します。

編集:
パスワードをハッシュすることも、たとえば1000回はパスワードを保存するための良い方法だと聞きました。この方法では、ハッシュは(最大で)数秒しかかかりませんが、ハッシュされたパスワードを破るには文字通り何年もかかりますか?

4

3 に答える 3

8

Webでセキュリティのトピックを扱う場合、物事を行うための「真の」安全な方法はありません。Webセキュリティは本質的にいたちごっこゲームです。日常のユーザーはネズミで、ハッカーは猫です。Webセキュリティは主に事後対応型です。つまり、新しいセキュリティの実装は、セキュリティ違反が発生した場合にのみ考慮されます。このため、ハッカーは一般的にセキュリティの実装より一歩進んでいます。

そうは言っても、サイトをより安全にするためにできることはたくさんあります。

1)ソルト値を使用します。

私はあなたがすでにこれをしていることを知っています、そしてそれは良い習慣です。ソルトを使用するとアプリケーションが安全になると言うのは誤りですが、そうではありません。ハッキングははるかに難しくなりますが、DBにソルト値を格納していて、DB全体が注入/ダンプされてしまう場合、ハッカーはレインボーテーブルを使用するために必要なすべての情報を持っています。アプリケーション固有のソルトを使用することはセキュリティの追加手段ですが、アプリケーションがハッキングされ、ソースコードが取得/逆コンパイルされた場合、ハッカーは必要なものをすべて持っています。

2)SSL証明書を使用する

アプリケーションが存在するサーバーに出入りするときにデータが暗号化されていることを確認することは、パケットスニッフィングやセッションサイドジャックから保護するための良い方法です。

3)SHA2ハッシュを使用する

SHA2ハッシュ値は広く実装されており、その前身であるSHA1よりも何倍も安全です。

4)DBとアプリケーションを別々のサーバーに配置します。

別のサーバー(または少なくとも別のIPがある場所)にDBがある場合は、DBへのアクセスを特定の呼び出し元IPアドレス/ポートに制限できます。そうすることで、データベースに対して行うことができる唯一の呼び出しがアプリケーションからのものであることを確認できます。

5)クエリを動的に作成する代わりに、ストアドプロシージャを使用します。

アプリケーションにSQLクエリを1行ずつ構造化するコードが含まれている場合、攻撃者はこの情報を使用してDBの構造をマップし、その後効果的に挿入することができます。ストアドプロシージャを使用する場合、このロジックはソースコードの観点から抽象化され、攻撃者はそれらを表示してもDB構造を洞察することはできません。

6)すべての可能な注入ポイントに対してチェックします

自分のアプリケーションをハックしてみてください。あなたはそれを最もよく知っているので、あなたはその最も弱い点を知っているべきです。開発者はそこに最悪のQAerのいくつかを作るかもしれませんが、注入可能な穴を開いたままにしたかどうかを把握することは可能であるはずです。ユーザー入力を使用してクエリをフォーマットしている場所はありますか?もしそうなら、入力をいじって、あなたが何ができるかを見てください。

私の経験から、上記のすべてを実行すると、非常によく保護されます。100%安全なものはありませんが、10億ドルの現金を手放すための秘密のコードを保持していない限り、これらの障害はハッカーの大多数(すべてではないにしても)を阻止します。少数の大企業のサイトで作業してきましたが、これらのサイトの一部が利用しているセキュリティの欠如はばかげています(*咳*ソニー*咳*)。

また、多くのユーザーが別々のプラットフォームで同じパスワードを使用することを好むことにも注意してください。ユーザーAがすべてに同じパスワードを使用し、自分のサイト(安全なサイト)に登録してから別のサイト(安全ではなく、パスワードをハッシュしないサイト)に登録する場合、攻撃者は攻撃者が最も弱いリンクを見つけるだけです。ユーザーの閲覧習慣とそこからプレーンテキストのパスワードを取得します。

よろしくお願いします、

于 2011-07-12T20:26:36.823 に答える
2

ソルトは辞書攻撃やブルートフォース攻撃を防ぐのに役に立たないことに注意することが重要です。

パスワードを安全に保管する方法

于 2011-07-12T18:10:49.483 に答える
0

私はこれを使用します:

function super_hash($string,$key,$times=2) {
    $hashed_string = SITE_KEY . $string . $key;
    for($i=1;$i<=$times;$i++) {
        $hashed_string = hash_hmac('sha512',$hashed_string,SITE_KEY . $key . 'hardcoded_key');
    }
    return $hashed_string;
}

セキュリティを強化する(処理を遅くする)には、反復を追加するだけです($ timesパラメーター)。追加の反復が必要になるのは、データベースとコードの両方が危険にさらされている場合のみであることに注意してください。

于 2011-07-12T20:28:48.503 に答える