SQL注入一直是熱門話題,尤其是在涉及Web安全時。在這方面,我感興趣的是應該採取哪些步驟來防止在任何Web應用程序中進行SQL注入?除了這些正常步驟之外,人們還有其他措施可以阻止它嗎?
SQL注入一直是熱門話題,尤其是在涉及Web安全時。在這方面,我感興趣的是應該採取哪些步驟來防止在任何Web應用程序中進行SQL注入?除了這些正常步驟之外,人們還有其他措施可以阻止它嗎?
在這個問題上已經有很好的答案,但是我想再提一些:
這僅用於預防,而我沒有採取 sql服務器強化。但是有很多相似之處。
在您已經很容易受到注入攻擊的情況下的其他防禦措施是:
準備好的語句,參數化查詢,轉義所有用戶輸入的內容,對於一個好的入門者來說,請參見 http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet。
主要的防禦措施是僅使用安全逃避數據庫查詢的API-這些通常稱為參數化或準備好的語句。並非在所有情況下都可以使用它們(例如,在運行時提供表或列名之類的SQL標識符),但在可能的情況下(大多數情況下),這是最好的方法。
注意-這可能導致有害數據被放入數據庫中,因此請注意在應用程序中其他位置使用此數據時
第二個防禦措施是採用轉義方法。這是“用兩個引號替換一個單引號”的方法。如果您需要這樣做,則必須轉義每個可能有害的字符,這在某些情況下意味著不僅僅是單引號。我建議如果可能的話,使用更高級別的庫,例如OWASP ESAPI,或者仔細閱讀OWASP SQL注入備忘單(上文參考)。
的基本知識,保護Web應用程序免受SQL注入的主要步驟是正確清理任何用戶輸入(尤其是在SQL查詢中使用的輸入)。在某些語言/框架中,存在處理這些值的標準方法-例如,使用參數化查詢而不是通過聯接字符串值來構成查詢。
從Web開發人員的角度,應該注意Weber已經提到的內容。
此外,可以設置數據庫防火牆,例如GreenSQL: http://www.greensql.net/。它就像您的應用程序和用戶輸入之間的代理一樣工作,監視應該傳遞的內容等。但是,這會增加響應時間。
我正在教授理工學院的IT安全性。通常,對於學生來說,他們對用於SQL注入的術語有些困惑,所以讓我嘗試澄清一下。普通的Web用戶在數據字段中輸入SQL代碼,例如,在登錄表單的文本框中輸入
'OR'1'='1。
最佳人選防止SQL注入是Web開發人員,也就是負責為Web應用程序編寫代碼以將數據讀/寫到數據庫的人。
防止Web開發人員進行SQL注入的最簡單方法是使用參數化查詢。
準備好的語句和參數化查詢是同一回事。
從現在開始,我將使用參數化查詢。
參數化查詢是指首先定義SQL代碼,然後將數據放置在適當參數內的方式。 name` = @name其中id = @id
@name參數和@id是數據。其餘的是SQL代碼。
請記住,參數化查詢通常是 ,但並非總是 是在Web應用程序代碼中完成的。
有2種常見的編寫參數化查詢的方法。
從某種意義上講,是的存儲過程是參數化查詢的一種形式。
還有其他防止SQL注入的方法,即轉義單引號等特殊字符。例如,在PHP中,您可以使用mysql_real_escape_string,它基本上只在單引號前加上斜杠。有關更多詳細信息,請參見此pdf。
長話短說,建議的所有選項都與清理(清理)用戶輸入有關,以清理SQL代碼。
最好的方法是根據所使用的編程語言使用參數化查詢。 / p>
故事結尾。
使用體面的數據訪問API,可以輕鬆安全地執行正確的操作。
這裡是ActiveRecord v3:
#基本用法@user =用戶。 where(:username = >'joe@example.com')。first#具有SQL字符串片段,但使用parameters @ projects = @ user.projects.where('status =?',params [:status])