如何在插入db之前避免搞笑角色和消毒?

时间:2016-12-29 19:10:51

标签: java mysql

我有以下代码片段,其中检查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?因此,当我将此内容用于下一个进程时,我收到错误的请求错误。如果内容本身有一些有趣的特征可以避免,我该如何消毒呢?

1 个答案:

答案 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”

从以上链接中窃取。