2013-02-28 49 views
0

我在Webdev的noobie,我試圖得到一些信息服務器的安全性有多危險 coudl是這樣的代碼,沒有數據驗證HTML(表格)注射

<form id="test" name="test" method="post" action=""> 
<input type="hidden" value="" name="tst"> 
<input type="reset" onclick="test.submit()" value="test"> 
</form> 

我知道我們可以注入HTML代碼甚至是js腳本,但對服務器端來說是危險的嗎?

+5

任何危險完全取決於您對收到的數據所做的事情。如果你完全忽略它,那就沒有危險。如果你對它做了什麼,可能會有,但這取決於你在做什麼。 – Quentin 2013-02-28 16:37:08

回答

1

從這裏唯一可更改的項目是tst字段。

作爲一般規則,表單中的任何字段都可以由客戶端(是的,甚至隱藏的字段)進行更改,所以您應該過濾所有字段(通過PHP或其他方法中的mysqli :: real_escape_string())正在進入數據庫,或者如果您正在使用此字段在服務器上包含()一些其他項目。如果只是針對條件投擲字段(並且不會在別處使用),則無需過濾,但額外的安全性不會受到傷害。

至於注入HTML/JS的東西,它只適用於其他腳本顯示提交的HTML。在這種情況下,請致電htmlspecialchars(_uni)以確保它們不會運行。

+0

「除了提交和重置可以由客戶端更改」 - 什麼?編輯這些就像打開控制檯並點擊輸入的「value」屬性一樣簡單。 「你不需要過濾,如果你只是把場放在條件」真的嗎?所以'1或TRUE''從TBL中刪除ID = 1或TRUE'(同樣適用於轉義引號等)。然而,使用預準備語句是另一回事。 – 2013-02-28 16:48:36

+0

從我的理解被瀏覽器忽略。也許我應該更好地迴應我的反應,但誰會關心這兩個呢? – tyteen4a03 2013-02-28 16:53:10

+0

不是真的。當你通過form.submit()提交時,submit按鈕不會被序列化,但是當你通過一個具有'name'屬性的提交按鈕來提交表單時,它的'value'也會被髮送到PHP 。當你在表單中有多個提交按鈕並被一些php框架使用時,這很有用。 – 2013-02-28 17:34:20

1

用戶可以很容易地編輯隱藏輸入的值,因此可以很容易地損壞您的網站。根據這個表單的功能,你至少應該添加斜槓和htmlentities。這隻在數據發送到服務器時才重要。

2

您的前端表單的實際結構對服務器端安全沒有實際影響。這一切都取決於服務器在數據通過後對數據做了什麼。使用Firebug,Chrome開發工具等,任何用戶都可以在網站上從頭開始編寫,修改和提交表單。或者他們可以直接發送post/get變量,從未見過你的表單...... 前端驗證和結構完全是提示和協助用戶,而不是爲你的應用提供安全。永遠不要依賴它受到用戶的尊重。

而且(預留),爲什麼不使用的

<input type="submit" value="test"> 

代替

<input type="reset" onclick="test.submit()" value="test"> 

+0

只有驗證是我們不解釋php代碼,但用戶可以「編輯」html代碼或添加自己的js代碼 – whd 2013-02-28 16:57:13

+0

如果服務器上沒有'post'處理程序(即,e在服務器上沒有代碼來解釋提交的信息),那麼就沒有真正的風險 - 一些老版本的PHP和ASP(可能還有其他版本)存在攻擊者可以提交大量數據的漏洞(數百萬)的POST變量,而負責將提交的變量放入數組的自動過程會鎖定......但現代默認值可以防止這種情況發生,並且無論如何,在您的站點上存在或不存在表單的情況下都存在漏洞。 – 2013-02-28 17:13:00