{eval=Array;=+count(Array);}
1.凡事涉及到用户输入操作的必须前后端检验,尽可能限制输入的范围,例如排除特殊字符
2. 数据库必须只能内网访问,涉及到sql操作必须使用预编译,防止sql直接提交到数据库,例如mybatis的#占位符,而不是$
3. 鉴权:所有涉及到面向客户的操作须鉴权,防止出现暴力破解情况,核心接口可做访问统计,限流控制,错误信息个性化定制,不暴露内部信息,一般使用内部约定的错误码等形式
1. 能不用sql语句就不用
比如很多orm 框架或库都将sql语句操作隐藏起来了,你直接 new 一个对象,然后insert. 或 update. 从数据库取出来也是一个对象。
2. 非要用sql,尽量用预编译
预编译的流程是先预编译,然后绑定执行。 绑定时不会发生直接执行sql语句的注入问题
3. 即使用非预编译的sql 也有周边工具防止注入
工具就自己找吧,多的是。如 java 的 mybatis 的 sql类,xml中的#{},go语言内置库中的多参数 exec 方法等等
4
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答