2016-09-19 37 views
5

也許我正在反思這一點。保護Web apis免於被瀏覽器外部調用

我有一些簡單的JavaScript遊戲運行在瀏覽器(謎題等),並且當用戶獲勝時,基於它們完成此操作的速度,將點發送到laravel後端。

當用戶登錄時,會創建一個典型的會話,當通過POST請求發送點時,csrf和JWT也會發送。

用戶是否可以打開chrome dev控制檯並獲取url,然後複製crsf,cookie或JWT並將點發送到後端而無需真正玩遊戲?

在瀏覽器外部調用的Apis不尊重Access-Controll-Allow-Origin策略。

任何人都可以解釋什麼阻止用戶這樣做或如何防止此操作,並確保用戶真正玩遊戲賺取積分?

+0

也許,你可以檢查User-Agent頭是否被設置爲加法。但是,這也可以在不需要網絡瀏覽器的情況下添加。 – Bora

回答

2

一種方法可以是安排遊戲的步驟。也就是說,使用多個<form>元素。

初始頁面恰好包含一個<form>元素,其中只有一個遊戲部分。

只有在提交表單時服務器纔會發送下一個<form>元素到document

每個<form>元素具有帶唯一標識符的<input type="submit">元素;例如,時間戳,設置爲name屬性並在服務器上生成;這將在遊戲過程中在該步驟完成<form>所需的最大時間內到期。

如果用戶提交<form>沒有唯一的標識符,或<form>步驟提交的要求的最大時間範圍之外來完成表示在進程中的一個步驟的<form>,用戶從「中獎」當前的遊戲,或玩不合格在未來的一段時間內玩遊戲。

+0

有趣的,但是這對於一些具有編程經驗的人來說操作起來還是相當容易嗎? – Orane

+0

@Orane將以何種方式操縱? – guest271314

+0

@Orane _「,但對於具有一定程序設計經驗的人來說,操作起來還不是很容易嗎?」_服務器端如何確定客戶端在瀏覽器上做什麼或向服務器提交的內容?也許考慮在這個問題上給予賞金;爲問題中描述的未來問題收集一系列可能的解釋和方法? – guest271314