📅  最后修改于: 2020-11-12 00:33:39             🧑  作者: Mango
SQL注入是一种代码渗透技术,可能会导致数据库丢失。通过网页输入,将恶意代码放置在SQL语句中是最常用的网络黑客技术之一。 SQL注入可被恶意用户用来操纵应用程序的Web服务器。
当我们要求用户输入用户名/用户ID时,通常会发生SQL注入。用户提供了一条SQL语句,而不是名称或ID,而我们将在不知不觉中在数据库上运行该SQL语句。例如,我们通过添加变量“ demoUserID”选择一个字符串来创建SELECT语句。该变量将从用户输入(getRequestString)中获取。
demoUserI = getrequestString("UserId");
demoSQL = "SELECT * FROM users WHERE UserId =" +demoUserId;
除了通过登录算法外,SQL注入还会带来更大的危害。一些SQL注入攻击包括:
我们有一个基于员工记录的应用程序。任何员工都可以通过输入唯一的私人员工ID来仅查看自己的记录。我们有一个字段,例如员工ID。员工在输入字段中输入以下内容:
236893238或1 = 1
它将转换为:
SELECT * from EMPLOYEE where EMPLOYEE_ID == 236893238 or 1=1
上面的SQL代码有效,并且将从EMPLOYEE表返回EMPLOYEE_ID行。 1 = 1将返回所有适用的记录。所有员工数据都被泄露;现在,恶意用户还可以类似地删除员工记录。
例:
SELECT * from Employee where (Username == "" or 1=1) AND (Password="" or 1=1).
现在,恶意用户可以明智地使用“ =”运算符来检索私有和安全的用户信息。因此,以下查询代替了上面提到的查询,当用尽时将检索不打算向用户显示的受保护数据。
SELECT * from EMPLOYEE where (Employee_name =" " or 1=1) AND (Password=" " or 1=1)
一些数据库支持批处理SQL语句。它是一组由分号分隔的两个或更多SQL语句。
下面给出的SQL语句将返回Employee表中的所有行,然后删除Employee_Add表。
SELECT * From Employee; DROP Table Employee_Add
创建SQL注入攻击并不困难,但是即使是最优秀和好心的开发人员也会犯错。因此,SQL注入的检测是产生SQL注入攻击风险的重要组成部分。 Web应用程序防火墙可以检测和阻止基本的SQL注入攻击,但我们应将其作为唯一的预防措施。
入侵检测系统(IDS)既基于网络又基于主机。可以对其进行调整以检测SQL注入攻击。基于网络的IDSec可以监视与我们数据库服务器的所有连接,并标记可疑活动。基于主机的IDS可以监视Web服务器日志,并在发生异常情况时发出警报。
入侵者可以检索数据库中存在的所有用户数据,例如用户详细信息,信用卡信息和社会保险号,还可以访问受保护区域,例如管理员门户。也可以从表中删除用户数据。如今,所有的在线购物应用程序,银行交易都使用后端数据库服务器。如果入侵者可以利用SQL注入,则整个服务器将受到威胁。