SQL注入前端
利用现有的应用程序,将恶意的SQL命令注入到存在安全问题的应用程序的后台数据库,使得对数据库的操做不按照设计者的意图去操做。
源代码:select id from users where username = '"+username +"' and password = '" + password +" SQL注入:select id from users where username = 'abc' or 1 = 1-- and password = '123' 注入后你随便输入用户名和密码即可以登陆
前端:对用户输入的信息进行校验,避免使用操做数据库的字段、对单引号和双"-"进行转换等。sql
后台:数据库
1. 永远不要使用动态拼装sql,可使用参数化的sql或者直接使用存储过程进行数据查询存取。安全
好比mybatis中: <if test="goodsName != null"> AND goods_name LIKE CONCAT('%','${goodsName}','%') </if> <if test="goodsName != null"> AND goods_name LIKE CONCAT('%',#{goodsName},'%') </if>
2. 应用程序抛出的异常进行分装,避免暴露数据库结构。mybatis
3. 不一样应用程序使用不一样的数据库权限。加密
4. 对于机密的信息进行加密,好比密码等。spa