当使用Hibernate和Postgres FTS时,tsquery似乎是合适的。但是,每当我尝试输入“'”或其他一些奇怪的字符组合时,似乎会出现主题异常。它甚至似乎都不接受两个字。如果用单引号括起字符串,则布尔运算符如|停止工作。我想知道是否还有处理这个异常。我已经为每一种方法添加了投掷,但它看起来像是撞在墙上。这是我的代码:
"SELECT FROM cat c where "+ args.get(0)+" @@ "+ "to_tsquery("+ args.get(1) + ")";
这就是Hibernate生成的内容。
"Hibernate: select fulltextse0_.name as name2_ from posts fulltextse0_ where
fulltextse0_.textsearchable_index_col @@ to_tsquery(?)=true order by
fulltextse0_.id asc limit ?"
arg0是fulltext字段的名称,arg1是从Web表单传递给它的字符串。
答案 0 :(得分:2)
您的代码无法遵循SQL的基本正确做法,即:永远不要将用户提供的数据直接替换为SQL字符串。这将打开您SQL injection个洞,并且还会导致各种令人兴奋的错误。您已经发现了这些错误,谢天谢地,有人利用您的数据库。