我有以下代码片段,其中检查soap结果并将数据插入到我的数据库中。
Connection dbconn = null;
Statement stmt1 = null;
Statement stmt2 = null;
try
{
dbconn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1", "tes1", "te15");
stmt1 = dbconn.createStatement();
stmt2 = dbconn.createStatement();
DateFormat outDf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = Calendar.getInstance().getTime();
String value = null;
for (int i = 0; i < list.getLength(); i++)
{
Element eElement = (Element) e.getChildNodes();
String Contents = eElement.getElementsByTagName("Content").item(0).getTextContent();
String insertCommand = "INSERT INTO command SET content='"+content+"'";
System.out.println("\n SET INSERT :" + insertCommand);
int count = stmt1.executeUpdate(insertCommand);
}
}
我注意到的内容是DCN5�716732412
?因此,当我将此内容用于下一个进程时,我收到错误的请求错误。如果内容本身有一些有趣的特征可以避免,我该如何消毒呢?
答案 0 :(得分:1)
您需要使用@Gurwinder Singh建议的准备好的声明
关注OWASP网站(example from this other answer on StackOverflow)上的https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet或此页面,它将向您展示如何安全地执行此操作,但简而言之,如下所示:
String custname = request.getParameter("customerName"); // This should REALLY be validated too
// perform input validation to detect attacks
String query = "SELECT account_balance FROM user_data WHERE user_name = ? ";
PreparedStatement pstmt = connection.prepareStatement( query );
pstmt.setString( 1, custname);
ResultSet results = pstmt.executeQuery( );
如果你想允许字符为unicode字符,你需要use a unicode connection string and table, i think,并确保你的表也设置为存储unicode - 如果你想支持亚洲字符,你会无论如何可能需要。
确保告诉JDBC使用哪种编码。这是在连接到DB时作为查询字符串的一部分完成的。这是关键部分:?useUnicode=yes&characterEncoding=UTF-8
。
Connection con = DriverManager.getConnection(“jdbc:mysql:// localhost:3306 / dbname?useUnicode = yes&amp; characterEncoding = UTF-8”,“username”,“password”);
确保您的表使用UTF-8。我通常选择“编码:UTF-8 Unicode(utf8)”和“校对:utf8_bin”
从以上链接中窃取。