我有一個搜索表,其中用戶將能夠與所述類型的過濾器來過濾結果:防止SQL注入從形式生成的SQL - NO PreparedStmts
- 領域[名稱],值[約翰] 刪除 規則
- 領域姓氏],值[布萊克], 刪除規則
- 領域有孩子],值[是], 刪除規則
- 添加規則
因此,用戶將可以設置任意組過濾器,這將從根本上導致一個完全動態的WHERE子句。今後我也將必須執行更復雜的邏輯表達式,如
其中(名稱=約翰或名稱=尼克)AND(姓=布雷克或姓氏=伯恩),
所有10個字段的用戶可能會或可能不會過濾,我不知道用戶將設置多少個和哪些過濾器。所以,我不能使用預先準備好的語句(假定至少我們知道WHERE子句中的字段)。這就是爲什麼準備好的語句不幸出現問題,我必須用普通的舊生成的SQL來完成。
我可以採取什麼措施來保護應用程序免受SQL注入(REGEX或其他方式)?
我不明白爲什麼準備好的陳述是不可能的。 – 2010-05-17 20:32:47
由於可過濾的10個字段,我不知道用戶要過濾多少個字段。所以,我可能只在名稱(WHERE NAME ='XXX')或過濾更多字段(WHERE NAME ='XXX'和SURNAME ='YYY'和.....)過濾。每種可能的過濾器組合都需要一個不同的預備聲明。這就是爲什麼準備好的聲明在這裏沒有問題的原因。 – 2010-05-17 20:48:13
然後動態構建並綁定準備的語句。擁有可變數量的參數從來就不是一個障礙,並且實際上比通過字符串連接處理查詢構建更容易,我認爲這是您之前做的。 – 2010-05-17 23:48:57