2011-07-13 45 views
1

我正在使用Jquery/Ajax/PHP/MYSQL一個非常簡單的1層評論系統。該頁面最初顯示用戶可以回覆的主要評論。在MYSQL語句中使用來自div id的數據安全嗎?

<div id="com100">Parent Comment</div> 

我建議使用值父評論的div ID,COM100,如在MYSQLINSERT語句給每個相應答覆父ID

我的問題:這是安全嗎?任何用戶都不能更改div's id值?可能插入與錯誤評論相關的回覆,或者更糟?

正在驗證數據,正在使用bindParam。我更關心回覆被存儲在錯誤的父註釋下。任何建議表示讚賞。

+0

是的,'id'值可以被任何用戶改變。至少,我可以通過Firefox上的Firebug做到這一點。所以不要嘗試它。 – afaolek

+0

也這麼想。謝謝afaolek – m14Grl

回答

6

主要問題,真的是如何將div ID傳遞給後端。據推測,使用您正在使用的技術,您將使用Javascript/jQuery獲取ID,然後使用標準POST請求將其發送到服務器。在這種情況下,這是易受攻擊的POST請求。有人將能夠讀取您的代碼,查看數據如何發送到服務器,然後用不同的ID僞造相同的呼叫。

到目前爲止,在客戶端,您通常可以很好地依賴DIV的ID - 在沒有使用jQuery進行驗證的情況下抓取它們,假設它們是正確的服務器生成的值,並且等等。在進入POST之後,應該在服務器端驗證ID。該ID是否有意義?這個評論是否存在?經過身份驗證的用戶是否允許在該父母ID下發表評論,等等。

因此,不要擔心人們在文檔中更改DIV ID,因爲這只是一種複雜而不太可能的方式來做可能做的事情無論如何,都有僞造的POST請求。但驗證數據的服務器端,一旦POST用武之地。

從根本上說,這不要緊,你有多少做驗證在客戶端,作爲一個攻擊者不必使用任何您的代碼僞造POST請求。他們只需要知道您要發佈的URL以及POST變量的名稱,通過閱讀代碼或簡單地攔截您的有效POST請求,這些變量將始終易於使用。您可以在客戶端驗證是否存在真正的用戶錯誤,甚至是您自己代碼中的錯誤,但是您應該在服務器端驗證安全性和數據完整性。

+0

優秀的答案。謝謝你,馬特。數據驗證已經實施,但尚未確保POST請求。要開始學習如何現在。附:我還喜歡下面的其他評論。 – m14Grl

4

這是安全嗎?

取決於你所說的安全。

您永遠不會信任用戶輸入。用戶可以隨時更改「父註釋」的值。

您需要確保允許用戶在服務器端發佈包含該父註釋的評論。

+0

-1。 div ID不是用戶輸入。 – EJP

+0

@EJP,據我所知,op是從div的id中提取父註釋的id。 – Dogbert

+0

是的,它由HTML呈現機制定義,而不是由用戶定義。 – EJP

2

對我來說,混合顯示屬性和數據庫屬性似乎是一個非常愚蠢的想法。無法保證它們始終保持同步。

+0

我將在這裏點擊Stack Overflow的這個「Add Comment」框的ID是「comments-link-6677324」,它將被用來發送一個Ajax請求到後端以添加評論到答案中該數據庫ID。只是一個觀察! –

相關問題