[英]SQL Injection through Hibernate-Criteria & Session.save(object)
我非常确定Criteria-Object将创建安全的HSQL。
你必须小心Expression对象。 您可以在那里创建SQL注入。 但是看一下生成的SQL: Hibernate show real SQL
编辑:除非Hibernate中存在巨大的错误,否则您无需确保在保存之前对String
进行转义。 Hibernate使用预处理语句。 所以没有字符串连接,也没有Hibernate会话的SQL注入。
在使用Hibernate读取输出后,您可能必须转义输出。 例如:您有一个实体用户
class User{
String name;
}
并且您调用用户“'或1 = 1; DROP DATABASE用户; - ”该字符串将存储在数据库中。 如果您使用Criterion对象查询用户,您将找到他(删除数据库)。 如果使用Expression对象查询User,则可以删除数据库(如果您隐藏了Strings)。
如果将用户的名称输出为HTML,则必须转义输出。 否则,名为"/><script>evilJavascript()</script>
将对您的应用程序不利。
编辑2:看看这里: https : //www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
Criteria不允许你自己编写易受攻击的SQL / HQL,因此SQL注入应该没有任何问题(除非Hibernate本身存在错误)。
编辑 :
正如@ckuetbach所指出的,Criteria实际上允许您使用Expression.sql(String sql)
或Restrictions.sqlRestriction(String)
编写SQL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.