Sql-Server

你能讓 MS Sql Server 拒絕所有匹配特定模式的查詢嗎?

  • August 6, 2009

我想知道您是否可以讓 Sql Server 查看傳入的查詢字元串並拒絕與特定模式匹配的查詢字元串。換句話說,對於某一類查詢(可能由正則表達式標識),我想知道是否可以讓 Sql Server 返回錯誤消息,而不是像往常一樣處理它們。

更具體地說,並給出一個潛在的案例,請考慮對 Sql Injection attack 的描述。如果我的網站受到這些技術的持續攻擊,並且如果修補網站看起來是一個漫長的過程,那麼(如果 Sql 允許的話)嘗試通過在 Sql 中添加一些基本上說

如果查詢匹配正則表達式*CAST(0x$$ 0-9A-Za-z $${20,}*然後不要執行它!

我的猜測是,如果這種過濾是可能的,那麼這樣做需要編寫某種自定義的 Sql Server 載入項 DLL。但也許您可以使用 Sql Server 2008 的內置審計功能來做類似的事情?我真的不知道,我不確定文件中的哪個位置是開始查找的最佳位置。

如果你想指出為什麼數據庫是一個試圖阻止 sql 注入攻擊的愚蠢地方,那很好。但我的主要問題不是在這個特定案例中這是否是一個好主意,而是這種查詢過濾/拒絕是否可能。

你的預感是正確的:數據庫是解決這個問題的錯誤地方。SQL 注入起作用的全部原因是這些命令是有效的 SQL。通常,當您的應用程序將查詢傳遞給數據庫伺服器時,特殊字元已轉換回普通文本。

如果您不想在應用程序級別緩解此問題,那麼您應該研究軟體防火牆解決方案,例如 dotDefender。在我看來,這也是在錯誤的地方攻擊問題,最終會通過防火牆的邏輯。

引用自:https://serverfault.com/questions/50699