慕碼人2483693
2019-06-20 17:14:11
Java-轉(zhuǎn)義字符串以防止sql注入我試圖在java中引入一些反SQL注入,我發(fā)現(xiàn)很難使用“replaceAll”字符串函數(shù)。最終,我需要一個轉(zhuǎn)換任何現(xiàn)有函數(shù)的函數(shù)。\到\\,任何"到\",任何'到\',還有任何\n到\\n這樣,當字符串被MySQL計算時,SQL注入就會被阻塞。我已經(jīng)整理了一些我正在使用的代碼和所有的\\\\\\\\\\\在功能上讓我的眼睛發(fā)狂。如果有人碰巧有這樣的例子,我會非常感激的。
3 回答

慕仙森
TA貢獻1827條經(jīng)驗 獲得超8個贊
PreparedStatement是可行的,因為它們使SQL注入成為不可能。下面是一個簡單的示例,將用戶的輸入作為參數(shù):
public?insertUser(String?name,?String?email)?{ ???Connection?conn?=?null; ???PreparedStatement?stmt?=?null; ???try?{ ??????conn?=?setupTheDatabaseConnectionSomehow(); ??????stmt?=?conn.prepareStatement("INSERT?INTO?person?(name,?email)?values?(?,??)"); ??????stmt.setString(1,?name); ??????stmt.setString(2,?email); ??????stmt.executeUpdate(); ???} ???finally?{ ??????try?{ ?????????if?(stmt?!=?null)?{?stmt.close();?} ??????} ??????catch?(Exception?e)?{ ?????????//?log?this?error ??????} ??????try?{ ?????????if?(conn?!=?null)?{?conn.close();?} ??????} ??????catch?(Exception?e)?{ ?????????//?log?this?error ??????} ???}}
無論名稱和電子郵件中有哪些字符,這些字符都將直接放在數(shù)據(jù)庫中。它們不會以任何方式影響INSERT語句。
對于不同的數(shù)據(jù)類型,有不同的集合方法-使用哪種方法取決于數(shù)據(jù)庫字段是什么。例如,如果數(shù)據(jù)庫中有整數(shù)列,則應(yīng)使用setInt
方法?;I備情況文件列出所有可用于設(shè)置和獲取數(shù)據(jù)的不同方法。

ITMISS
TA貢獻1871條經(jīng)驗 獲得超8個贊
添加回答
舉報
0/150
提交
取消