SQL注入式攻击

2023-11-14

 一、SQL注入式攻击

1.所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。

2.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

常见的SQL注入式攻击过程例如:

(1)某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。

(2)登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:

System.Text.StringBuilder query = new System.Text.StringBuilder("SELECT *   from Users WHERE login = '")

Append(txtLogin.Text).Append("' AND password='")

Append(txtPassword.Text).Append("'")

(3)攻击者在用户名字和密码输入框中输入"'或'1'='1"之类的内容。

(4)用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。

(5)服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比

(6)由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者

3.如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限

4.系统环境不同,攻击者可能造成的损害也不同,这主要由应用访问数据库的安全权限决定。如果用户的帐户具有管理员或其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表

二、防范SQL注入式攻击的方法

只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。

⑴ 对于动态构造SQL查询的场合,可以使用下面的技术:

第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。

第二:删除用户输入内容中的所有连字符。

第三:对于用来执行查询的数据库帐户,限制其权限。

⑵ 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了

⑶ 限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度

⑷ 检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。扩展:在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如 RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个

⑸ 将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了"消毒"处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。 System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理

⑹ 检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL注入式攻击 的相关文章

随机推荐

  • 【论文精度】Transformer--Attention Is All You Need

    沐神论文精度 https www bilibili com video BV1pu411o7BE spm id from pageDriver Paper https arxiv org pdf 1706 03762 pdf Transfo
  • 【cocos2d-x 2】关于CocosStudio编辑出的csb的简单使用

    说明 cocos2d x版本为 3 4 cocosStudio版本为2 1 5 cocosStudio 我个人目前的认识 以为就是一个界面编辑器 界面通过美工可以排布好 然后把发布的csb和png资源文件 提供给程序员使用 1 关于 coc
  • 大语言模型之八-提示工程(Prompt engineer)

    大语言模型的效果好 很大程度上归功于算力和数据集 算力使得模型可以足够大 大到模型的理解 记忆 推理和生成以及泛化能力可以同时兼备 而数据集则是模型学习的来源 LLM中的prompt方法主要用于fine tune阶段 即在预训练的基础上 针
  • Pyramid Scene Parsing Network

    Pyramid Scene Parsing Network Keras实现代码链接 https github com BBuf Keras Semantic Segmentation Contribution 提出了金字塔场景解析网络 以将
  • poj 2155 Matrix

    Problem poj org problem id 2155 vjudge net contest 146952 problem A Referencd www cnblogs com gj Acit p 3258880 html Mea
  • mysql Heartbeat主主同步方案

    Heartbeat高可用Mysql主主同步方案 1 1 方案简介 本方案使用heartbeat mysql主主同步来实现mysql数据库的高可用 当服务器或者master的heartbeat宕掉以后会自动切换到backup上 服务器或者ma
  • 使用MATLAB进行多元线性回归预测

    在回归分析中 如果有两个或两个以上的自变量 就称为多元回归 事实上 一种现象常常是与多个因素相联系的 由多个自变量的最优组合共同来预测或估计因变量 比只用一个自变量进行预测或估计更有效 更符合实际 因此多元线性回归比一元线性回归的实用意义更
  • B站马士兵python入门基础版详细笔记(7)

    B站马士兵python入门基础版详细笔记 7 接着这个博客写的笔记 他写的还是很详细的 但是只写到了第六章 python基础知识 记录在B站视频看到的python的基础知识 我的笔记就有点偷懒了 很多没有敲代码 直接截的图 一 字典 列表
  • 【半监督学习】2、Soft Teacher

    文章目录 一 背景 二 方法 2 1 End to End Pseudo Labeling Framework 2 2 Soft teacher 2 3 Box Jittering 三 实验 论文 End to End Semi Super
  • C++ void** 类型

    在C 中 0 或者字面值 nullptr 能转换成任意指针类型 指向任意非常量的指针能转换成 void 指向任意常量对象的指针能转换成 const void 参考 C 类型转换 所以 void 类型可以用以下方式理解 void ppDefi
  • 在docusaurus中使用Vue组件⚡

    docusaurus 类似于Vuepress 是一个静态站点生成工具 但不同的是 使用docusaurus可以在文档中轻易混入React组件 很适合写React相关组件的文档 而Vuepress则是适合混入Vue组件 这就让我比较困惑 如果
  • error: #35: #error directive: "... 解决方法

    出现 USER stm32f10x h 96 error 35 error directive Please select first the target STM32F10x device used in your application
  • shell大小中括号作用

    http taotaocoder blog 163 com blog static 200228274201110306203483 Shell的强大是毋庸置疑的 方便了我们也迷惑了我们 比如这些杂七杂八的括号 一向自认聪明的我也傻傻分不清
  • 动态鼠标指针_推荐8款电脑鼠标指针,让你电脑不再千篇一律

    今天应该朋友给我留言说想要一款电脑指针 我就去搜罗了八款电脑指针 这些电脑指针有优美的 有酷炫的 有简洁的 可盐可甜 01 Breeze Cursors样式 002 a element 样式3D动态旋转鼠标指针 003 bibata cur
  • Self-study Python Fish-C Note-2 P9-P14

    先存一个网址非常详细的介绍python的数据类型 https www runoob com python3 python3 data type html A 数字 Numbers 1 整数 integers python 的整数长度是不受限
  • 类中的成员

    类中的成员 字段 方法 属性 1 字段 字段 普通字段 静态字段 1 class Mycalss 2 str 这是静态字段 3 def init self str1 4 self str1 str1 普通字段 5 实例化对象 6 a Myc
  • php提交表单显示错误,php – 在提交注册表单时使用jQuery显示错误

    你需要修好几件事情 gt 首先 处理注册过程的文件不应该是与表单相同的文件 gt 它纯粹用于处理数据 因此不能使用头 Location login php 直接重定向浏览器 这部分应该由你的JavaScript代码来处理 gt 您还需要告诉
  • 笔记--java sort() 方法排序

    背景 最近在刷一道算法题 字符串重新排序 时 发现自己有思路但是写代码的时候就无从下手了 而且看了答案之后还没看懂 关键就是基础不好 对于排序没有理解 虽然我学过常用的排序算法 但是都是理念 实践少 目的 从实践和原理出发 重点是从实践出发
  • 基于博弈搜索算法的智能五子棋设计

    基于博弈搜索算法的智能五子棋设计 0 引言 在智能过程中 搜索是必不可少的 是人工智能中的一个基本问题 这是因为人工智能研究的主要是那些没有成熟方法可依的问题领域 需要一步一步搜索求解 游戏中如何找到对自己有利的局面就属于这类问题 在游戏
  • SQL注入式攻击

    一 SQL注入式攻击 1 所谓SQL注入式攻击 就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串 欺骗服务器执行恶意的SQL命令 2 在某些表单中 用户输入的内容直接用来构造 或者影响 动态SQL命令 或作为存储过程的输