【问题标题】:Pass email as a parameter for SQL query, PostreSQL, JAVA将电子邮件作为参数传递给 SQL 查询、PostreSQL、JAVA
【发布时间】:2015-11-20 23:14:10
【问题描述】:

我正在尝试将电子邮件作为参数传递给我的 JAVA 后端中的 SELECT SQL 查询。 据我了解,由于某种原因,它仅从“email_name@email.com”传递“email_name”。 (收到此错误):

Threw a SQLException creating the list of blogs.
ERROR: column "email_name" does not exist
  Position: 174

存在一个包含“email_name@email.com”的行。 (为什么是“ERROR: column”?根据查询它应该寻找一个值,不是吗?)

这是我的查询:

        String active_user = "email_name@email.com"; //email_name@email.com - example, active_user receive some path variable and on this particular moment(before query execution) contains exactly "email_name@email.com".
        ResultSet rs = st.executeQuery("SELECT \n" +
                "  goods.item_title, \n" +
                "  goods.item_descr, \n" +
                "  goods.item_email,\n" +
                "  goods.item_images,\n" +
                "  goods.item_phone, \n" +
                "  goods.item_price \n" +
                "FROM \n" +
                "  public.goods\n" +
                "WHERE goods.owner = "+active_user+"\n" +
                "ORDER BY\n" +
                "  goods.item_id ASC;");

所以问题是 - 如何将完整的电子邮件传递给查询?

【问题讨论】:

  • 您应该查看 PreparedStatement 而不是执行原始 SQL。这可能导致 SQL 注入。它还将解决您的问题(因为您错过了 active_user 周围的引号)。
  • 哇哇哇哇哇。检测到 SQL 注入。您的电子邮件 bobby@tables.com');DROP TABLE goods;-- 的用户刚刚使您的系统崩溃。见bobby-tables.comen.wikipedia.org/wiki/SQL_injection

标签: java postgresql


【解决方案1】:

尝试使用String active_user = "'email_name@email.com'";。用单引号。因为当你使用双引号时 postgre 被识别为列。

您应该使用PreparedStatement。这是example

【讨论】:

    【解决方案2】:

    非常不安全的方法,你应该使用PreparedStatement来避免SQL注入。这是现有的answer

    【讨论】:

      猜你喜欢
      • 2019-09-11
      • 2016-08-15
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多