2017-04-06 163 views
1

我有一個頁面,我想要發送一個POST來觸發數據庫更新。該請求將來自另一個網站。Laravel 5.3 POST和tokenmismatch

Route::post('update', '[email protected]'); 

該請求包括單個元件

(原始)

id=12345 

(形式數據)

id: 12345 

每當存取該網頁,出現此錯誤

TokenMismatchException in VerifyCsrfToken.php line 68: 

回答

1

Laravel可以輕鬆地保護您的應用程序免受跨站點請求僞造(CSRF)攻擊。跨站點請求僞造是一種惡意攻擊,其中未經授權的命令是代表經過身份驗證的用戶執行的。

Laravel自動爲應用程序管理的每個活動用戶會話生成一個CSRF「令牌」。該令牌用於驗證經過身份驗證的用戶是實際嚮應用程序發出請求的用戶。

任何時候你在你的應用程序定義一個HTML表單,你應該包括一個隱藏的CSRF令牌場的形式,這樣的CSRF保護中間件可以驗證請求。您可以使用csrf_field助手生成令牌場:

<form method="POST" action="/profile"> 
    {{ csrf_field() }} 
    ... 
</form> 

除了檢查的CSRF令牌作爲POST參數,則VerifyCsrfToken中間件也將檢查X-CSRF-TOKEN請求頭。你可以,例如,存儲令牌在HTML meta標籤:

<meta name="csrf-token" content="{{ csrf_token() }}"> 

然後,一旦你已經創建了meta標籤,你可以指示像jQuery庫令牌自動添加到所有請求頭。這提供了簡單,方便CSRF保護您的基於AJAX的應用程序:

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 

Reference

注:要排除一些URI的從CSRF驗證去project/app/Http/Middleware,打開文件VerifyCsrfToken.php並通過您的網址,如:

protected $except = [ 
    '/api/authuser', 
]; 

從CSRF驗證中排除了該數組中傳遞的URL。

+0

我真的沒有什麼比在「發件人」發送任何控制。我所知道的確實是有一個叫做「id」的元素,它有一個5位數字的ID。 – aserwin

+0

在大家參考,我確實發現介紹如何從CSRF排除URI的一個部分!所以,這解決了我的問題!謝謝。 – aserwin

+1

檢查更新後的答案。 –