3

PHP、MySql、Jquery、および Ajax に基づく私の小さなプログラムは、データベースからログインおよび表示データを提供します。Login.html –> check-login.php –> success-login.php <-> show-data.php

私の質問:

  1. 私が心配するか、一般的に改善する必要があるセキュリティ上の懸念。
  2. に関して$_SESSION、誰かがリモート コンピュータに php ファイルを追加$_SESSION['mytime']して、許可されたユーザーになりすます可能性はありますか?
  3. 80% のログインが (プロキシとパスワード辞書によって) 破られる可能性があると主張している Youtube のビデオを見ました。ユーザーがログインできる最大時間を設定して、それを防ぐか、またはその他の提案を行いますか?
  4. MySQL と php (サーバー側) または javascript (クライアント側) のいずれかでデータをフォーマットできますが、常にクライアント側で行うか、またはたとえば、10 個の関数がある場合、クライアント側に 8 個、サーバー側に 2 個などです。 .

私のコードは以下のようにリストされています:

login.html (check-login.php を呼び出す)

チェック-login.php

// connect database by PDO
// if username and password (in md5) are matched
session_start();
$_SESSION['mytime'] = time();
header('location:success-login.php');

成功-login.php

session_start();
if(!isset($_SESSION['mytime'])) {
  header('location:login.html');
   exit;
}
//use Jquery and Ajax to fetch data from database in show-data.php

show-data.php

session_start();
if(!isset($_SESSION['mytime'])) {
  header('location:login.html');
   exit;
}
//PDO database operation and return data in JSON
4

2 に答える 2

0
  1. 次のような多くのセキュリティ上の懸念があります。5つの一般的なWebアプリケーションの脆弱性
  2. $_SESSIONいいえ、ユーザーが自分で変数を設定/変更することはできません。
  3. たとえば、5回間違ったパスワード入力を行った後、ユーザーが単純なパスワードを選択しないようにしたり、キャプチャを入れたりすることができます。(Yahoo!が行います)など...
  4. 私はあなたが正確に探しているものを手に入れませんでした。
于 2013-01-04T14:34:17.997 に答える
0

このようなアプリケーションを開発する際には、心に留めておくべきことがたくさんあります。データベースから表示するデータの機密性によっては、プレーンな HTTP の代わりに HTTPS 接続の使用を開始することをお勧めします。これは、セキュリティを強化するために通常行うことです。

  • 暗号化されたセッションを作成する - mcrypt を使用し、Cookie を介してクライアント側でセッションを復号化するために必要なキーを保存します。このようにして、誰かが最終的にセッションがサーバーに保存されているパスにアクセスできたとしても、キーはクライアント側に保存されるため、セッションをデコードすることはできません。
  • URL で SQL を使用しないでください。送信されたデータが有効かどうかを常に確認してください。つまり、レコード ID が存在するかどうか、入力されたデータが有効かどうかなどです。
  • クロスサイトスクリプティングに注意
  • 常にパスワード暗号化を使用し、機密データがある場合は、それも暗号化してみてください。

あなたの他の質問について:

  1. あなたの質問が何であるかわかりません。$_SESSIONサーバー側に保存されます。そのサーバーで実行されるスクリプトまたは手動でのみ変更できます (手動で$_SESSIONファイルを編集する場合) 。
  2. ユーザーが X 回ログインに失敗した場合、キャプチャ (reCaptcha) を使用します。必要に応じてロックを追加できます。ユーザーが 5 回ログインに失敗すると、ユーザーはロックされ、ロック解除手順が記載された電子メールがユーザーの電子メール アドレスに送信されます。
  3. あなたが何を意味しているのか正確にはわかりませんformat(解析またはスタイリングです)。AJAX リクエストに応答する場合は、データをフォーマットして、表示する必要のあるデータのみを出力します。たとえば、ユーザーに関する情報を表示する場合、彼の 、 、 を出力しますusernameが、first_name、、およびlast_nameその他の機密データは出力しemailません。passwordpassword_saltbank_account
  4. ポイント 3 のフォローアップとして - サーバー側からデータをフォーマットする場合、それをどのように表示するかはあなた次第です。これは JavaScript を介して行うことも、AJAX リクエストへの応答として直接出力することもできます。それはあなた次第です。

あなたが私たちに提供してくれたコードは、有効なユーザーに対してチェックしないため、私は使用しません。ユーザーが変数を使用したセッションを持っている場合、ユーザーが持っているセッションmytimeは有効であると想定されます。セッションに (暗号化して)保存user_idpassword、それらの値がデータベースで一致するかどうかを確認します。このようにして、ユーザーが削除されたりパスワードを変更したりした場合、他のすべてのセッションが無効になります。

于 2013-05-17T00:32:00.747 に答える