SqlUtil.java 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package com.jsh.erp.utils;
  2. import com.jsh.erp.exception.UtilException;
  3. /**
  4. * sql操作工具类
  5. *
  6. * @author ji-sheng-hua
  7. */
  8. public class SqlUtil
  9. {
  10. /**
  11. * 定义常用的 sql关键字
  12. */
  13. public static String SQL_REGEX = "and |extractvalue|updatexml|exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |or |+|user()";
  14. /**
  15. * 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序)
  16. */
  17. public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+";
  18. /**
  19. * 限制orderBy最大长度
  20. */
  21. private static final int ORDER_BY_MAX_LENGTH = 500;
  22. /**
  23. * 检查字符,防止注入绕过
  24. */
  25. public static String escapeOrderBySql(String value)
  26. {
  27. if (StringUtil.isNotEmpty(value) && !isValidOrderBySql(value))
  28. {
  29. throw new UtilException("参数不符合规范,不能进行查询");
  30. }
  31. if (StringUtil.length(value) > ORDER_BY_MAX_LENGTH)
  32. {
  33. throw new UtilException("参数已超过最大限制,不能进行查询");
  34. }
  35. return value;
  36. }
  37. /**
  38. * 验证 order by 语法是否符合规范
  39. */
  40. public static boolean isValidOrderBySql(String value)
  41. {
  42. return value.matches(SQL_PATTERN);
  43. }
  44. }