天天看点

JDBC_Statememt注入

SQL的Statement注入 当用户输入的查询条件里含有sql的关键字时: String name1 ="'or  1 or '"; String sql = "SELECT name,owner FROM pet WHERE name ='"+name1+"'";//拼串方式 则替换后的sql语句变为: SELECT name,owner FROM pet WHERE name =''or  1 or ''; 则where后的条件恒为真,会选出所有的记录,造成数据库的不安全 解决方案: 将以下代码: Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("SELECT name,owner FROM pet WHERE name ="+name1+""); 替换为:

   String sql = "SELECT name,owner FROM pet WHERE name=?";    PreparedStatement ps = conn.prepareStatement(sql);      ps.setString(1,name1); //表示将第一个问号替换成name1;    rs = ps.executeQuery();//没有参数,PreparedStatement继承自Statement重载executeQuery()没有参数 当sql语句没有查询条件(增删改查)或者查询条件固定时可以用Statement,sql语句带String参数时要用PreparedStatement,它会对sql语句里的特殊字符进行预处理。