WEB安全--SQL注入--预防SQL注入的一些方法
一、使用预编译查询
如PHP的PDO、JAVA的PreparedStatement,先用?占位,再将输入的字符当做参数填充到查询语句中;这一过程将输入的内容视为了字符串,无法通过单引号、注释符等逃逸出来,所以返回的查询结果只有两种true、false。
二、对用户输入过滤
这个方式就比较好想到,在前端或后端代码中人为地写一些waf来处理前端接收到的内容。在对本身业务没有太大影响的前提下可以通过正则表达式过滤一些危险的字符(' -- # /**/ ())、函数(outfile()、updatexml())和关键字(select、where)等等。
同时也可以根据当时的场景设置一些黑名单或白名单来排除不必要的隐患。
三、用户最小权限
最小权限原则是一种安全性原则,指的是为了保护敏感数据和系统资源,用户应该被授予最小必需的权限。这意味着用户只能访问和执行他们工作所需的数据库对象和操作,而不是拥有对整个数据库的完全访问权限。
使用最小权限原则可以减少潜在的安全风险和数据泄露的可能性。通过限制用户的权限,可以防止他们对数据库中的敏感数据进行未经授权的访问、修改或删除;如load_file()、into outfile等函数必须要root权限才能使用。
四、使用ORM框架
ORM(对象关系映射)框架是一种将对象模型和关系数据库之间进行映射的技术。它允许开发人员使用面向对象的方式操作数据库,而不需要编写繁琐的SQL语句。ORM框架将数据库表映射为对象,将表的行映射为对象的属性,将表之间的关系映射为对象之间的关联。
ORM框架的优点包括提高开发效率、减少代码量、简化数据库操作、提供对象级别的查询和持久化等。常见的Java ORM框架包括Hibernate、MyBatis和Spring Data JPA等。使用这种方式替代拼接查询,有效避免SQL注入。
五、 使用防火墙、IPS、IDS
将它们部署在资产中,负责代理检测用户输入的流量和输出流量,能有效的识别危险语句和数据,并拦截流量封锁源IP。
市面上的安全公司所推出的产品有很多,如深信服的AI赋能防火墙、长亭科技的雷池waf、360安全云等。
六、重视数据库密码和登录
定期修改数据库管理员的密码,并且密码强度一定要高;如果没有特殊的业务或工作需求,禁止管理员远程登录数据库。