sql注入相关知识

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,933评论 0 13
  • MSSQL 跨库查询(臭要饭的!黑夜) 榨干MS SQL最后一滴血 SQL语句参考及记录集对象详解 关于SQL S...
    碧海生曲阅读 5,917评论 0 1
  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,257评论 0 0
  • 每一种选择,都有得失,有得必有失;每一种方向,都有各自的炫彩,各样的不同凡响。暗换的路口,碌碌的行者,时时刻刻做着...
    酒分阅读 203评论 0 5
  • 上周末,A君约我出去吃饭看电影,问我周六和周日哪天有时间,本来定好周六和我老妈逛街,周日参加一个关系很好的小学同学...
    小精灵灰豆xy阅读 608评论 4 3

友情链接更多精彩内容