系统中安全性是非常重要的,为了保证安全性很多解决方案被应用到系统中,比如架设防火墙防止数据库服务器直接暴露给外部访问者、使用数据库的授权机制防止未授权的用户访问数据库,这些解决方案可以很大程度上避免了系统受攻击,但是如果开发人员不注意SQL的安全性造成了SQL注入漏洞,那么所有的这些解决方案都形同虚设了,因为通过SQL注入漏洞,恶意访问者可以堂而皇之的对数据库进行任意操作,因为恶意访问者破坏数据库时所使用的一切操作都看起来是合法。我们来看一下什么是SQL注入漏洞。

到目前为止,本书演示的SQL语句都是静态的SQL语句,比如下面的SQL用于校验用户名为“admin”的用户的密码是否是“123456”,如果密码正确则PwdCorrect的值为true,否则为false:


SELECT (FPassword="123456") AS PwdCorrect FROM T_User WHERE FUser="admin" 在实际开发过程中一般是开发人员提供一个界面,允许用户输入用户名和密码,然后程序读取用户输入用户名和密码来构造SQL 语句来校验用户名和密码是否正确。实现的代码如下: string user=txtUser.getText(); string password = txtPassword.getText(); rs = ExuecuteQuery("SELECT (FPassword=""+password+"") AS PwdCorrect FROM T_User WHERE FUser=""+password+"""); if(rs.getBool("PwdCorrect ")==true) { ShowMessage("密码正确"); } else { ShowMessage("密码错误"); }

这里采用拼接字符串的方式根据用户录入的用户名和密码来构建SQL语句,如果用户名为“guest”,密码为“123456”,那么拼接出来的SQL语句如下:


SELECT (FPassword="123456") AS PwdCorrect FROM T_User WHERE FUser="guest"

这看起来是没有任何问题的,但是试想如果恶意攻击者在用户名输入框中随意输入一个“abc”,而在密码数据框中输入“1" or "1"="1”,那么拼接出来的SQL语句如下:


SELECT (FPassword="1" or "1"="1") AS PwdCorrect FROM T_User WHERE FUser="abc"

由于“"1"="1"”这个表达式永远返回true,而true与任何布尔值的or 运算的结果都是true,那么无论正确密码是什么“FPassword="1" or "1"="1"”的计算值永远是true,这样恶意攻击者就可以使用任何帐户登录系统了。十分惊讶吧!这样的漏洞就被称作“SQL注入漏洞(SQL

Injection)”。

对付SQL注入漏洞有两种方式:过滤敏感字符和使用参数化SQL。

SQL注入漏洞原理的更多相关文章

  1. 【漏洞复现】CVE-2022–21661 WordPress核心框架WP_Query SQL注入漏洞原理分析与复现

    影响版本 wordpress < 5.8.3 分析 参考:https://blog.csdn.net/qq_46717339/article/details/122431779 在 5.8.3 ...

  2. SQL注入漏洞的原理

    在平常生活中,我们登陆某网页,常常需要输入用户名和密码,点击登陆,即可登陆成功. 对于黑客来说,不需要用户名和密码,只输入 admin '— 也可以登陆成功. 黑客利用的这种漏洞就是SQL Injec ...

  3. 怎样判断有没有SQL注入漏洞及原理?

    来源:实验楼 最为经典的单引号判断法: 在参数后面加上单引号,比如: http://xxx/abc.php?id=1' 如果页面返回错误,则存在 Sql 注入. 原因是无论字符型还是整型都会因为单引号 ...

  4. 从c#角度看万能密码SQL注入漏洞

    以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...

  5. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  6. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  7. 预处理prepareStatement是怎么防止sql注入漏洞的?

    序,目前在对数据库进行操作之前,使用prepareStatement预编译,然后再根据通配符进行数据填值,是比较常见的做法,好处是提高执行效率,而且保证排除SQL注入漏洞. 一.prepareStat ...

  8. [SQL SERVER系列]读书笔记之SQL注入漏洞和SQL调优

    最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“'1'='1'”这个表达式永远返回 true, ...

  9. 利用“参数赋值”防范SQL注入漏洞攻击

    <<年轻,无权享受>————送给每一个看到此文的同僚们 在这无精打采的炎夏 我躺在阳台上房东的旧沙发 回想几个月来遇到的问题 我不禁内心开始慌张喘着粗气 还有大把时间去打拼 没有到只 ...

随机推荐

  1. 在cmd运行脚本

    1.打开cmd 2.cd到脚本目录,运行所有脚本的上级目录,我的是cd C:\Users\Administrator\PycharmProjects\webtest\TestSuit 3.使用Pyth ...

  2. Springboot 启动问题

    每次以debug方式启动springboot之后都会在SilentExitExceptionHandler类中的throw new SilentExitException() 解决办法 :window ...

  3. StaticBox布局管理器

    wx.StaticBoxSizer构造方法如下: wx.StaticBoxSizer(box,orient = HORIZONTAL) box 是静态框对象,orient参数是布局方向  wx.HOR ...

  4. Oz 创建Windows2008R2镜像

    此tdl和auto文件只可定义windows disk bus以ide模式启动,不支持virtio. <template> <name>Windows-gushiren< ...

  5. OZ常见错误解决办法

    执行成功 错误信息解决办法 libvirt.libvirtError: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No ...

  6. codeblocks17.12 debug 报错:ERROR: You need to specify a debugger program in the debuggers's settings.

    DebugERROR: You need to specify a debugger program in the debuggers's settings.(For MinGW compilers, ...

  7. Tensorflow实现LSTM识别MINIST

    import tensorflow as tf import numpy as np from tensorflow.contrib import rnn from tensorflow.exampl ...

  8. ZOJ 3724 Delivery 树状数组好题

    虽然看起来是求最短路,但因为条件的限制,可以转化为区间求最小值. 对于一条small path [a, b],假设它的长度是len,它对区间[a, b]的影响就是:len-( sum[b]-sum[a ...

  9. table & colgroup

    table & colgroup // <caption>版本信息</caption> table = ` <table class="versions ...

  10. hdu 1811 Rank of Tetris (拓扑 & 并查集)

    Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...