JAVA—SQL注入
2024-09-07 13:39:48
之前看到的一道java面试题,Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入
前面部分比较好回答
1、PreparedStatement支持动态设置参数,Statement不支持。
2、PreparedStatement可避免如类似单引号的编码麻烦。
3、PreparedStatement支持预编译,Statement不支持。
4、在sql语句出错时PreparedStatement不易检查,而Statement则更便于查错。
(如果有不完善欢迎补充)
而什么是sql注入?
sql注入是攻击者通过sql注入漏洞绕过应用程序安全措施,检索整个sql数据库内容,甚至进行插入删除修改操作。简而言之,就是攻击者用拼接sql语句可以直接对sql进行增删改查。
比如select * from table where name = "+appName+",利用appName参数值的输入,来生成恶意的sql语句,如将['or'1'='1'] 传入可在数据库中执行。
sql注入攻击类型有很多。主要有带内注入,带外注入,盲注入。
如何防止sql注入?
1.尽量少使用或者不使用动态sql,这样可以减少用户提供的sql直接放入语句。
2.对数据库一些敏感内容进行加密存储,比如密码,电话等。
3.限制数据库权限。
4.不要直接向用户显示数据库错误,因为攻击者可以通过错误信息获取一定的有用信息。
5.对访问数据库的Web应用程序使用Web应用程序防火墙(WAF),这个比较直接,防火墙通过设置,进行判断,如果是sql注入,直接给你拦外边了,不会继续提交请求。
6.更新数据库,减少漏洞
最新文章
- 自定义控件之圆形的image
- 单例模式(Java)
- windows10, 安装wamp无法启动服务的问题
- git介绍
- GENERATED_UCLASS_BODY 和 GENERATED_BODY 区别
- 代码大全 MSIL语言程序设计
- 七、TCP/IP协议
- Python-Day9 Paramiko模块/进程/线程/RabbitMQ队列
- 【二分】Codeforces 706B Interesting drink
- oracle之replace结合substr的使用
- 精确覆盖DLX算法模板
- ADS-B显示终端5.9
- Python 变量作用域,闭包和装饰器
- nnet3配置中的上下文和chunk(块)大小
- Spring的AOP开发的相关术语
- vue图表
- Alpha(4/10)
- 在Spring中配置SQL server 2000
- Atitit.播放系统规划新版本 and 最近版本回顾 v3  pbf.doc  1 版本11 (ing)41.1 规划h5本地缓存系列 41.2 Android版本app41.3 双类别系统,
- AngularJS自定义Directive初体验