在java开发中会经常用到数据库,与数据库打交道的地方多了,数据安全隐患也相应多了,下边就常用的数据库连接工具分析下数据安全的处理:
1.jdbc方式连接数据库:
1.1通常我们都是使用statement去执行sql语句,其实使用这种方式存在很大的安全隐患,需要我们去过滤sql语句,否则一些不法份子很轻易的即可入侵数据库执行非法操作
String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";
如果我们把[' or '1' = '1]作为varpasswd传入进来.用户名随意,看看会成为什么?
select * from tb_name = '随意' and passwd = '' or '1' = '1';
因为'1'='1'肯定成立,所以可以任何通过验证.更有甚者:
把[';drop table tb_name;]作为varpasswd传入进来,则:
select * from tb_name = '随意' and passwd = '';drop table tb_name;有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行.
1.2其实我们可以采用perstatement,则查询操作变为
perstmt = con.prepareStatement("select * from tb where name=? and password=?");
perstmt.setString(1,var1);
perstmt.setString(2,var2);
每一种数据库都会尽最大努力对预编译语句提供最大的性能优化.因为预编译语句有可能被重复调用.所以语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行.这并不是说只有一个Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配.那么在任何时候就可以不需要再次编译而可以直接执行.而statement的语句中,即使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配.比如:
insert into tb_name (col1,col2) values ('11','22');
insert into tb_name (col1,col2) values ('11','23');
即使是相同操作但因为数据内容不一样,所以整个个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存.这样每执行一次都要对传入的语句编译一次.
当然并不是所以预编译语句都一定会被缓存,数据库本身会用一种策略,比如使用频度等因素来决定什么时候不再缓存已有的预编译结果.以保存有更多的空间存储新的预编译语句.
而如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.(前提是数据库本身支持预编译,但上前可能没有什么服务端数据库不支持编译了,只有少数的桌面数据库,就是直接文件访问的那些)只要全使用预编译语句,你就用不着对传入的数据做任何过虑.
2.hibernate
原理同jdbc方式一样,单纯的用hql语句来执行些数据库操作的话很容易注入恶意sql,所以建议多采用?和setProperty的方式来实现数据的传输
分享到:
相关推荐
手册分为五大块:编程规约、异常日志、MySQL数据库、工程结构、安全规约,涵盖了Java开发中的各个方面。 编程规约 编程规约是Java开发手册的核心部分,旨在规范Java开发者的编程风格和编码习惯。编程规约包括命名...
从阿里巴巴集团技术团队的集体智慧结晶和经验总结的《Java开发手册》(泰山版)中,我们可以总结出以下知识点: 1. Java 开发手册的重要性:软件行业的高速发展对开发者的综合素质要求越来越高,不仅需要编程知识点...
Java开发手册(黄山版2022) ...Java开发手册(黄山版2022)是帮助Java开发者提高编程质量和效率的重要工具,涵盖了编程中的各个方面,为开发者提供了详细的规约和指南,旨在提高代码的可读性、可维护性和可扩展性。
该文档对项目的需求、功能、性能、界面、数据存储、安全等方面进行了详细的描述,以便开发团队能够按照要求进行开发和测试。 以下是该文档的详细解释: 1. 编写目的 该文档的编写目的是为了确保项目的正确实施,...
今日给大家介绍一下java 日志的数据脱敏的实现方法,可以更好的保护数据的安全,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
阿里巴巴java开发规范手册详细规范了java以及mysql数据库创建时的具体要求。分为编程规约、异常处理、Mysql规约、工程规约、安全规约等。编程规约包含命名规约、常量定义、格式规约、oop规约、集合处理、并发处理、...
Java开发人员需要及时更新和升级Java平台和相关组件,以确保应用程序不受已知漏洞的影响。 安全审计和监控:Java应用程序的安全性还需要进行定期的审计和监控,以检测异常行为、潜在的攻击和安全事件。安全审计和...
而数据安全包括数据传输过程中的安全防范措施,包括数据完整性、传输安全性,接收/发送方不可否认性等方面。下面就数据完整性验证部分做简单的介绍。 下载过程中,没有被其他程序算改过?其他程序可能是网络传输过程...
OPC UA-java源代码及示例: OPC基金会 (OPC Foundation) 发布了最新的数据通讯统一方法--OPC统一架构 (OPC UA), 涵盖了OPC 实时数据访问规范、OPC历史数据访问规范 、 OPC 报警事件访问规范 和OPC安全协议 的不同...
JAVA开发人员必备是HTML格式的 JavaTM 2 Platform Standard Edition 6 API 规范 本文档是 Java 2 Platform Standard Edition 6.0 的 API 规范。 请参见: 描述 Java 2 Platform 软件包 java.applet 提供创建 ...
在 Java web 项目开发中,需要掌握多种技术,包括 Java 语言、面向对象分析设计思想、设计模式和框架结构、XML 语言、网页脚本语言、数据库、应用服务器、集成开发环境等。 Java 语言 Java 语言体系比较庞大,包括...
Java开发作业基于JavaSwing实现的动作类游戏源码.zipJava开发作业基于JavaSwing实现的动作类游戏源码.zipJava开发作业基于JavaSwing实现的动作类游戏源码.zipJava开发作业基于JavaSwing实现的动作类游戏源码.zipJava...
高并发编程是Java开发中非常重要的一部分,包括线程安全、锁机制、原子操作等。面试中可能会问到JUC包中的类和方法,例如ReentrantLock、AtomicInteger等。 4. JVM内存管理 JVM内存管理是Java开发中非常重要的一...
XML 语言是 Java Web 项目开发中最重要的数据交换格式。 XML 语言提供了一个统一的格式,允许开发人员使用 XML 语言来交换数据。 5. 网页脚本语言 网页脚本语言是 Java Web 项目开发中最重要的技术之一。 网页脚本...
Java 安全编码是 Java 开发语言中的一项重要考虑因素。Java 安全编码的主要目标是保护 Web 应用程序免受各种攻击和漏洞的影响。下面是 Java 安全编码的详细知识点: 1. SQL 注入攻击 SQL 注入攻击是一种常见的 Web...
安卓开发基于Java开发的DLNA投屏项目源码(课程大作业).zip安卓开发基于Java开发的DLNA投屏项目源码(课程大作业).zip安卓开发基于Java开发的DLNA投屏项目源码(课程大作业).zip安卓开发基于Java开发的DLNA投屏项目源码...
2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也...
在技术要求方面,Java开发工程师需要具备计算机相关专业,大学本科及以上学历,3年以上工作经验,并熟悉Linux操作系统、基本算法和数据结构、基本的信息安全知识。此外,Java开发工程师还需要熟悉ORACLE数据库开发...
Java开发基于seetaface6人脸识别(活体检测)的封装源码.zipJava开发基于seetaface6人脸识别(活体检测)的封装源码.zipJava开发基于seetaface6人脸识别(活体检测)的封装源码.zipJava开发基于seetaface6人脸识别...
java开发springboot+shiro企业门户完整前后端系统源码。基于bootdo开发的企业门户完整前后台系统 附带完整门户前端功能:首页、新闻列表及详情、轮播等; 后端增加新闻文章发布、产品图、基础信息功能; 技术选型 1...