假设我想在我的 Java 应用程序中连接到 oracle 数据库,我将不得不写下 jdbc url 并输入该数据库的用户名和密码,如果没有程序的源,我不知道如何破解这个密码,但我必须加密吗?有没有办法加密?那么sql注入呢?
3 回答
你并没有真正提供足够的信息来了解你的全部情况,但我会尝试分解一些你可能想知道的一般事情。首先,需要为 db 驱动程序提供未加密的用户名/密码,因此如果您担心内存中的信息未加密,那并不会真正产生影响。通常有比尝试扫描内存以查找用户名/密码字符串更简单的方法来访问您的数据库。
如果您正在创建一个将分发字节码(.class 文件或 .jar 文件)的应用程序,那么人们可以在技术上通过该字节码并找到硬编码的字符串,例如用户名/密码(但即使你有字符串,也可能很难确定它们到底是什么)。
如果您正在制作一个将在 Web 服务器上运行的应用程序,那么无论如何都没有人可以访问您的字节码或内存,因此这应该是不可能的(除非他们已经入侵了您的服务器事先某种方式)让他们获得任何这些信息。但是,您可能希望将数据库连接信息外部化到属性文件中,以便管理软件的人可以轻松配置它,尽管根据您的要求可能并非如此。
SQL 注入是一个完全不同的问题,对于我来说有点过于宽泛,无法在此处讨论。我建议您阅读处理它的方法,但很大程度上归结为使用准备好的语句,而不仅仅是执行 SQL(这通常也会提高您的性能)。
我正在使用 Java 编写注册表单,我遇到了同样的问题。对我来说唯一有意义的是使用 php 表单进行注册,这样他们就不会访问您的数据库,而只能通过服务器进行通信。我没有授予用户对数据库的权限,而是以某种方式设想了一种单向加密方法,该方法仅在用户输入密码时对其进行散列后才将密码与散列匹配。对黑客行为有所了解后,我觉得用户可以访问的任何信息都是安全漏洞。版主多次说过不要在源代码中以纯文本形式存储密码。SQL 有一些方法可以提供有限的数据库权限,您可以根据需要删除信息。
下面是一个我有点信任的链接,但它基本上给自己留下了一个纸质痕迹,其中必须从隐藏在某处的 zip 文件中提取哈希,在身份验证期间检索它,然后可以将其添加到网站
https://www.pkware.com/software/developer-tools/sdk/toolkit-for-java
您可以encrypt
使用密码将其存储在数据库或安全区域中AES algorithm
。当您构建JDBC URL
时,检索此信息和decrypt
它。可以从此链接获得更多信息:
Java 256-bit AES Password-Based Encryption
SQL 注入是代码中的另一种vulnerabilities
存在,因为没有对用于构造 SQL 语句的数据进行验证。