2016-04-13 10 views
0

AjaxとPHPを使用してデータベース内のデータ行を更新したいと思います。しかし、私は次の問題で苦労しています。更新するデータベースのフィールド(以後id)は、ajaxリクエストがから送信されたページに依存します。PHPのAJAXで機密データを取得または渡す

は、しかし私は、Ajax呼び出し、私のPHPスクリプトにこのidを取得する必要があります:

  1. 私は、ページ上のデータ属性または隠し入力にidを設定する必要はありませんこれらは、両方の可能性があるため悪意のあるユーザーによって操作される可能性があります。

  2. 同様に、参照URLを使用してidを特定することは、$_SERVERが安全でないため、なりすましになりやすいです。

  3. ユーザーが複数のページを開いている可能性があり、SESSIONが開かれた最後のページidしか保持しないため、idをSESSION変数(またはCOOKIES)に設定できません。

私が考えることができる唯一の解決策は、テーブルを確認し、次に、(上記のように当たり#3)DBのテーブルにid年代にランダムなトークンのマップを作成し、セッション変数にそれを渡すことですトークンのためにそれぞれのidをつかみなさい。しかし、やや複雑に思えます。

その他のオプションや考えはありますか?ありがとう。

+1

ユーザーのアクセストークンを生成し、セッション/データベースに配列として保存しますか? –

+0

^アクセス許可トークンを使用することができます。 –

答えて

1

これは、OWASP Top10 A7(機能レベルアクセス制御がありません)に関する問題です。

あなたのIDをページに戻すことができるように、あなたのIDを入れても問題はないかもしれません。は、実際の保存要求がユーザに許可されていることを確認する必要があります。

IDをページに貼っているかどうかに関係なく、ページはアクションを実行するためのベースURLを知っているので、IDを推測することができます。

+0

ユーザ権限の検証(すでに行われています)は、許可されたユーザが他の許可された 'id'へのアクセスを公開することを妨げません。これは健全な助言ですが、(開発者の)意図しない操作はまだ可能です。 – stacked

+0

ユーザー認証が既に行われている場合は、複雑なトークンソリューションを追加することで何も防止していません。ユーザーは既に任意のIDを編集する権限を持っています。ここであなたが守ろうとしていることを本当に理解しているのか分かりません。ソースコードを「間違って」編集して間違ったIDを編集することを除いては、 – Scopey

+0

いいえ、あなたのポイントは正しいです。私は自分自身からユーザーを保護しようとしていることに気付きました。これは、開発者にとって懸念される灰色の領域です。助けてくれてありがとう。 – stacked

0

ロジックを簡略化します。どのタイプのIDがクライアントからサーバーに使用されているかを示す何らかのインジケータを渡します。

セキュリティ上の懸念事項に対処するために過度に複雑なアプリケーションロジックを作成すると、コードのセキュリティ上の問題よりも多くの問題が発生する可能性があります。

SSL/HTTPSとWAF(Webアプリケーションファイアウォール - mod_securityなど)を使用します。

関連する問題