2016-08-03 31 views
0

我正在構建一個簡單的ToDo應用程序並與Facebook連接。使用AJAX將php變量添加到MySQL,但隱藏DOM中的值

我希望人們能夠創建一個新的待辦事項列表並將其註冊到數據庫(我使用Ajax)。我將在下面放置代碼和我的問題。

<a id="submit-list" href="#"> 
    <div class="list-adder"> 
     <input class="hidden" name="unique_url" id="uniqueUrl" type="text" value="<?php echo generateRandomString(); ?>" /> 
     <input class="hidden" name="user_id" id="userId" type="text" value="<?php echo $_SESSION['FBID']; ?>" /> 
     <input class="hidden" name="user_name" id="userName" type="text" value="<?php echo $_SESSION['FULLNAME']; ?>" /> 
     <input type="text" placeholder="List Title" name="add_list" class="add_list" id="addList" /> 
     <span id="submit_list">Add List</span> <i class="icon-plus"></i> 
    </div> 
</a> 

所以在這裏我把名單唯一的URL,標題和Facebook的用戶ID和全名

我送過來的細節,阿賈克斯,並從那裏到數據庫。一切都很完美。但是,可能存在安全問題。如果我檢查此表單,我會在源代碼中看到用戶標識和名稱,如以下截圖所示: http://image.prntscr.com/image/59dab8aca0694f89989ef1e0f59b9fc4.png two muppets http://image.prntscr.com/image/59dab8aca0694f89989ef1e0f59b9fc4.png 而且,如果編輯用戶標識或名稱,編輯後的數據將發送到數據庫。

有什麼辦法可以確保用戶的真實數據發送到數據庫而不是編輯的數據嗎?

謝謝。

+0

如果是阿賈克斯,那麼你就可以攔截實際表單提交與JS代碼,添加/刪除/修改你想要的任何形式的值,然後做與實際數據提交的另一份。 –

+1

只需在插入數據庫之前添加一些驗證?您已經知道user_id應該與$ _SESSION ['FBID']相同。如果它不告訴用戶數據無效。 – iyop45

+0

@MarcB如果驗證是客戶端,那麼它仍然易受攻擊 – iyop45

回答

1

將某些東西放入表單的唯一原因是因爲您在後續請求中需要該數據,而這些數據不能從其他地方獲得。

但是您已經在用戶會話中擁有這些數據 - 將它打印到表單中是沒有意義的,以便將其提供給下一個請求 - 它已經可用於下一個請求。

從表單中刪除user_iduser_name領域,以及構建您的查詢時,而不是從請求讀取這些值,從會話

0

這完美的解決方案是使用會話閱讀它們,但如果你想要將其用作輸入,您可以在頁面啓動後刪除字段。

雖然不是子彈頭。

var USER_ID = null; 
var USER_NAME = null; 

$(function() 
{ 
    USER_ID = $('#userId').val(); 
    USER_NAME = $('#userName').val(); 

    $('#userId').remove(); 
    $('#userName').remove(); 

    $.post('..', {'userId' : USER_ID }) .. 
});