2017-05-30 116 views
0

我有一個任務,以防止ASP.Net Web應用程序中的SQL注入。有一個評論文本框,測試人員將其標記爲SQL注入的可能位置。將文本插入到數據庫的提交按鈕事件已使用Oracle參數化的SQLCommand。但是在測試時,我能夠插入「選擇'duff'」;「作爲評論。所以我很好奇如何防止SQL注入,當我可以找到人說使用參數。所有的建議表示讚賞。謝謝。以下是調用存儲過程的行。提交之前消毒Asp.Net文本框,以防止SQL注入

dbCommand = db.GetStoredProcCommand("ABC.Insert_My_Comment"); 
db.AddInParameter(dbCommand, "in_comments", DbType.String, obj.Comments); 
db.ExecuteNonQuery(dbCommand); 
+0

你的代碼看起來很好。用戶是否將這個標籤作爲文本框的唯一原因標記爲可能的sql注入? –

+0

我猜這就是背後的原因。但我不知何故應該阻止插入任何類型的SQL。我曾考慮過正則表達式驗證,但是您是否知道其他方法?並感謝您的意見。 – jhorton

+1

你應該防止將sql查詢的文本插入到註釋字段中?這看起來並不像你的時間用得很好,說實話。註釋是否作爲針對數據庫的查詢運行?這與防止SQL注入不同。注射將是如果有人把''); DROP TABLE COMMENTS;'到註釋框中,並且它實際上丟棄了該表。它不會,因爲你的代碼只會將該文本放入註釋字段。那有意義嗎? –

回答

1

SQL注入

只要你使用的參數和存儲過程,你的系統是合理的,從SQL注入的保護。

如果你的滲透測試人員還在給你關於它的日子不好過,告訴他們你實現一致的緩解與OWASP guidance,具體選項。如果他們繼續給你不好過,問他們哪些具體injection test失敗,是什麼特定的failure mode or criticality, 和/或它們是否能夠觸發任何惡意或不需要的系統行爲。如果他們無法提供與實際行爲不同的預期行爲的特定情況,則它不是可操作的缺陷,您應該將其關閉爲FAD

其他類型的注射

正因爲你是從SQL注入安全並不意味着你不能從所有類型的注射,例如安全有人可能會在該字段中注入HTML,以支持reflected XSS attack。如果您的網站中有任何頁面將該評論字段吐出到頁面上,請確保您對HTML內容進行了正確的編碼,並確保沒有人能強制您的網站將Script標記呈現在頁面中間。

+0

這是一個很棒的答案。我甚至沒有想到反映的XSS攻擊。我會確保使用HTML編碼。謝謝。 – jhorton

1

只要你把註釋放在參數中,它就不能用於注射。

當您生成動態查詢字符串時會出現問題,例如; "INSERT INTO COMMENTS Comment = '" + userComment + "'"