JDBC安全吗?

时间:2009-08-18 03:07:04

标签: java database security jdbc

我是JDBC新手,新项目要求我使用JDBC。我想知道的是,

是JDBC安全吗?

如何防止“Mysql Injection”式问题?

使用JDBC时需要注意哪些安全问题?

如何确保,我的意思是优化安全性,以防止黑客攻击数据库?

编辑:

我试过谷歌,如果我谷歌:

“php mysql安全问题”=>它给出了很多结果

如果我谷歌:

“jdbc mysql安全问题”=>几乎看不到任何相关的页面

这是不是意味着,使用jdbc是安全的?不需要担心被黑客入侵吗?

6 个答案:

答案 0 :(得分:12)

使用prepared statements。对于假设登录,您可以使用此选项,例如:

PreparedStatement stmt = conn.prepareStatement("SELECT * FROM member WHERE member_username = ? AND member_password = ?");
stmt.setString(1, username);
stmt.setString(2, password);
stmt.execute();

ResultSet rs = stmt.getResultSet();
// ...

这将完全保护您免受SQL注入漏洞的攻击。<​​/ p>

答案 1 :(得分:10)

  

是JDBC安全吗?

JDBC的安全性是您使用的JDBC驱动程序的属性。通常,如果您的驱动程序使用SSL传输层,则它与SSL密钥的强度一样安全。如果它使用未加密的传输,则不安全。

  

如何防止“Mysql Injection”式问题?

在为JDBC编写SQL查询时,请注意不要包含可能包含嵌入式SQL的“原始”字符串。例如:

String query = "SELECT * FROM SOME_TABLE WHERE X = '" + someString + "' ;";

如果someString包含未转义的“'”字符,那么您打算成为SQL文字字符串的内容实际上可以更改为完全不同的内容。修复是拒绝someString如果它包含任何“'”字符(或其他恶意),或者使用插入SQL字符串转义的方法对其进行预处理。

另一种(更简单/更可靠)方法是使用带有“?”的预准备语句占位符并使用setString(...)等将值注入查询。

  

使用JDBC时需要注意哪些安全问题?

除了上述内容之外,我不知道JDBC的具体内容。实际上,上述问题都不是JDBC特有的。

  

如何确保,我的意思是优化安全性,以防止黑客攻击数据库?

  1. 购买/阅读有关构建安全系统的好书。
  2. 小心。
  3. 支付安全专家的费用来审核您的代码/系统。

答案 2 :(得分:5)

JDBC是一种数据库连接协议,它与所有其他连接数据库的方法一样安全。

大多数安全问题与JDBC协议本身无关。例如,您可以使用Prepared Statement将SQL注入的风险降至最低。无论您如何连接到数据库,都是如此。

答案 3 :(得分:2)

JDBC纯粹是程序和数据库之间的传输。

尽管协议上的签名不易受到网络嗅探的影响,但它是非常安全的,而且,将任何内容注入网络流量非常非常困难。

但是JDBC只是将SQL传输到数据库并返回结果数据集。 如果你的程序对于SQL注入是有趣的,那么无论你使用的是直接连接,odbc还是jdbc,它都会很容易受到攻击。

真正保护自己免受SQL注入的唯一方法是使用带有“?”的预准备语句用户输入的类型占位符。切勿使用不安全的输入将SQL语句串在一起(这包括直接用户输入和用户输入的表中的数据)。

答案 4 :(得分:2)

或者您可以使用实用程序方法:“org.apache.commons.lang.StringEscapeUtils.escapeSql(java.lang.String str)”来防止sql注入发生。

字符串卫生始终是防止sql注入或跨站点脚本攻击的最佳策略。

答案 5 :(得分:0)

在将任何内容传递给DB acceess api之前,始终使用字段验证器,匹配某些特定的正则表达式规则。