hibernate里的查询SQL如何做好防SQL注入?

zznj1123 2008-11-22 09:14:35
hibernate里的查询SQL如何做好防SQL注入?期盼答复。
...全文
842 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
頑笑 2008-11-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 APOLLO_TS 的回复:]
FROM TABLE WHERE ABC=?

传进变量变成 'xxx'
FROM TABLE WHERE ABC='xxx'
注入 “5 or 1=1”
也按照‘5 or 1=1’

如果传入‘就说有非法字符串
[/Quote]
当然,可以在客户端做判断,但是这样会降低用户体验,毕竟没有人说‘就不能输入。

这个问题解决的方案至少有两个:
1.使用hql语句查询,例如可以使用下面的语句(写在相应的DAO中)

public List findByProperty(String propertyName, Object value) {
log.debug("finding CmHoliday instance with property: " + propertyName
+ ", value: " + value);
try {
String queryString = "from CmHoliday as model where model."
+ propertyName + "= ?";
return getHibernateTemplate().find(queryString, value);
} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;
}
}

而不要采取拼查询语句的方法。
2.使用离线查询对象DetachedCriteria来进行查询,例如可以使用下面的语句(写在相应的DAO中)

/**
* 根据节假日编号、开始日期和截止日期模糊查询
* @param holidayId
* @param holidayStartingTime0
* @param holidayStartingTime1
* @param holidayDeadLine0
* @param holidayDeadLine1
* @return List
*/
public List findByCondition(String holidayId, String holidayStartingTime0, String holidayStartingTime1, String holidayDeadLine0, String holidayDeadLine1) {
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(CmHoliday.class);

detachedCriteria.add(Restrictions.like("holidayId", holidayId, MatchMode.ANYWHERE));
if(holidayStartingTime0 != null && !holidayStartingTime0.equals("")) {
Date holidayStartingTime = Date.valueOf(holidayStartingTime0);
detachedCriteria.add(Restrictions.ge("holidayStartingTime", holidayStartingTime));
}
if(holidayStartingTime1 != null && !holidayStartingTime1.equals("")) {
Date holidayStartingTime = Date.valueOf(holidayStartingTime1);
detachedCriteria.add(Restrictions.le("holidayStartingTime", holidayStartingTime));
}

if(holidayDeadLine0 != null && !holidayDeadLine0.equals("")) {
Date holidayDeadLine = Date.valueOf(holidayDeadLine0);
detachedCriteria.add(Restrictions.ge("holidayDeadLine", holidayDeadLine));
}
if(holidayDeadLine1 != null && !holidayDeadLine1.equals("")) {
Date holidayDeadLine = Date.valueOf(holidayDeadLine1);
detachedCriteria.add(Restrictions.le("holidayDeadLine", holidayDeadLine));
}

List searchedList = findByCriteria(detachedCriteria);

return searchedList;
}


希望对你有启发。
huaming_fly 2008-11-22
  • 打赏
  • 举报
回复
顶顶
APOLLO_TS 2008-11-22
  • 打赏
  • 举报
回复
FROM TABLE WHERE ABC=?

传进变量变成 'xxx'
FROM TABLE WHERE ABC='xxx'
注入 “5 or 1=1”
也按照‘5 or 1=1’

如果传入‘就说有非法字符串
Dreamsea_2008 2008-11-22
  • 打赏
  • 举报
回复
up
wenlong27 2008-11-22
  • 打赏
  • 举报
回复
加入(54998705)web技术交流群,希望我们有更多机会相互学习交流
頑笑 2008-11-22
  • 打赏
  • 举报
回复
楼主客气。
zznj1123 2008-11-22
  • 打赏
  • 举报
回复
好 谢谢楼上的兄弟 受教了

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧