sql注入的一点学习(待更新)

什么是sql注入???

通过把SQL命令插入到Web表单递交输入域名页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

 

假如数据库中有一张商品表goods,存放多条商品信息

当执行sql语句

select * from goods where id = 1;

查询结果当然为一条数据

当执行sql语句

select * from goods where id = 1 or  6;

这时候的执行结果会是什么呢???

结果是所有的商品信息数据都会被查询出来。

这只是查询操作,如果是被人恶意执行删除操作,那就凉凉了

当我们python代码中执行连接数据库,获取cursor对象来执行sql语句的时候,不要以拼接字符串的形式拼接sql语句,例如根据用户输入的id来拼接sql语句

sql  =  """select  *  from  goods  where id = %s;"""%id

如何安全的执行sql语句呢???

sql = """select  *  from  goods  where id = %s;"""

在游标对象执行sql语句的时候传参

游标对象.execute(sql语句,(参数...))  

 

如何防止sql注入???

1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。

2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。

5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。

 

posted @ 2018-07-22 12:20  TotoroCoder^_^  阅读(152)  评论(0编辑  收藏  举报