JDBC_Statememt注入

博客讨论了SQL Statement注入的问题,当用户输入包含SQL关键字时可能导致数据安全风险。通过举例展示了如何利用PreparedStatement来防止这种注入,强调了在处理带有字符串参数的SQL查询时使用PreparedStatement进行预处理的重要性,以确保数据库的安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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语句里的特殊字符进行预处理。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值