3

私は、ajaxリクエストを介してサーバー(PHP)と通信するPhoneGapを使用してモバイルアプリケーションを開発しています。

サーバー側(PHP)https://example.com/retrieveData.phpのようなもの は、を介してユーザーIDを取得し、ユーザー$_POST['user_id']に関する機密情報をJSONとして返します。

また、クライアント側(PhoneGap-Javascript)では、JSON出力が解析され、アプリケーションで使用されます。

私の懸念は、誰かがこのURL(https://example.com/retrieveData.php)を盗んだ場合、手動で偽の投稿リクエストを送信し、返されたユーザー情報を盗むことができるということです。

この通信を保護するにはどうすればよいですか?

4

3 に答える 3

3

私の懸念は、誰かがこのURL(https://example.com/retrieveData.php)を盗んだ場合、手動で偽の投稿リクエストを送信し、返されたユーザー情報を盗むことができるということです。

あなたは心配する権利があります。リクエストを承認するリクエストの一部をチェックしない限り、誰でもそのURLにメッセージを送信し、結果を得ることができます。

For example, you could authenticate to check that the request comes from the user and then authorize the request based on the idea that the user should have access to that info.

Alternatively, you can authorize based on something that only a valid requestor would know via a shared secret and rely on the https part of that URL to prevent shared secrets from becoming public. You give out the secret to trusted partners, and when you generate a web form via PHP (also protected via HTTPS), you include a hidden input containing the shared secret. This is how XSRF protection typically works.

You should think about the following:

  1. Who should legitimately be able to reach this page? Logged-in users interacting via your phone app, partners who can protect a secret, web API users?
  2. What credentials do they have for using other parts of your server? Log-in cookies? XSRF tokens? Partner tokens?
  3. What parts of your app are sent only over secure channels like https?

If all of (1) is satisfied by some subset of credentials in (2) and those credentials are only ever sent over (3) then you just need to check (2) in your page. Otherwise, you need to rework your application architecture until that is true.

OWASP has a Guide to Authorization that might come in handy and they also have a number of pages on reviewing authorization code but most of the examples are not PHP specific.

于 2012-10-01T20:43:12.963 に答える
1

もちろん、彼は必要な投稿リクエストを送信できます。これを回避する唯一の可能な方法は、サーバーが認識している認証を使用することです。つまり、クライアントは推測しにくいものを送信する必要があり、それによってサーバーでセッションが開始されます。

于 2012-10-01T20:37:23.540 に答える
0

As other answers suggests, following is the strategy to make your webapp more secure :-

  • The most basic rule, use secured protocol(https)
  • Authenticate your user through username and password
  • Most of the features/operations of your app primarily must require user to be get authenticated.
  • Apart from authentication, Maintain Access Control List for your app, which decides authorities each user role have(Assuming that you divides your users into different roles). Prior to performing any operation on behalf of user, check if user is authorized to do so.
  • Don't rely only on client-side validation. Perform validation at server side also.
  • Send csrf_tokens along with your response, along with session cookies.
  • Never send any confidential information in cookies.

Hope it helps.

于 2015-12-15T06:24:07.870 に答える