0

RESTful インターフェイスについて学んでいます。サーバー リソースを更新するには、たとえば (id = 1) の連絡先を PUT します。

PUT /contact/1

ここで、現在のユーザーが連絡先 1 を所有する組織 1 に属しているとします。連絡先 2 を持つ組織 2 もあります。現在のユーザーは組織 2 に属しておらず、組織に対する権限を持っていません。ユーザーが Web ページをハッキングし (Mozilla の場合は Firebug、MSIE の場合は「F12 デバッガー」を使用)、Web ページの要求が /contact/2 を指すように変更すると、ブラウザーは喜んで要求を送信します。

私のサーバーは、このような組織間の攻撃から保護する必要があります。現在の Web サイトの設計では、ユーザーがログインすると、データ オブジェクトをセッションに保存します (Tomcat/Java を使用しています)。そのオブジェクトには、ユーザーが所属する組織が格納されます。安全性チェック コードは、返された PUT 要求の組織とユーザーが属する組織を比較し、返されたデータがユーザーの組織に属しているかどうかを確認します。ハッキング (組織 1 のユーザーが組織 2 に属する連絡先 2 を変更しようとしている) が検出されると、ブラウザーにエラーが返されます。

REST がステートレスであることは理解していますが、現在、いくつかのステートを使用しています。それでも、ユーザー情報を Web ページに渡すと、これも Firebug などを通じてハッキングされる可能性があると思います。

サーバーの状態を呼び出さずにこの安全性を達成するにはどうすればよいですか?

ありがとう、ジェローム。

4

1 に答える 1

0

通常、RESTfulサービスはステートレスです。これは、すべてのリクエストがapikeyまたは他の何かで認証される必要があることを意味します。

したがって、リクエストはに/path?apikey=MYKEYなり、サーバーはそのapikeyの権限を処理します。

ちなみに、ステートフルレストサービスも試しましたが、サーバーはログイン時に初期化されたCookieによってセッションを理解できます(ただし、実際にはRESTfulではありません)。

curlでそれらを試したい場合は、次のようにします。

curl -c cookie.txt -d "user=username&password=pass" "my.login.path"
curl -b cookie.txt "do.something"
于 2013-02-07T16:26:48.193 に答える