7

私はユーザーが登録できるPHPサイトをプログラミングしており、登録ユーザーと未登録ユーザーの両方が学校のサイトのそれぞれのユーザー名とパスワード(たとえばsmith8h4ft- j9hsbnuio)を入力できます。

次に、私のPHPスクリプトはいくつかの$_POST変数を送信し、マークページをダウンロードして解析し、:と呼ばれる配列を作成し、 marksDB = Array("subject" => Array("A", "B", "A", "C"), ...)それを再フォーマットして書き込みます。

私の質問は 、ユーザー名とパスワードを安全に保つにはどうすればよいですか?

未登録のユーザーの場合、現在、ユーザー名とパスワードを忘れて、に入れていmarksDBます$_SESSION。ユーザーが30分間非アクティブになると、marksDBが削除されます。これらのデータはどの程度安全$_SESSIONですか?また、ログインしてページを一度表示し、二度と表示しないユーザーはどうでしょうか。スクリプトによって、marksDBがセッションから削除されることはありません。セッションは自動的に削除されますか(gc.maxlifetime)?

そして、登録ユーザーはどうですか?すべてを安全に保ちたいのですが、30分ごとにパスワードプロンプトが表示されない状態でユーザーを煩わせたくありません。ここで説明されているように、3番目のユーザー設定のパスワードなしでクレデンシャルを暗号化するのは安全ですか?または、毎回ユーザーにパスワードを尋ねる必要がありますか?

編集:

迅速な返信をありがとう、
@Justinᚅᚔᚈᚄᚒᚔ:APIがあるとは思えませんが、場合に応じて質問できます
@Abid Hussain:非常に便利なリンクをありがとう。(両方の回答に感謝します)。
ユーザーのクレデンシャルを破棄しmarkDB、解析のみを行います。これもおそらく破棄します(ログアウトまたは非アクティブ化後)。必要に応じてマークを再度取得する方が安価です。

4

5 に答える 5

1

学校のサイトがこのためのAPIを公開していない場合(たとえば、StackExchangeサイトのようにOAuthを使用している場合)、オプションは制限されます。

一般的に言って、ユーザーのプレーンテキストのクレデンシャルを絶対に必要な期間より長く保持することは決して良い考えではありません。それを実行しようと想像できるあらゆる方法(セッションハイジャック、盗まれたキー、復号化など)には、セキュリティへの影響があります。

より良いアプローチは、マークのダウンロードプロセスを厳密にユーザーが開始するようにすることです。「マークを取得する」というボタンを渡して、そこで認証プロセスを実行し、マークをダウンロードして、資格情報を破棄します。「同期」するたびに、認証する必要があります。マークが定期的に変更されない限り、必要なすべての情報を一度にダウンロードして、後で使用するためにサーバーに安全にキャッシュできない理由はありません。

于 2012-08-07T15:27:27.510 に答える
0

セッションファイルは一定時間後にガベージコレクターによって削除されますが、保存するための大まかな目安は_SESSION、画面に出力するデータのみを保存することです。つまり、パスワードはおそらくセッションに保存したいものではありません。セッションファイルはサーバーから読み取ることができ、一部の悪意のあるユーザーがセッションを乗っ取って、表示されないはずの内容を表示したり、何らかの形で表示したりする可能性がありますvar_dump($_SESSION)

登録ユーザーに長いセッションを許可したい場合は、JSを使用して定期的にページを更新するか(必ずしもページを更新する必要はありません..非同期リクエストで十分です)、ini_set許可されている場合はセッション時間を増やすこともできます。パスワードを繰り返し要求することは必ずしも安全ではありません..それはあなたが要求しているときにパスワードがどれほど脆弱であるかに依存します。

もう1つの解決策は、悪名高い「RememberMe」Cookieでユーザーのログインを維持することです。

パスワードは復号化用ではありません。秘密のために暗号化します。認証用のハッシュ。

于 2012-08-07T14:20:44.957 に答える
0

セッション内のすべてがサーバー側であるため、他のユーザーがアクセスすることはできません。ただし、ここで説明するように、セッションは「ハイジャック」される可能性があります。

PHP.iniでセッションの長さを増やすか、バックグラウンドで定期的なAJAX呼び出しを使用して、セッションを存続させることができます。セッションは、サーバーによって期限切れになると削除されます。

パスワードを復号化できるように暗号化することは、他に方法がない限り、通常は眉をひそめます。暗号化を使用すると、自分だけでなく、データベースやソースコードにアクセスできる他のすべての人がパスワードを取得できます。

于 2012-08-07T14:35:56.393 に答える
0

URLを見る

http://phpsec.org/projects/guide/4.html

http://www.sitepoint.com/blogs/2004/03/03/notes-on-php-session-security/

http://talks.php.net/show/phpworks2004-php-session-security

http://segfaultlabs.com/files/pdf/php-session-security.pdf

PHPでセッションを作成する最も安全な方法

またそれを読む

セッションは、たとえばCookieよりもはるかに安全です。ただし、セッションを盗むことは可能であるため、ハッカーはそのセッションにあるものすべてに完全にアクセスできます。これを回避するいくつかの方法は、IPチェック(これはかなりうまく機能しますが、fiが非常に低いため、それ自体では信頼性がありません)、およびナンスを使用することです。通常、ナンスでは、ページごとの「トークン」があり、各ページは最後のページのナンスが保存されているものと一致することを確認します。

どちらのセキュリティチェックでも、使いやすさが失われます。IPチェックを実行し、ユーザーがそのユーザーの安定したIPを保持していないイントラネットファイアウォール(またはこれを引き起こすその他の状況)の背後にいる場合、ユーザーはIPを失うたびに再認証する必要があります。ノンスを使用すると、常に楽しい「クリックするとこのページが壊れます」という状況になります。

しかし、Cookieを使用すると、ハッカーは非常に単純なXSS手法を使用するだけでセッションを盗むことができます。ユーザーのセッションIDをCookieとして保存すると、ユーザーもこれに対して脆弱になります。したがって、セッションはサーバーレベルのハッキングを実行できる人にのみ侵入可能ですが(サーバーが安全な場合は、はるかに高度な方法と通常はある程度の特権が必要です)、さらにレベルの検証が必要になります。スクリプトリクエストごとに。CookieとAJAXを一緒に使用しないでください。これにより、Cookieが盗まれた場合に町に行くのが少し簡単になります。これは、ajaxリクエストが各リクエストのセキュリティチェックを取得できない可能性があるためです。たとえば、ページがナンスを使用しているが、ページがリロードされない場合、スクリプトはその一致のみをチェックしている可能性があります。また、Cookieが認証方法を保持している場合、

于 2012-08-07T15:15:35.203 に答える
-1

セッションファイルはサーバー側であるため、クライアントには表示されないはずです。ただし、セッションIDを知っている場合でも、プログラムをだまして別のセッションを使用させることができます。

登録ユーザーの場合、自分だけが知っているキーでパスワードを暗号化した後、パスワードをDBまたはファイルに保存できます(新しいキーがランダムに生成され、ユーザーごとに保存される場合があります)

于 2012-08-07T14:17:47.910 に答える