2016-05-13 4 views
3

私のウェブサイトにAngular 2フロントエンドを構築しようとしています。私の質問はAngularとは必ずしも関連していませんが、私は完全な文脈を提供したいと思います。RESTfulサービスを保護する方法は?

コンテンツをユーザーに表示するアプリケーションロジックは、クライアントに移行します。したがって、サーバー側では、RESTfulなJSONフィードを介してデータを公開する必要があります。私が心配しているのは、誰かが私のフロントエンドを完全に迂回し、さまざまなパラメータでサービスにリクエストを実行し、データベースを効果的に削ることができるということです。 HTMLを掻き集めることで可能なことが分かりましたが、整形されたデータを使ってサービスを公開するのは簡単です。

これからRESTfulサービスを保護する方法はありますか?言い換えれば、そのようなサービスが私のAngular 2アプリケーションコールにのみ応答するようにする方法はありますか?認証は確かにここでの解決策ではありません。私は訪問者に認証を強制したくないので、スクレーパーは認証しアクセス権を得ることができます。

+0

APIにトークン(リクエストごとに送信される)が必要なようにして、このトークンをサーバー側で検証して特定の操作を許可/禁止することができます。 –

+0

私はこの記事をかなり役に立ちました:https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage – Rob

+1

トークン化とスロットリングが終わりました。スクレイピングよりも魅力的です。 – estus

答えて

0

答えは「いいえ」と思います。

あなたはあいまいなタイプのものでセキュリティを行うことができます。あなたの残りのAPIは、文字化けしたデータを公開する可能性があり、あなたのコードに隠されていた機能をいくつか持つことができます。明らかにこれは馬鹿な証拠ではありませんが、パブリックサイトにデータを公開すると、サーバーやクライアントのレンダリングに関係なく公開されます。

+2

いいえ、ちょうどいいえ。あいまいさでセキュリティを守らないでください。 –

+0

実際、ジョーはここで良い点を作っていると思う。基本的に、今までのところ最良の解決策は、JSONフィードをあまりにも乱してスクレーパーのプログラムを継続的に混乱させることでした。だから、間違ったレコード、無意味なトークンがここやそこに挿入されたり、JSONが何らかの形で無効になったりする可能性もあります...これは可能です。それはちょうど正しい道のように感じません...これは、人気を得ているこれらのJSソリューションのための本当の挑戦になります。 – jacekn

+0

@jacekn生き残るために掻き集める人があなたのAPIと混同さ​​れる場合、あなたのチームがどのようになるか想像してください。これはREに数日間余分にかかるかもしれません、それを開発し、維持するためにどれくらいの費用がかかりますか? – estus

1

わかりやすい方法はありませんが、多くの人がAmazon S3をモデルとして検討しているようです。クライアントコードに資格情報を入れると、クライアントコードを取得した誰もがそれらを見ることができます。私はあなたが時間制限されたトークンをブラウザにクライアントコードで戻すためにサーバーを書くことを提案するかもしれません。クライアントコードは、アクセスのためにサーバーに戻す必要があります。これにより、誰かが自分のクライアントコードを書くことができなくなります。サーバーによって送信されたクライアントコードだけが一定の期間だけ動作するためです。ユーザーはタイムアウトを取得することがありますが、それはトークンのタイムアウトをどれだけ厳密にしたいかによって異なります。もちろん、この種のものであっても、自分のクライアントAPIで使用するトークンのコピーを取得するように依頼するクライアントがハッキングする可能性はありますが、その時点で誰かがあなたのAPIを使いこなすのを誇りに思うべきです!私はそのようなことを書こうとしていないので、私はこの問題に関して実践的な経験はありません。私自身はそれについて疑問を抱いていましたが、他の人が何をしていたのかを知るために、このアーキテクチャについて十分な経験を持っていません。 angularJSフォーラムは何を提案していますか?

その他の参考資料:Best Practices for securing a REST API/web service

+0

Nicholas、あなたはすでに、次の有効なトークンをプログラムで取得することができると述べました。それは仕事かもしれないが、私は維持するために多くの時間を必要とするデータベースを持っている(データ収集+入力)。時間の限られたトークンをハックして準備ができて美しくフォーマットされたデータを取得するのに少し時間を費やしても、スクレーパーはまだ時間を節約できます。 – jacekn

+2

ポスターはデジタル著作権に関する質問を本当に求めています。パブリックインターフェイスにデータを置くと、人々がそれを使用するのを止めるのは何ですか?あなたはそれをより困難にすることができますか、または個人的なアクセスの資格情報を必要としますが、その後でさえ、著作権侵害や停止要求の弁護士を探す必要があります。エンターテイメント産業全体を待ち合わせてください。 –

1

私はJWTの許可をお勧めします。そのような実装の1つはOAuthです。基本的には、ユーザーと、APIにアクセスできるリソースについてあなたが信頼する信頼できる機関によって署名されたjson Webトークン(JWT)を取得します。

リクエストに承認トークンが含まれていない場合、APIはそれを拒否します。

トークンが認可機関によって署名された後で自分自身を許可しようとしている人によって改ざんされた場合、あなたのAPIはそのトークンを拒否します。

かなりクールなキットです。

このsiteには、さまざまな言語のOAuth実装についての情報があります。あなたのお気に入りがリストされていることを願います。

軽いベッド時間reading

関連する問題