什么是SQL注入
SQL注入是一种将SQL代码注入或附加到应用程序(用户)输入参数并将这些参数传递到后台SQL服务器进行解析和执行的攻击。由于SQL语句本身的多样性以及可用于构造SQL语句的编程技术有大量,因此构造SQL语句的每个阶段都存在潜在的攻击风险。 SQL注入的主要方法是直接将代码插入到参数中,并将这些参数放在SQL命令中执行。间接攻击涉及将恶意代码注入字符串并将这些字符串存储在数据库表中或将其视为元数据。当存储的字符串放入动态SQL 命令中时,就会执行恶意代码。
为什么会产生
大多数Web应用程序都需要与数据库进行交互,并且大多数Web应用程序编程语言(ASP、C、NET、Java、PHP等)都提供了用于连接数据库并与之交互的可编程方法。 SQL 注入漏洞通常在Web 应用程序开发人员未能确保从Web 表单、cookie、输入参数等接收的值在传递到SQL 查询(在数据库服务器上运行)之前经过验证时发生。攻击者可以控制发送到SQL 查询的输入,操纵该输入,并将其解析为代码而不是数据,这使得他们很可能可以在后端数据库上执行该代码。
常见SQL注入
不当的处理类型
SQL 数据库将单引号(\’) 解析为代码和数据之间的分界线。单引号外面的是需要执行的代码,单引号里面的是数据。只需在URL 或网页字段中输入单引号,您就可以快速识别您的网站是否是SQL 注入攻击的目标。
不安全的数据库配置
数据库附带了大量由用户预先安装的默认内容。 SQL Server使用臭名昭著的“sa”作为数据库系统管理员帐户,MySQL使用“root”等等。 Oracle 通常在创建数据库时创建SYS、SYSTEM、DBSNMP 和OUTLN 帐户。这些并不是全部帐户,而是一些因其知识而闻名的帐户,还有许多其他帐户。其他账户也默认预设。
当攻击者利用SQL 注入漏洞时,他们通常会获得对数据库元数据的访问权限,例如内部数据库和表名称、列数据类型和权限。例如,MySQL 服务器元数据位于此处: information_schema 虚拟数据库。可通过显示数据库和显示表访问进行访问。所有MySQL 用户都有权访问数据库中的表,但他们只能查看表中与其访问权限相对应的对象行。
错误处理
错误处理不当可能会给您的网站带来许多安全问题。最常见的问题是向用户显示或暴露详细的内部错误消息(错误代码、数据库转储等)。这些错误消息揭示了实施细节,并为攻击者提供有关您网站中潜在缺陷的重要线索。
提交处理不当
开发人员会验证输入,有些则不会。开发人员、团队甚至公司相互独立工作的情况并不少见,这使得很难确保项目中的每个人都遵循相同的标准。此外,应用程序开发人员倾向于尽其所能地设计应用程序,以引导用户完成流程,并假设用户将遵循用户设计的逻辑顺序。
查询集处理
由于程序开发过程中可能不知道要查询的表和字段,因此您可能需要使用动态SQL语句来编写复杂的应用程序。定期创建的数据库(例如与大型数据库交互的应用程序)中的数据是由应用程序生成的,因此开发人员可以信任该数据来替换应用程序生成的值。因此,它会影响系统的返回值。
以上关于#SQL注入的相关内容摘自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92170.html