时间:2021-07-01 10:21:17 帮助过:12人阅读
Statement createStatement = conn.createStatement();
createStatement.executeQuery(sql);
(3)那么攻击者就可以通过传入这样的参数对系统进行试探:
a=1%27;select%20*%20from%20user
也就是a=1‘;select * from user
(4)这时候后台sql会变成
select * from tb_test where a = ‘1‘;select * from user
如果系统中存在user表,返回值为{"state":"1","msg":"Success"}
如果系统中不存在user表,返回值为{"state":"0","msg":"Error"}
攻击者就很容易通过这样的手段对系统进行猜测和破坏(假如没有限制执行的是查询,那么参数弄成delete或者update,就可以为所欲为了……)。
解决方法:
(1)使用PreparedStatement进行sql预编译,用参数化查询的方式处理sql;
(2)限定sql操作范围,比如使用注解@ReadOnly修饰查询服务等;
(3)对输入参数进行严格的格式校验,剔除所有可能的异常值;
(4)使用一些能够处理此类问题的开源框架;
(5)其他可行方法;
扩展学习
盲注手法:
https://www.cnblogs.com/fengh/p/6183928.html
https://www.cnblogs.com/lcamry/p/5763129.html
盲注常用方法:
http://blog.sina.com.cn/s/blog_15e7bc4bb0102wclz.html
逃过appscan盲注的最简单方法:
http://blog.csdn.net/arthurzil/article/details/6863213
appscan误报盲注解决方案:
http://blog.csdn.net/huqingpeng321/article/details/53521616
sql盲注
标签:范围 功能 开源 readonly 服务 .net 框架 程序 art