2016-04-13 20 views
-1

私が取り組んでいるWebアプリケーション向けのカスタム電子商取引モジュールを作成しています。ユーザーには、ドメインにホストされるサイトのモジュールを作成する機会を与えます(例:http://example.com)。API PHPによるAJAX - APIへの安全なアクセスの作成

このモジュールには、ユーザーのアカウント管理パネルへのJavascriptインターフェイスがあります。管理パネルにアクセスするには、アカウントでWebアプリケーションにログインする必要があります。

商品を追加したり、電子商取引の設定(通貨など)を変更したりすることができます。商品が追加されたり、何かが変更されたり、URLをユーザのドメインに呼び込んだりすると、ディスパッチャはPHP関数を呼び出します、商品の削除など)を行い、データベースを変更しますが、処理されたURLを知っている人は、REST APIクライアントを使用して情報を送信できます(製品IDを商品削除アクションに送信するなど)。誰かがクライアント製品を削除したり、一部の電子商取引設定を変更したりする可能性があるため、そのようなことを防ぐ必要があります。

API URLが呼び出されたときに、SESSIONに格納されたトークンを使用して、AJAX呼び出しにトークンを戻し、指定されたトークンを使用して別のAJAX呼び出しを実行しました。関数が呼び出されると、両方のトークンが比較され、同じ場合は変更が許可されます。さもなければ、それらは拒否されますが、外部からのAPIへのアクセスを防ぐためにこれが "良いセキュリティ"であるかどうかはわかりません。アクセストークンを取得するためにURLを呼び出す必要があることを知る方法を「見つける」ことができるため、指定されたトークンで別の呼び出しを行い、破壊を実行します。

ありがとうございます。任意の情報や提案をいただければ幸いです。

よろしくお願いいたします。

+1

[暗号ノンス](https://en.wikipedia.org/wiki/Cryptographic_nonce)の使用について詳しくはこちらをご覧ください。一意のセッショントークンを使用して、あなたがすでにやっていることに加えて。 – apokryfos

答えて

1

次の操作を試みることができる:

  • ユーザー(例えばレコードを追加/削除)データベースを操作するには、ログインする必要があります。
  • ときユーザログは、その後DBのmanipultationを扱う形で処理される隠さフォーム入力(<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">)を追加$_SESSION['token'] = md5(time()); // for example
  • セッション変数にトークン(ランダム化された値)を格納し、で述べています。
  • 目的のアクションを成功させるために、$_SESSION['token'] == $_POST['token']が満たさなければならない条件を追加します。もちろん、最初に$_SESSION['token']が存在することを確認してください。そうでない場合は、システムに外部からアクセスしています。

これはこれを行う1つの方法です。

+0

そうです、それが最初のアイデアでした。問題は、DB操作はjQueryフレームワークを使用してAJAX呼び出しによって行われ、フォームはjQueryダイアログに実装されるため、製品を追加すると実行時にロードされ、Webページは再ロードされず、取得されたDialog情報同じトークンを再度使用することを防ぐために、APIとトークンを次のAPI呼び出し用に再度作成する必要があります。だから、関数が正常に終了したときに新しいトークンを取得するのがよいかどうか、それはちょっと心配です。 – DaGLiMiOuX

+0

AJAXを介してセッション変数とフォーム変数(トークン)を渡すことはできます。その後、一度完了すると、次回のために必要な場合にそれらを再生成することができます。たとえば、各ページの読み込み時に、トークンを再生成することができます。その後、ユーザーが1ページに存在する限り、ユーザーが別のページにジャンプするまで、トークンを再利用し続けるだけです。 – Marcus

+0

トークンはユーザーのSESSIONに格納され、RESTクライアント経由で同じトークンを試すと問題は発生しません。なぜなら、関数呼び出し時にSESSIONにトークンが生成されないため、失敗するはずです。あなたはWebアプリケーションからアクセスしていませんでしたか? – DaGLiMiOuX

関連する問題