針對SQL注入缺陷的典型控件是使用綁定變量(cfqueryparam標籤),驗證字符串數據並轉向實際SQL層的存儲過程。這一切都很好,我同意,但是,如果該網站是一個遺留的網站,它具有很多動態查詢功能。然後,重寫所有查詢是一項艱鉅的任務,需要進行大量的迴歸和性能測試。我正在考慮使用動態SQL過濾器並在調用cfquery之前調用它來執行實際操作。針對動態查詢的SQL注入保護
我發現CFLib.org一個過濾器(http://www.cflib.org/udf/sqlSafe):
<cfscript>
/**
* Cleans string of potential sql injection.
*
* @param string String to modify. (Required)
* @return Returns a string.
* @author Bryan Murphy ([email protected])
* @version 1, May 26, 2005
*/
function metaguardSQLSafe(string) {
var sqlList = "-- ,'";
var replacementList = "#chr(38)##chr(35)##chr(52)##chr(53)##chr(59)##chr(38)##chr(35)##chr(52)##chr(53)##chr(59)# , #chr(38)##chr(35)##chr(51)##chr(57)##chr(59)#";
return trim(replaceList(string , sqlList , replacementList));
}
</cfscript>
這似乎是一個非常簡單的過濾器,我想知道是否有辦法改進它,或者拿出一個解決方案更好
你是絕對正確的。我的觀點是,重構數百個使用cfqueryparam的查詢涉及更長的測試周期,而不是重新連接現有的函數以利用中央函數在執行前清理輸入。那麼,你可以說在一天結束的時候,這仍然涉及到嚴格的測試,這是事實,但至少它是集中包含的。 你碰巧知道一個很好的開源功能(理想情況下在CF中)完成這項工作嗎? – user164701 2010-06-09 14:24:26