2017-05-27 65 views
1

我創建了一些不同的訪問級別的網站,從基本的用戶直通到(共5個)管理水平CSRF ... PHP形式的擔保

經理和管理水平將不得不添加選項新用戶在等於或比他們更低的水平,這是通過一個下拉createNewUser頁面上盒做的,我已經限制了,只顯示小於或等於自己的訪問級別。不過.. 。我試圖阻止的是這樣的...

用戶加載站點,獲取源表單的副本(包括CSRF令牌)在那裏創建一個簡單的HTML表單桌面修改訪問級別設置,他們可以很容易地創建一個管理員埃維爾帳戶...

有沒有辦法制止這種使用CSRF ......或者我應該只依靠原點從一個「關閉服務器」來阻止它的源

我也希望得到一些此設置的最佳實踐提示,當CSRF ...

還有其他形式的網站上也有類似的功能,所以我覺得這需要一個每個表單解決方案

歡呼聲......喔並保持它的簡單,如果可能:)

回答

2

有沒有辦法制止這種使用CSRF ......或者我應該只依靠起源於從未來停止一個「關閉服務器」源

否時,既不方法是有效的。用戶可以使用Web檢查器輕鬆注入新值,或通過從實際頁面複製CSRF令牌。

檢查輸入項!如果用戶嘗試添加新用戶,請在讓他們繼續前查看他們的權限。不要依賴輸入表單來應用這些限制。

應用CSRF檢查還是其他原因(例如,爲了防止劫持管理員的會話的惡意網站)是一個好主意,但它不能保護你的授權用戶。

+0

乾杯我會去該選項:) – Sandman112

0

這是我使用的是什麼,我希望它的主頁上很好地解決

我開始會話和

session_start(); 

    if (empty($_SESSION['token'])) { 
     $_SESSION['token'] = bin2hex(random_bytes(32)); 
    } 

我使用bin2hex,但你可以嘗試其他方法哈希生成過多會話令牌。

登錄PHP頁面上添加該

if (isset($_POST['Login']) && !empty($_POST['token'])) { 
    if (hash_equals($_SESSION['token'], $_POST['token'])) { 

    //execute script 
    } 
} 

檢查,如果會話令牌啓動,如果HTML的輸入值相匹配。

這個隱藏記號輸入添加到您的HTML表單$_POST['token']

<input type="hidden" name="token" value="<?php echo $_SESSION['token'];?>"> 
+0

這不會真正解決了OP的問題,但... – duskwuff