我已经使用hibernate与我的@R_301_457@进行交互,现在我想让我的@R_301_457@层与sql注入安全,所以我做了一些研究,我发现我的查询应该被参数化,所以这意味着如果我只是结构我的HQL查询如:
List mothers = session.createQuery( "select mother from Cat as cat join cat.mother as mother where cat.name = ?") .setString(0,name) .list();@H_404_4@然后它被参数化和保护免受sql注入,或者还有其他我需要做的… @H_404_4@另外一个提到的 – “永远逃避你的数据”怎么可以实现?
解决方法
我不知道setString(),但是如果它与setParameter()相同,那么可以这样做,以防止sql注入.
@H_404_4@更新
@H_404_4@通过转义数据,意味着您必须确保您没有在@R_301_457@中存储危险值.
@H_404_4@例如,如果您传递参数,一个快速的例子
您需要确保您的框架转义所有非法字符,即:更改<到<然后将其插入@R_301_457@.
如果您的框架不这样做,您必须手动执行.
那里有大量图书馆正确地为您释放代码.看看this question例如和那里的答案.
String name = "<script>alert('Hello');</script>"; //insert this name into Mother,and then when you load it from the database,it will be displayed List mothers = session.createQuery( "select mother from Cat as cat join cat.mother as mother where cat.name = ?") .setString(0,name) .list();@H_404_4@对于您的查询,然后下次从@R_301_457@加载它,并将其呈现在您的Web浏览器中,它将运行该脚本.
您需要确保您的框架转义所有非法字符,即:更改<到<然后将其插入@R_301_457@.
如果您的框架不这样做,您必须手动执行.
那里有大量图书馆正确地为您释放代码.看看this question例如和那里的答案.