1.如果没有使用PreparedStatement预处理 sql语句注入之后为:
select * from user where username = 'monkey' and password = '123456' or '1' = '1';
该用户密码直接导致sql语句查询的时候跳过密码验证,
2.如果使用了接口PreparedStatement进行预处理 sql语句注入之后为:
select * from user where username = 'monkey' and password = '123456\' or \'1\' = \'1';
两者的区别就在于:用户输入的所有字符,均会通过\(转义字符)转换成普通文本,让特殊符号失去其特殊含义,从而保证放进password中的值只是字符串.
本文对比了未使用PreparedStatement时SQL注入的风险与使用后转义字符保护的差异,强调了预处理语句在防止SQL注入中的关键作用。
1万+

被折叠的 条评论
为什么被折叠?



