zoukankan      html  css  js  c++  java
  • 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.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。

  • 相关阅读:
    HDU 2444 The Accomodation of Students (判断是否是二分图,然后求最大匹配)
    HDU 1045 Fire Net (二分匹配)
    Leangoo如何颠覆传统项目管理软件?
    团队协作神器:Leangoo
    Leangoo-让工作更简单
    leangoo 轻量级项目协作和列表管理平台
    团队协作中的“贵族”leangoo
    使用leangoo实现多泳道任务看板
    项目管理工具到底应该为谁服务?
    《精益创业实战》读书笔记
  • 原文地址:https://www.cnblogs.com/ajiuna/p/9349673.html
Copyright © 2011-2022 走看看