0

SOAP を介してローカルの Web サービス フレームワークに接続するために、PHP でブリッジ スクリプトを作成しています。このスクリプトは、Web サービスへの唯一のパブリック アクセスであり、GET 経由で値を取得し、クエリを作成して Web サービスに送信し、JSON 経由で結果を返します。スクリプトが取る変数はすべて文字列でなければなりません。(すべての配列は文字列に変換されます)。

私の質問は、Web サービスへの唯一のパブリック アクセスはこのスクリプトによるものであるため、$_GET['...'] を介してパラメーターを取得し、それらを SOAP 形式に直接出力して、最も安全な方法をクエリすることですか? SOAP ネイティブのエスケープを補完するために、GET 値に対してある種のエスケープを実行する必要がありますか?

(わかりやすくするために、以下にプロセスの概要を示します。** は、質問が適用される場所です。)

  1. スクリプトへの HTTP GET
  2. スクリプトは GET 値を変数に格納します **
  3. 変数を SOAP クエリの形式に構成する
  4. 構成されたクエリを SOAP サーバーに送信する
  5. SOAP サーバーからの応答を受け取る
  6. 応答を JSON として出力する

ありがとう!

4

1 に答える 1

2

あなたの質問から何をエスケープしたいかを理解するのは本当に難しいですが、それを見ていきましょう。

通常、Filter-In、Escape-Outが必要です。つまり、アプリケーションの外部のどこからでも入力を受け入れる場合は、それをフィルタリングする必要があります。

しかし、フィルターとはどういう意味ですか?

それが有効であることを確認することを意味します。英数字のユーザー名を期待していて、誰かが記号付きのユーザー名を渡した場合は、拒否してください。それはフィルタリング...

次に、データを出力するときに、出力するコンテキストに合わせてエスケープする必要があります。

したがって、HTML 本文に記述している場合は、次のようなものを使用しますhtml_special_chars。データベースに送信する場合は、準備済みステートメントを使用するか、db 固有のエスケープ アルゴリズムを使用してエスケープします。

それで、それはあなたの状況で私たちをどこに置きますか?

さて、あなたはそれを SOAP リクエストのためにライブラリに送信しています。そのライブラリは、SOAP リクエストのエスケープを処理する必要があります。

そして、リモート サービスがそれに対して (文脈上) 何をするかわからないことを考えると、それをエスケープするのはリモート アプリケーションの仕事です。

いいえ、エスケープを行うべきではありません。

ただし、入力をフィルタリングして、期待しているドメインで有効であることを確認してください...

于 2013-06-20T14:15:06.230 に答える