JAVA是强类型的语言,所以自身存在的安全问题比较少,但是不代表不存在,
存在sql注入的唯一就是sql语句中有order by 这条语句。
存在SQL注入的条件:
只要破坏如上两个条件中的一个就可以破坏sql注入,JAVA破坏如上条件使用的是sql语句预编译技术:
由于PHP预编译比较简单,对理解JAVA预编译有帮助,先讲PHP预编译:
$pdo = new PDO('mysql:host=localhost;dbname=spider','root','901026');
}catch (PDOException $e)
{echo $e->errorInfo;
}
$sql = 'select * from ip where id=?'; //SQL模板$stmt = $pdo->prepare($sql); //预编译技术
$stmt->bindValue(1,1); //把1这个数据插入到SQL模板中
$stmt->execute();
$result = $stmt->fetchAll();
var_dump($result);
如上所示,如果没有预编译,sql语句是这样的
select * from ip where id=
,后面可以添加参数形成sql注入select * from ip where id=-1 union select 1,2,3
,由于使用预编译技术,先构造sql模板,再插入数据,使得你输入的数据都被当成一个个整体select * from ip where id="-1 union select 1,2,3"
,sql语句原来的含义没有改变,所以基本上不存在sql注入,当然除了如下的情况:
JAVA预编译之order by
WebGoat SQL注入之 Order by注入解题思路