接手的代码扫描时检测出安全漏洞 像这种的代码 如何进行修改?
给你个关键字:参数化sql
你的用户名密码直接拼接进sql语句里面,如果有人知道了你的这个规则,然后在用户名密码的文本框里输入一个完整的sql语句,拼接进你的sql语句里面执行,这就叫sql注入。黑客可以利用这个手段随便修改你的数据库。
-=-=-=-=-=
参数化就是将sql语句和值进行分离,如果有人写了一大堆sql语句放进username里,参数化后的sql会将它整个当做字符串而不是命令
-=-=-=-=
另,别信什么临时变量之类的胡话,你内部怎么折腾变量检测器才检测不到呢。检测器的原理其实就是在username文本框里输入一个单引号,如果你已经做了sql参数化,那么单引号就会被当做字符串处理而不会报错,否则单引号作为sql命令的一部分就会报错,检测器只要发现输入了单引号你的页面崩溃就会判断你的页面不安全。
把字符串放在一个临时变量里面,方法的参数放变量名而不是直接放字符串
可以使用占位符.前面有人提到过了
你确认是拼接造成你的,你改成如下的写死的
String sql1="set password for abc=password('abc')'
这样就能通过了?
1.占位符,临时变量,参数化sql,这些都是指定在合理的检测机制下来给出的方案;
2.没有明确 检测机制 或说出具体的检测方法就来给出修改建议,都是片面的;
3.楼上的各个方案的基础都是基于sql方面的格式或代码方面的方式;
1.一般来说,前端要处理输入参数的转义和验证;
2.同理,后端也需要进行输入参数的转义和验证;(这是各大ORM框架的基本安全配备)
3.你自己写的sql,肯定没有这个,所以绝对是不安全的。