欢迎来到云服务器租用和托管数据中心

网络技术

sql服务器租用-如何防止SQL注入攻击?

SQL 注入是最常见和最基本的网络攻击类型之一。不幸的是,SQL 注入也是应用程序可能面临的最具破坏性的威胁之一。这些攻击经常导致数据丢失,对共享数据库的基础设施尤其危险。本文介绍了 如何防止 SQL 注入。请继续阅读以了解什么是 SQL 注入、这些攻击的工作原理以及公司采取哪些步骤来保护其数据库免受恶意注入。

sql服务器租用-如何防止SQL注入攻击?

什么是 SQL 注入攻击?

SQL 注入 (SQLi) 是一种网络攻击,黑客通过应用程序运行恶意 SQL 语句来操纵数据库。这些攻击会影响任何依赖 SQL 数据库(MySQL、Oracle、Sybase、Microsoft SQL Server、Access、Ingres 等)的网站或 Web 应用程序。

我们的 MySQL 命令备忘单 概述了掌握此 RDBMS 所需的最重要命令。

SQLi 的后果从轻微到严重不等。在注入之后,黑客可以:

  • 损坏、窃取或删除数据。
  • 获得对系统的 root 访问权限。
  • 创建新记录为更高级的漏洞打开大门,例如 APT 攻击。
  • 提升访问网络上其他应用程序和系统的权限。
  • 损害服务器或其他后端基础设施。
  • 发起 DDoS(拒绝服务)攻击。
  • 通过数据库服务器访问操作系统 。

伤害的程度取决于攻击者的能力。受害者可能会遇到从几个数据库错误到完全接管 Web 服务器的任何事情。

如何防止 SQL 注入攻击?

企业可以采取多种有效措施来防止 SQLi 攻击。

消毒输入

输入清理(或验证)是检查和过滤用户输入的做法。这种技术确保应用程序可以识别非法用户输入和危险的可执行文件。

开发人员可以通过三种方式清理输入:

  • 白名单清理: 只有预先批准的字符和代码字符串才能到达数据库。
  • 黑名单清理: 开发人员禁止某些字符进入数据库(换行符、额外的空格、标签、制表符等)。
  • 转义清理: 查询中的所有数据都需要在查询执行之前进行 SQL 转义。

通常,白名单比黑名单更简单、更安全。聪明的黑客可以找到绕过黑名单的方法,因此请尽可能使用白名单验证用户输入。

另一个好的做法是使用下拉菜单和单选按钮验证用户输入。这些输入字段可防止用户输入输入并停止注入可执行代码。

参数化 SQL 代码

参数化查询要求开发人员首先定义所有 SQL 代码,然后将每个参数传递给查询。这种编码风格使数据库能够区分代码和数据,这是动态 SQL 查询无法实现的功能。

参数化 SQL 代码可防止攻击者更改查询的意图,即使他们插入了命令。例如,如果黑客输入用户 ID '1'='1,则查询将查找与整个'1'='1 字符串匹配的用户名 。数据库不会将查询作为命令接受。

限制用户权限

采用 零信任安全性 并将用户限制为他们执行角色所需的最低限度的权限。具有读写执行权限的帐户越少越好。

例如,如果一个网站只返回数据库内容与 SELECT 声明,不授予连接其他特权,比如 INSERT, UPDATE或者 DELETE。

另一个好的做法是不信任所有用户输入。以与来自外部和第三方来源的输入相同的方式处理来自内部用户的输入。此外,永远不要让 Web 应用程序以管理员权限连接到数据库。

设置防火墙

使用 Web 应用程序防火墙 (WAF) 过滤 Web 应用程序和数据库之间的所有流量。防火墙保护所有面向 Web 的应用程序,因此设置防御以阻止 SQLi 和类似的网络攻击。

  • 阅读有关 不同类型防火墙的信息, 并找到能够为您的企业提供理想保护的防火墙。
  • 更新和补丁
  • 使用最新的补丁和更新使所有系统和防御保持最新。这样做有助于:
  • 捕获允许 SQL 注入的新错误。
  • 防止攻击者利用旧软件版本中存在的弱点和错误。
  • 定期修补所有 Web 应用程序软件组件,包括库、插件、框架、Web 服务器和数据库服务器。

定期测试

运行安全测试以检查数据库和相关应用程序的弹性。定期测试对于发现所有网络攻击的漏洞至关重要。考虑运行:

  • 从攻击者的角度查看应用程序的动态分析测试 (DAST)。
  • 在代码级别寻找漏洞的静态分析测试 (SAST)。
  • 对应用程序中潜在入口点的手动测试也有助于检测 SQLi 漏洞。这里有几个测试需要考虑:
  • 提交单引号字符并检查数据库响应。
  • 运行布尔条件(OR 1=1、OR 1=2 等)并查找响应中的差异。
  • 提交在执行时触发时间延迟的有效负载。测量响应时间的差异。
  • 运行触发带外网络交互的 OAST 负载。监控潜在漏洞的结果交互。
  • 了解 渗透测试,这是市场上最全面、最真实的测试形式。
  • 永远不要以纯文本形式存储敏感数据

加密数据库中的所有私人和机密数据。如果攻击者设法泄露敏感数据,加密还提供了额外的保护级别。

不向用户显示数据库错误

数据库错误消息绝不能显示在客户端 Web 浏览器上。攻击者可以使用错误消息中的技术细节来调整查询以实现成功注入。

不要显示带有有用信息的错误消息,而是设置简单的基于单词的错误消息,为给您带来的不便表示歉意。

培训和维护 SQLi 意识

防止 SQL 注入是一项团队工作,所有员工都必须知道网络安全的重要性 。为所有开发人员、QA 人员、系统管理员和DevOps提供合适的安全培训 。

虽然很危险,但 SQLi 攻击很容易预防

尽管 SQL 注入可能具有破坏性,但组织良好的公司永远不应成为这些攻击的受害者。设置适当的预防措施并确保您的数据库能够抵抗 SQL 注入。

Copyright © 2003-2020 香港服务器和服务器租用 梦飞数据中心 版权所有