WEB攻防-通用漏洞SQL注入- 基本原理

一、SQL注入简介

SQL注入是指攻击者通过在Web表单输入或URL参数中插入(或“注入”)恶意的SQL代码片段,这些代码片段被后端数据库系统错误地当作SQL语句的一部分执行,从而实现对数据库的非法查询、修改、删除等操作。这种攻击方式违背了“数据与代码分离”的基本原则,使得用户输入的数据被当作代码执行,进而引发安全漏洞。

二、SQL注入的产生

了解网站的分类:静态,动态,伪静态

静态:

静态网站是指网站内容以HTML、CSS、JavaScript等静态文件形式存在,用户访问时直接从服务器读取这些文件,无需服务器端处理即可呈现给用户。

安全,不会存在sql注入漏洞

动态:

动态网站是指网站内容通过服务器端脚本(如PHP、ASP.NET、Node.js等)动态生成,根据用户请求和数据库中的数据实时生成HTML页面。

存在安全风险,可能存在SQL注入漏洞

伪静态:

伪静态网站实际上是动态网站的一种优化方式,通过URL重写技术将动态URL转换为看似静态的URL格式。

存在安全风险,可能存在SQL注入漏洞

是否为动态网站可以在控制台借助一个js函数来判断

document.lastModified

多次执行如果返回一个固定的时间则为静态

如果实时变化则为动态 

三、SQL注入的原理

SQL注入之所以能够成功,主要基于以下两个核心原理:

  1. 用户输入可控:Web应用程序在处理用户输入时,未能有效验证和过滤输入数据,使得攻击者能够控制输入内容。
  2. 输入内容带入数据库查询:用户输入的数据被直接或间接地拼接到SQL查询语句中,并被送入数据库执行。如果输入的是恶意的SQL代码,那么这些代码也会被执行。

例如,在一个简单的登录表单中,用户输入用户名和密码,服务器端可能执行如下SQL查询:

SELECT * FROM users WHERE username = 'input_username' AND password = 'input_password';

如果攻击者提交如下的用户名:

admin' -- 

则服务器端接收到后可能会形成如下错误的SQL查询:

SELECT * FROM users WHERE username = 'admin' -- ' AND password = 'input_password';

 注释符--后面的文本将被视为注释,因此该查询实际上变成了:

SELECT * FROM users WHERE username = 'admin';

 这样攻击者无需正确的密码,只需要用户名存在即可成功登录。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 15:40:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 15:40:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 15:40:02       58 阅读
  4. Python语言-面向对象

    2024-07-14 15:40:02       69 阅读

热门阅读

  1. Leetcode【最长回文子串】

    2024-07-14 15:40:02       20 阅读
  2. Matlab中产生高斯白噪声信号的方法和其功率计算

    2024-07-14 15:40:02       27 阅读
  3. 大模型日报 2024-07-12

    2024-07-14 15:40:02       23 阅读
  4. 代码随想录刷题day10

    2024-07-14 15:40:02       23 阅读
  5. Rust编程-I/O

    2024-07-14 15:40:02       17 阅读
  6. Lua协程(同步的多线程)

    2024-07-14 15:40:02       18 阅读
  7. 如何利用Gunicorn的日志记录监控Web应用

    2024-07-14 15:40:02       18 阅读