美文网首页
sql注入相关知识

sql注入相关知识

作者: Challis | 来源:发表于2018-12-26 15:25 被阅读0次

    1.概述

    昨天面试被问了sql注入相关的问题,不会,只有自己来学习了

    SQL注入攻击是黑客数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况,需要构造巧妙的SQL语句,从而成功获取想要的数据。

    原文链接:https://www.jianshu.com/p/dc7f63e46f4c

    举个简单的例子:正常的查询语句:select * from table where username = xxx and password = xxx ,如果再登录中不做处理,这样写用户名:
    'or 1 = 1 -- 这样的话,密码不写,则查询语句则变成了select * from table where username = '' or 1 = 1 -- and password = '' ,则是不需要密码就可以登录了
    或者直接用户名这样填写:'; drop database mysql; 则直接将数据库删除

    2. 应对方法

    • 再excute里面有一个参数args可以防止注入
      错误用法 :
      sql = "select * from table where id=%d and name=%s" %(id, name)
      正确用法:
      args = (id, name)
      sql = "select * from table where id=%d and name=%s"
      cursor.execute(sql, args)
    • 将字符串进行转义
    def fun(s):
        value = s.replace('\\', '\\\\')
        value = value.replace('\0', '\\0')
        value = value.replace('\n', '\\n')
        value = value.replace('\r', '\\r')
        value = value.replace('\032', '\\Z')
        value = value.replace("'", "\\'")
        value = value.replace('"', '\\"')
        return value
    

    相关文章

      网友评论

          本文标题:sql注入相关知识

          本文链接:https://www.haomeiwen.com/subject/zbchlqtx.html