加强Web应用程序安全:防止SQL注入

这篇具有很好参考价值的文章主要介绍了加强Web应用程序安全:防止SQL注入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据库在Web应用程序中存储和组织数据时起着至关重要的作用,它是存储用户信息、内容和其他应用程序数据的中央存储库。而数据库实现了高效的数据检索、操作和管理,使Web应用程序能够向用户提供动态和个性化的内容。然而,数据库和网络应用程序之间的通信不畅可能会导致敏感数据泄露、用户不信任、法律后果和利润损失。本文将探讨导致此类灾难的后端错误配置,并了解如何确保应用程序的安全。

一、什么是SQL注入?

SQL注入(SQLi)是一个漏洞,它允许网络攻击者篡改Web应用程序发送给数据库的查询。当应用程序误解了用户的输入并将其视为SQL代码而不是字符串时,就会发生注入。因此,恶意用户可以更改预期的查询流,破坏应用程序的逻辑,并获得对其资源的未经授权的访问。

在大多数情况下,当开发人员需要使用依赖于用户输入的参数化查询时,就会出现SQLi。如果开发人员在将用户输入插入模板之前忘记对其进行适当的清理,就会引入SQL注入漏洞。一个经典的SQL注入示例是使用纯字符串插值或连接来创建动态查询,如下图所示。网络攻击者可以通过用SQL代码替换分页参数中的数字来注入任意SQL语句。

加强Web应用程序安全:防止SQL注入,前端,安全,sql

(动态查询精心制作的字符串插值)

二、什么是ORM注入?

现在,开发人员很少使用原始SQL语句,而是使用称为ORM的特殊框架。对象关系映射(ORM)是一种用作两种不同范例之间的适配器的技术:关系(将数据存储在表中)和面向对象(将数据存储在对象中)。ORM所做的事情之一是在底层生成SQL代码。开发人员所要做的就是告诉ORM如何去做。

显然,自动生成意味着自动转义用户提供的数据。ORM确保每个动态参数都像普通字符串一样被处理,除非开发人员特别禁用清理功能。然而,恶意代码的注入仍然是可能的。ORM注入是一个漏洞,它允许密切协作攻击者强制ORM生成对他们有利的SQL。

考虑下面的例子。这里有一个函数,它应该接受带有多个参数的对象过滤器,例如:

{"email":, ""name": "user"} 

加强Web应用程序安全:防止SQL注入,前端,安全,sql

(ORM注入)

但是,开发人员忘记检查过滤器是否确实是一个对象,以及它是否只包含安全的过滤参数。这样的错误使攻击者能够注入可用于恢复用户密码的恶意过滤器,例如:

"password LIKE '%a%'"

三、SQL注入真的很危险吗?

通常,SQL注入可以被认为是一个严重的漏洞。在大多数情况下,对网站任何部分的单个SQL注入最终都可以扩展到在数据库上运行任何查询,提取和操作其数据。由于数据库通常保存着系统中最敏感的信息,因此允许网络攻击者访问这些信息是毁灭性的。

以下是SQL注入如何被利用的简短列表:

  • 远程代码执行(通常通过特殊功能)
  • 读写主机上的文件。
  • 颠覆Web应用程序的逻辑
  • 提取敏感数据
  • 操纵数据
  • 拒绝服务

四、哪些类型的SQL注入是可能的?

在通常情况下,有三种类型的SQL注入:带内注入、带外注入和盲注入。反过来,带内攻击可以是基于联合的或基于错误的,而盲SQLi可以是基于布尔的或基于时间的。

加强Web应用程序安全:防止SQL注入,前端,安全,sql

五、SQL注入层次结构

如果攻击者足够幸运,他们可以在后端响应中包含被破坏的SQL查询的结果。这被称为带内SQLi。带内SQLi有两种子类型:

1.基于联合的SQLi:攻击者能够指定他们可以读取的查询输出的位置(列)。

2.基于错误的SQLi:当应用程序公开SQL/编程语言错误时,这种类型的SQLi是可能的。在这种情况下,攻击者可以分析错误消息/堆栈跟踪,并推断攻击是否成功。

使用BlindSQLi,网络攻击者无法看到被破坏的SQL查询的结果。然而,它们有某种反馈,可以帮助确定是否存在注入。盲SQLi有两种子类型:

1.基于布尔的SQL:攻击者可以使用SQL条件语句以某种方式修改服务器的响应。然后,他们可以将这种新的反应与原来的反应进行比较,并确定注入是否有效。

2.基于时间的SQLi:攻击者可以将数据库的SLEEP函数与条件语句结合起来,从而延迟后端响应。然后,他们可以将原始响应时间与新的响应时间进行比较,以确定注入是否成功。

在某些情况下,攻击者可能根本无法从数据库获得任何反馈。在这种情况下,它们可以强制数据库将输出重定向到另一个位置,并尝试从那里读取它。这就是所谓的带外SQL注入。例如,他们可以强制数据库将包含敏感信息的DNS查询发送到他们控制的DNS服务器。或者,它们可以强制数据库将一些数据写入可公开访问的文件中。这种注入会影响许多数据库。

六、减轻SQLi时的常见错误

用户不应该试图为SQL输入参数提供自己的清理程序。这样做需要深入了解数据库规范和使用它们的经验。最有可能的是,最终会淹没在其他人无法理解的正则表达式中,并且随着数据库的发展,没有人会支持清理程序。

需要记住:攻击者总是试图混淆他们的SQLi有效负载,将其偷运到WAF和IPS。有大量的框架可以利用SQLi,为攻击者提供扭曲有效负载的脚本库。编写自定义混淆处理程序并将其与现有混淆处理程序结合使用也很容易。

考虑一下开发人员在试图净化用户输入时所犯的一些常见错误。

一个常见的误解是,可以通过删除/替换SQL查询参数中的空格来避免SQLi。例如,如果攻击者只能使用一个单词,会造成多大的伤害?但是许多数据库将注释转换为空格,因此“SELECT email FROM user”等于“SELECT/**/email/**/FROM/**/user”,这是一个单词。

加强Web应用程序安全:防止SQL注入,前端,安全,sql

(使用注释而不是空格的SQLMap篡改脚本)

通常认为删除引号可以使参数安全,但有时攻击者可以指定另一个特殊字符来定义字符串。例如,PostgreSQL允许定义包含在双美元符号中的多行字符串。所以“email”等于$$ email$$。

加强Web应用程序安全:防止SQL注入,前端,安全,sql

(SQLMap篡改脚本,使用双美元符号代替单引号)

最后但并非最不常见的错误是对数据库关键字进行非递归删除。这也很容易绕过检测,因为攻击者可以在相同的关键字中间插入关键字。因此,经过清理之后,注入仍然存在。例如:

“SELSELECTECT” -> “SELECT”

加强Web应用程序安全:防止SQL注入,前端,安全,sql

(用于嵌套关键字的SQLMap篡改脚本)

七、防止SQL注入的正确方法

防止SQLi的第一步是使用预处理语句。允许用户定义预处理语句也是不可接受的。这里有一个使用TypeORM防止SQL注入的例子:采用硬编码的模板,并使用这个框架的特性来安全地插入变量:

加强Web应用程序安全:防止SQL注入,前端,安全,sql

(使用TypeORM编写语句)

但是仅仅使用ORM是不够的。正如前面看到的,业务逻辑缺陷可以允许绕过安全保护措施。SQLi修正的第二步是显式验证用户输入。如果需要一个数字,可以手动将值转换为数字。如果需要URL,可以手动将输入字符串转换为URL。这种方法显著降低了利用SQLi的可能性。额外的好处是,将拥有更一致的数据和更少的错误。有许多库可用于声明性验证,例如express-validator或class-validator。

另一件需要记住的重要事情是始终为每个应用程序创建一个专用的数据库用户。仔细阅读有关默认用户权限的文档,并禁用除了对应用程序运行至关重要的功能之外的所有功能。除了数据库管理之外,永远不应该将DBA帐户用于其他任何事情。默认情况下,DBA帐户被授予所有可能的权限。这显著地放大了SQL注入的严重性。

最后但同样重要的是,使用Web应用程序防火墙或入侵预防系统。它们能够发现并破坏SQL注入攻击,甚至有一组流量规则来检测依赖SQLi的已知漏洞。当然,使用WAF或IPS并不是灵丹妙药,因为它们可以绕过检测。然而,这种工具的存在显著提高了进行攻击所需的知识阈值。另外,WAF/IPS干扰了SQLi开发自动化,并提供了比传统工具更好的日志记录。

八、相关内容拓展:(技术前沿)

近10年间,甚至连传统企业都开始大面积数字化时,我们发现开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。

针对这类问题,低代码把某些重复出现的场景、流程,具象化成一个个组件、api、数据库接口,避免了重复造轮子。极大的提高了程序员的生产效率。

推荐一款程序员都应该知道的软件JNPF快速开发平台,采用业内领先的SpringBoot微服务架构、支持SpringCloud模式,完善了平台的扩增基础,满足了系统快速开发、灵活拓展、无缝集成和高性能应用等综合能力;采用前后端分离模式,前端和后端的开发人员可分工合作负责不同板块,省事又便捷。

体验官网:https://www.jnpfsoft.com/?csdn

还没有了解低代码这项技术可以赶紧体验学习!文章来源地址https://www.toymoban.com/news/detail-633376.html

到了这里,关于加强Web应用程序安全:防止SQL注入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL 安全及防止 SQL 注入攻击

    如果通过网页获取用户输入的数据并将其插入  MySQL  数据库,那么就有可能发生  SQL 注入攻击的安全问题 作为研发,有一条铁律需要记住,那就是 永远不要相信用户的数据,哪怕他一再承诺是安全的 SQL  注入,就是通过把  SQL  命令插入到  Web  表单递交或输入域名或页

    2024年02月02日
    浏览(61)
  • C++中的网络编程和安全性:实现安全的Web应用程序和网络应用程序

    作者:禅与计算机程序设计艺术 《67. C++中的网络编程和安全性:实现安全的Web应用程序和网络应用程序》 1.1. 背景介绍 随着互联网的快速发展,网络应用程序在人们的生活和工作中扮演着越来越重要的角色,网络编程和安全性也成为了现代应用程序的重要组成部分。在网络

    2024年02月16日
    浏览(52)
  • PHP 安全:如何防止PHP中的SQL注入?

    SQL注入防护对于确保数据库的安全性和完整性至关重要。它涉及实施有效措施来阻止将未经授权的 SQL 代码注入应用程序的恶意尝试。开发人员可以利用输入验证和参数化查询等技术来清理用户输入,确保任何潜在的恶意代码都无害。此外,使用预准备语句和存储过程可以通

    2024年04月29日
    浏览(49)
  • 确保你的数据库安全:如何防止SQL注入攻击

    最近,越来越多的组织和公司受到SQL注入攻击的困扰。这种攻击可以导致数据库中的敏感信息泄露,破坏数据完整性,甚至可能导致整个系统崩溃。如果您是一名数据库管理员或网站管理员,您需要了解如何保护您的数据库免受SQL注入攻击的威胁。在本文中,小德将介绍什么

    2024年02月02日
    浏览(54)
  • 【小迪安全】Day03基础入门-抓包&封包&协议&APP&小程序&PC应用&WEB应用

    有些应用是看不到的 手机app、微信小程序、PC应用 Windows、Linux 2.1.1抓包封包工具 Fiddler: 是一个 http 协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的 http 通讯,设置断点,查看所有的“进出”Fiddler 的数据(指 cookie,html,js,css 等文件)。 Fiddler 要比其他的

    2024年02月03日
    浏览(55)
  • AppSpider Pro 7.4.053 for Windows - Web 应用程序安全测试

    AppSpider Pro 7.4.053 for Windows - Web 应用程序安全测试 Rapid7 Dynamic Application Security Testing (DAST) 请访问原文链接:https://sysin.org/blog/appspider/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org appspider 保持步伐 收集测试当今不断发展的应用程序所需的信息。 降低风险 降

    2024年02月15日
    浏览(57)
  • Web安全:bWAPP 靶场搭建.(集成了各种常见漏洞和最新漏洞的开源Web应用程序)

    bWAPP是一个集成了了常见漏洞的 web 应用程序,目的是作为漏洞测试的演练场,帮助安全爱好者,开发人员和学生发现和防止Web漏洞。它有超过100个网络漏洞数据,包括所有主要的已知网络漏洞. Web安全:bWAPP 靶场搭建. 靶场安装步骤: 第一步:(1)安装 phpStudy. 第二步:(

    2024年02月09日
    浏览(47)
  • 【JWT】解密JWT:让您的Web应用程序更安全、更高效的神秘令牌

    接下来看看由辉辉所写的关于JWT+ElementUI的相关操作吧 目录 🥳🥳Welcome Huihui\\\'s Code World ! !🥳🥳 一.JWT是什么 JWT工作原理 JWT验证过程 JWT刷新 二.为什么要使用JWT 三.JWT如何使用【工具类】 四.案例演示【JWT的强大】  1.没有用jwt 2.用了jwt web.xml 过滤器(跨域问题) JWT验证过滤器

    2024年02月08日
    浏览(60)
  • Acunetix v23.6 (Linux, Windows) - 漏洞扫描 (Web 应用程序安全测试)

    Acunetix v23.6 (Linux, Windows) - 漏洞扫描 (Web 应用程序安全测试) Acunetix | Web Application Security Scanner 请访问原文链接:https://sysin.org/blog/acunetix/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Acunetix Standard Premium v23.6.230628115 - 28 Jun 2023 重要提示 Acunetix Premium 现在使用

    2024年02月11日
    浏览(52)
  • 构建安全高效的Web应用程序:IntelliJ IDEA的后端开发指南

    在当今互联网时代,Web应用项目的开发变得越来越重要。为了提供更好的用户体验和良好的系统可扩展性,采用前后端分离的设计模式已成为众多开发团队的首选。 前后端分离是一种软件架构模式,将传统的单体应用中的前端和后端部分进行解耦,使其成为独立的两个部分。

    2024年02月03日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包