作者jeff21115 (问苍天)
看板java
标题[问题] 关於prepareStatement
时间Sat Oct 1 10:03:05 2016
各位大大 我想请问一下
用preparedStatement 可以把完整的sql指令当成一个参数传入吗?
例如
//sql为方法传入的参数 内容视为整的sql指令
PreparedStatement pstmt = null;
String sss = "?";
pstmt = con.prepareStatement(sss);
pstmt.setString(1,sql)
pstmt.executeQuery();
我试过这样写 程式会错误 网页开不起来 想请问一下 要怎麽解决
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.192.223.29
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1475287389.A.378.html
1F:→ pttworld: 未测试,猜测会认等於符号。 10/01 10:40
2F:→ pttworld: 至少是一定格式。 10/01 10:40
3F:→ qrtt1: 没有 error message 是要大家观落阴吗@@? 10/01 11:52
4F:推 haha02: 我记得是不行 10/01 14:35
5F:推 haha02: 他是需要driver支援的 不是单纯像String.format那种字串代 10/01 14:37
6F:→ haha02: 换 不过也许有某套driver允许你这样搞 who knows 10/01 14:37
因为东西只能在测试环境跑 所以手边也没LOG可以上传来看
其实我也不想这样写 只是前几天CODESCAN的时候 扫出一堆有风险的写法
因为大多是STATEMENT.EXECUTE()这方面 所以想说改用PREPARESTATEMENT
把整串SQL当参数传入 之前试过这样CODESCAN扫可以过 不过这写法有错不能用
所以想问 大家有没有改写的方法@@
※ 编辑: jeff21115 (123.192.223.29), 10/01/2016 17:10:34
7F:→ ssccg: preparedstatement设定的参数,传到DB就会是单纯的资料而 10/01 21:12
8F:→ ssccg: 不会被当成sql解析,所以把完整的sql当参数传入是毫无意义 10/01 21:13
9F:→ ssccg: preparedstatement就是把资料和sql分离,一般是要避免把资 10/01 21:15
10F:→ ssccg: 料直接组进sql,但是当然反过来sql放到资料也是不行的 10/01 21:15
11F:→ ssccg: 你把被认为有风险的程式贴来看看问题在哪才是真的 10/01 21:17
例如
protected ArrayList AABB(Connection con, String sql, boolean isTrim) throws
ServiceException, SQLException, Exception {
ArrayList aList = new ArrayList();
Statement stm = null;
ResultSet rs = null;
ResultSetMetaData rsmd = null;
try {
stm = con.createStatement();
rs = stm.executeQuery(sql);
while (rs.next()) {
例如像这样的一个方法 SQL传入後就被执行 扫描的时候会被认为有风险
对於这种情况 不知道该怎麽改
※ 编辑: jeff21115 (123.192.223.29), 10/01/2016 21:59:22
12F:→ ssccg: 你的sql是个固定字串? 10/01 22:09
13F:推 haha02: SQL如果是有包含user敲的资料组出来的字串的话会有被SQL 10/01 22:14
14F:→ haha02: inject的风险 如果前面已经有先检核过输入排除风险关键字 10/01 22:14
15F:→ haha02: 的话 也许可以写报告说这个问题另外防止掉了来结案 10/01 22:15
16F:→ haha02: 或是这个方法都是执行不含user输入的SQL 那也解释的过去 10/01 22:16
感谢大大的意见 明天跟前辈讨论看看
※ 编辑: jeff21115 (123.192.223.29), 10/01/2016 22:33:25
17F:推 yoshilin: execute改prepared应该算textbook很好找sample 10/01 23:06
18F:推 swpoker: 不行,要是可以的话就惨了 10/03 01:31