2016-09-19 5 views
5

多分私はこれを思っています。Web apiがブラウザ外で呼び出されないようにすること

私はブラウザ(パズルなど)で実行されているいくつかの簡単なjavascriptのゲームを持っており、ユーザーが勝ったときに、ポイントは、彼らがこれを完了どのように迅速に基づいてlaravelバックエンドに送信されます。

ユーザがログインすると、典型的なセッションが作成され、そしてポイントがPOST要求を介して送信されるとき、そうCSRFとJWTです。

は、クロームのdevのコンソールを開き、crsf、クッキーやJWTをコピーして、実際にゲームをプレイすることなく、バックエンドにポイントを送った後、URLを取得するには、ユーザーのために、それは可能ですか?

ブラウザ外で呼び出されたApisは、Access-Controll-Allow-Originポリシーを尊重しません。

誰でもこれを行うことを禁止する方法やこの操作を防止する方法を説明し、ユーザーが実際にポイントを獲得するためにゲームをプレイすることを確認できますか?

+0

おそらく、User-Agentヘッダーが追加として設定されているかどうかを確認できます。しかし、これはウェブブラウザを必要とせずに追加することもできます。 – Bora

答えて

2

1つのアプローチは、ゲームを段階的に配置することです。つまり、複数の<form>要素を使用します。

初期ページには、ゲームの正確に一つの部分に正確に1 <form>要素が含まれます。そのフォームは、サーバーがdocumentの隣に<form>要素を送るん提出されるだけ

一意の識別子と<input type="submit">素子を有する各<form>素子。たとえば、タイムスタンプは、name属性で設定され、サーバーで生成されます。ゲームの進行中にそのステップで<form>を完了するのに必要な最長時間で失効する。

ユーザーが一意の識別子なし<form>を提出、または<form>のステップは、プロセス内のステップを表す<form>を完了するために必要な最大時間の範囲の外に送信された場合、ユーザーは、現在のゲーム「を受賞」から失格、または再生しています将来的には所定の時間の間、ゲームを開始する。

+0

興味深いですが、これはまだ少しプログラミング経験を持つ人のために操作するのはかなり簡単ですか? – Orane

+0

@Oraneどのように操作するアプローチですか? – guest271314

+0

@Orane _ "しかし、これはまだプログラミング経験のある人のために操作するのがかなり簡単ではありませんか?" _クライアントはブラウザで何かやサーバーに送信することについてどうすればよいでしょうか?多分、質問にBountyを置くことを検討してください。質問に記載されている可能性のある解釈と将来の課題へのアプローチの範囲を収集する? – guest271314

関連する問題