2013-07-20 63 views
1

我不是100%肯定,如果這是大問題了我認爲它是正確的,但現在我想我可能會發現一個問題,或者在其他內孔檢查Chrome中的元素查看器。谷歌瀏覽器檢查元素髮出帶有隱藏標識的

我用(我現在已經改變了我的設置)隱藏標識的設置了一些默認的,一個是用戶層面,另一個是讓用戶主動默認。

但是,當我在檢查元素視圖中查看這些ID並更改值時,提交表單會將NEW值提交給服務器,而不是我給出的值。

例如:

我有這樣的事情我的代碼中使用以下,

<input type="hidden" name="data[user][level][id]" value="1" id="MyID"> 

我再檢查視圖中改變了它,

<input type="hidden" name="data[user][level][id]" value="2" id="MyID"> 

然後我提交表單而感到驚訝的是,新的值被提交,我總是inpresion下隱藏的ID的地方不能改變,瀏覽器應該只提交中保存的默認值。

我現在已經改變了這又讓數據庫默認爲基本用戶,然後我可以改變用戶設定有我想。但在某些情況下,這可能不是一種選擇,所以我希望得到一個關於如何使這更安全的答案或一些反饋。

我只是有點慢,是否有更好的方法(不同的方法)將'隱藏'的數據從表單傳遞到服務器?

我正在考慮使用JQuery在用戶選擇/提交表單時向表單添加所需的隱藏字段,但我不確定這是否100%安全,或者即使它是一個好主意。

任何想法/反饋是非常歡迎.....

非常感謝,

格倫。

回答

0

我發現了一個更好的方式來做到這一點,至少在CakePHP。 CakePHP框架內置了安全調用。這些內置的函數在添加時給你提供了各種各樣的東西,但我使用它們的主要原因是爲了阻止這種形式的篡改。

我不是100%肯定它是如何做到這一點,但它增加了一個記號,以各種形式,並檢查是否提交的形式是正確的?再次不確定令牌如何工作。

但這裏是我使用的代碼::

public function beforeFilter() { 
    $this->Auth->allow('index', 'SystemAccess'); 
    $this->Security->blackHoleCallback = 'blackhole'; 
} 

public function blackhole($type) { 
    $this->Auth->logout(); 
    $this->Session->setFlash('Sorry a security issue has been detected, please try again or contact us for support.', 'default', array(), 'bad'); 
    $this->redirect($this->Auth->redirect('/')); 
} 

現在,我將添加呼叫的驗證登出我加入到這一額外增加安全性,因爲用戶可能已經登錄一個系統上它不是那些試圖做他們不應該做的事情的人。

希望能幫助別人!

但這只是CakePHP使用時的一個修復。我會認爲其他框架會有他們的選擇,但如果您只使用基本的HTML?或者像Drupal這樣的內容管理系統,可能會有內置的安全性。

很多謝謝

格倫。

0

我有數據庫中的數據傳送到一個模式同樣的問題,我知道解決的辦法是使用jQuery的Ajax獲得請求文件,從數據庫中的信息,將它們添加到變量和比較變量

$.ajax({ 
    url: "test.html", 
    context: document.body 
}).done(function() { 
    $(this).addClass("done"); 
}); 

我用這個代碼示例來做到這一點。 當然有一些修改取決於你的腳本

0

我發現這個問題的唯一安全和最佳解決方案是檢查服務器端與表單發送的user_id是否是相同的user_id登錄與否。

雖然使用jQuery是好主意,但是,作爲使用的數據是沒有用我的情況下工作:$(本).serialize(),

但是這裏是我在服務器端的代碼(注意,我使用Laravel 5.4,但我肯定不會和你的情況沒關係)

if ($request->user_id != Auth::user()->id) 
     return json_encode("F**K YOU ! Don't Play Smart -_- !"); 
    else 
     raw_material_category::create($request->all()); 

希望這有助於;)