課程
/后端開發(fā)
/Java
/JDBC之 “ 對岸的女孩看過來”
通過StringBulider拼接SQL語句,這樣的寫法,對于sql注入怎么處理呢
2016-08-03
源自:JDBC之 “ 對岸的女孩看過來” 2-6
正在回答
對 于 JDBC而言, SQL注入 攻 擊 只 對 Statement有效, 對 PreparedStatement 是無效的, 這 是因 為 PreparedStatement 不允 許 在不同的插入 時間 改 變查詢 的 邏輯結 構。 ?如 驗證 用 戶 是否存在的 SQL語 句 為 : ?select count(*) from usertable where name='用 戶 名 ' and pswd='密 碼 '如果在 用 戶 名字段 中 輸 入 ' or '1'='1' or '1'='1或是在 密 碼 字段 中 輸 入 1' or '1'='1將 繞過驗證 ,但 這種 手段只 對 只 對 Statement有效, 對 PreparedStatement 無效。 ?PreparedStatement 相 對 Statement有以下 優(yōu) 點: ?1.防注入攻擊 ?2.多次運行速度快 ?3.防止數(shù)據(jù)庫緩沖區(qū)溢出 ?4.代 碼 的可讀性可維護性好
------------------------參數(shù)過濾器----------------------------
2-6里面講了類似參數(shù)過濾器的概念
DAO類:
StringBuilder sb = new StringBuilder();
sb.append(" select * from goddess where 1=1");
sb.append(" and "+map.get("name")+" "+map.get("rela")+" "+map.get("value"));
【注釋:該語句為 查詢什么(name),關系是什么(rela),值是什么(value)】
PreparedStatement ptmt = conn.prepareStatement(sb.toString());
-------------
ACTION類:
param.put("name", "user_name");
param.put("rela", "=");
param.put("value", "'小美'");
params.add(param);
List<Goddess> result = g.query(params);
不好意思,你指的是sql語句中有占位符?的那種,這個我知道,但在JDBC之對面的女孩看過來2-6中,并沒有用到占位符?,而是把參數(shù)直接拼裝到了sql語句,所以有此疑問,如果要添加個參數(shù)過濾器,又該怎么添加
StringBuilder 拼接成sql語句 然后預處理時候傳參,將StringBuilder的字符串參數(shù)傳入就可以了
舉報
一起領略JDBC的奧秘,為進一步學習集成框架打下良好的基礎
1 回答Java insert sql,亂碼怎么處理?
1 回答關于鏈表注入對象的問題
4 回答where 1=1 不會導致sql注入嗎?
2 回答在更新女神信息的時候怎么處理輸入為null的狀況啊
1 回答sql導入提示文件頂層存在無效內(nèi)容怎么辦?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學習伙伴
掃描二維碼關注慕課網(wǎng)微信公眾號
2016-11-13
對 于 JDBC而言, SQL注入 攻 擊 只 對 Statement有效, 對 PreparedStatement 是無效的, 這 是因 為 PreparedStatement 不允 許 在不同的插入 時間 改 變查詢 的 邏輯結 構。 ?
如 驗證 用 戶 是否存在的 SQL語 句 為 : ?
select count(*) from usertable where name='用 戶 名 ' and pswd='密 碼 '
如果在 用 戶 名字段 中 輸 入 ' or '1'='1' or '1'='1
或是在 密 碼 字段 中 輸 入 1' or '1'='1
將 繞過驗證 ,但 這種 手段只 對 只 對 Statement有效, 對 PreparedStatement 無效。 ?
PreparedStatement 相 對 Statement有以下 優(yōu) 點: ?
1.防注入攻擊 ?
2.多次運行速度快 ?
3.防止數(shù)據(jù)庫緩沖區(qū)溢出 ?
4.代 碼 的可讀性可維護性好
------------------------參數(shù)過濾器----------------------------
2-6里面講了類似參數(shù)過濾器的概念
DAO類:
StringBuilder sb = new StringBuilder();
sb.append(" select * from goddess where 1=1");
sb.append(" and "+map.get("name")+" "+map.get("rela")+" "+map.get("value"));
【注釋:該語句為 查詢什么(name),關系是什么(rela),值是什么(value)】
PreparedStatement ptmt = conn.prepareStatement(sb.toString());
-------------
ACTION類:
param.put("name", "user_name");
param.put("rela", "=");
param.put("value", "'小美'");
params.add(param);
List<Goddess> result = g.query(params);
2016-08-04
不好意思,你指的是sql語句中有占位符?的那種,這個我知道,但在JDBC之對面的女孩看過來2-6中,并沒有用到占位符?,而是把參數(shù)直接拼裝到了sql語句,所以有此疑問,如果要添加個參數(shù)過濾器,又該怎么添加
2016-08-03
StringBuilder 拼接成sql語句 然后預處理時候傳參,將StringBuilder的字符串參數(shù)傳入就可以了