我是JDBC新手,新项目要求我使用JDBC。我想知道的是,
是JDBC安全吗?
如何防止“Mysql Injection”式问题?
使用JDBC时需要注意哪些安全问题?
如何确保,我的意思是优化安全性,以防止黑客攻击数据库?
编辑:
我试过谷歌,如果我谷歌:
“php mysql安全问题”=>它给出了很多结果
如果我谷歌:
“jdbc mysql安全问题”=>几乎看不到任何相关的页面
这是不是意味着,使用jdbc是安全的?不需要担心被黑客入侵吗?
答案 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特有的。
如何确保,我的意思是优化安全性,以防止黑客攻击数据库?
答案 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之前,始终使用字段验证器,匹配某些特定的正则表达式规则。