Javascript驗證缺乏安全性與JavaScript可能關閉無關。
JavaScript可能被關閉意味着一個誠實的錯誤可能會做錯事,或導致默認的服務器消息,而不是一個有用的。雖然他們可能意外觸發了一個安全問題(我實際上是以用戶的身份完成這項工作的,但最糟糕的是我的輸入是有效的,但我輸入的其中一個人的名字中有一個'
,更多內容見下文)。這影響了誠實但不完美的用戶,而不是餅乾。
一個黑客應該能夠在大約30秒內以不同的值重播一個AJAX請求,其中包括在另一個窗口中在社交媒體網站上做出愚蠢威脅的時間。這在技術上並不困難。這就是爲什麼Javascript驗證沒有安全價值的原因,並且僅僅是爲了驗證對於誠實的錯誤更加用戶友好(通過具有更直接的響應並且能夠將焦點指向不正確的字段)。
此外,這通常不是驗證問題,而是編碼問題。有些人試圖通過禁止可能導致它們的序列來「修復」SQL注入攻擊,這通常意味着禁止撇號字符。然後他們把這個邏輯放到合理包含撇號的字段上。特別是,絕對不要使用名稱字段來做這件事;人們真的不喜歡被告知他們的名字是「錯誤的」,並且更糟糕的是,他們可能會感覺到種族主義或文化不敏感,因爲你會發現他們很多。法國或愛爾蘭的名字,但不常用英文或德文的名字(是的,我知道諾曼起源的英文名字通常有它們,但我也聽到有名字的撇號人在他們的名字中咆哮愚蠢的種族主義網站,不會讓他們輸入他們的名字是正確的,這可能是提出諾曼人作爲糾正的最壞時期)。
驗證在JavaScript中顯然錯誤作爲改進UI的手段。
驗證服務器上顯然是錯誤的,作爲改進UI的手段和捕獲攻擊的方法。
以正確的方式將您的數據傳遞給其他圖層。在SQL方面,這意味着編碼字符串分隔符(再次,'
是最常見的情況,但對於某些數據庫可能還有其他一些分隔符),對此,最好的方法是通過一個庫來完成。在C#的情況下,這意味着使用ADO.NET使用Parameters
,而不是自己構建SQL(這也有其他優點)。
我想說的是,使用SQL * *參數在SQL命令(也可以讓你避免連接包含來自用戶的數據的SQL語句部分)應該刪除大部分問題。 – 2010-10-12 10:53:38