旗下导航:搜·么
当前位置:网站首页 > .Net教程 > 正文

ASP.NET提防SQL注入式进击的要领【C#.Net教程】,ASP.NET SQL 注入式 攻击

作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:28评论:0


导读:一、什么是SQL注入式进击?SQL注入式进击就是进击者把SQL敕令插进去到Web表单的输入域或页面请求的查询字符串,诳骗服务器实行歹意的SQL敕令。在某些表单中,用户输入的...
一、什么是SQL注入式进击?

SQL注入式进击就是进击者把SQL敕令插进去到Web表单的输入域或页面请求的查询字符串,诳骗服务器实行歹意的SQL敕令。在某些表单中,用户输入的内容直接用来组织(或许影响)动态SQL敕令,或作为存储历程的输入参数,这类表单迥殊轻易遭到SQL注入式进击。罕见的SQL注入式进击历程类如:

  ⑴ 某个ASP.NET Web运用有一个登录页面,这个登录页面掌握着用户是不是有权接见运用,它请求用户输入一个称号和暗码。

  ⑵ 登录页面中输入的内容将直接用来组织动态的SQL敕令,或许直接用作存储历程的参数。下面是ASP.NET运用组织查询的一个例子:

System.Text.StringBuilder query = new System.Text.StringBuilder(
 "SELECT * from Users WHERE login = '")
 .Append(txtLogin.Text).Append("' AND password='")
 .Append(txtPassword.Text).Append("'");

  ⑶ 进击者在用户名字和暗码输入框中输入"'或'1'='1"之类的内容。

  ⑷ 用户输入的内容提交给服务器以后,服务器运转上面的ASP.NET代码组织出查询用户的SQL敕令,但由于进击者输入的内容异常特别,所以末了取得的SQL敕令变成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。

  ⑸ 服务器实行查询或存储历程,将用户输入的身份信息和服务器中保留的身份信息举行对照。

  ⑹ 由于SQL敕令现实上已被注入式进击修正,已不能真正考证用户身份,所以体系会毛病地受权给进击者。

  假如进击者晓得运用会将表单中输入的内容直接用于考证身份的查询,他就会尝试输入某些特别的SQL字符串改动查询转变其本来的功用,诳骗体系授与接见权限。

  体系环境差别,进击者可以形成的损伤也差别,这主要由运用接见数据库的平安权限决议。假如用户的帐户具有管理员或其他比较高等的权限,进击者就可以对数据库的表实行种种他想要做的操纵,包括增添、删除或更新数据,以至可以直接删除表。

二、怎样提防?

好在要防备ASP.NET运用被SQL注入式进击突入并非一件迥殊难题的事变,只需在应用表单输入的内容组织SQL敕令之前,把一切输入内容过滤一番就可以了。过滤输入内容可以按多种体式格局举行。

⑴ 关于动态组织SQL查询的场所,可以运用下面的手艺:

第一:替代单引号,即把一切零丁涌现的单引号改成两个单引号,防备进击者修正SQL敕令的寄义。再来看前面的例子,“SELECT * from Users WHERE login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'”显然会取得与“SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'”差别的效果。

第二:删除用户输入内容中的一切连字符,防备进击者组织出类如“SELECT * from Users WHERE login = 'mas' -- AND password =''”之类的查询,由于这类查询的后半部份已被解释掉,不再有用,进击者只需晓得一个正当的用户登录称号,基础不需要晓得用户的暗码就可以顺遂取得接见权限。

第三:关于用来实行查询的数据库帐户,限定其权限。用差别的用户帐户实行查询、插进去、更新、删除操纵。由于隔离了差别帐户可实行的操纵,因而也就防备了底本用于实行SELECT敕令的处所却被用于实行INSERT、UPDATE或DELETE敕令。

⑵ 用存储历程来实行一切的查询。

SQL参数的通报体式格局将防备进击者应用单引号和连字符实行进击。另外,它还使得数据库权限可以限定到只允许特定的存储历程实行,一切的用户输入必需顺从被挪用的存储历程的平安上下文,如许就很难再发作注入式进击了。   

⑶ 限定表单或查询字符串输入的长度。

假如用户的登录名字最多只要10个字符,那末不要承认表单中输入的10个以上的字符,这将大大增添进击者在SQL敕令中插进去有害代码的难度。

⑷ 搜检用户输入的正当性,确信输入的内容只包括正当的数据。

数据搜检应当在客户端和服务器端都实行——之所以要实行服务器端考证,是为了填补客户端考证机制软弱的平安性。

在客户端,进击者完整有可以取得网页的源代码,修正考证正当性的剧本(或许直接删除剧本),然后将不法内容经由过程修正后的表单提交给服务器。因而,要保证考证操纵确切已实行,唯一的要领就是在服务器端也实行考证。你可以运用很多内建的考证对象,比方RegularExpressionValidator,它们可以自动生成考证用的客户端剧本,固然你也可以插进去服务器端的要领挪用。假如找不到现成的考证对象,你可以经由过程CustomValidator本身建立一个。   

⑸ 将用户登录称号、暗码等数据加密保留。

加密用户输入的数据,然后再将它与数据库中保留的数据比较,这相当于对用户输入的数据举行了“消毒”处置惩罚,用户输入的数据不再对数据库有任何特别的意义,从而也就防备了进击者注入SQL敕令。System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile,异常适合于对输入数据举行消毒处置惩罚。   

⑹ 搜检提取数据的查询所返回的纪录数目。

假如顺序只请求返回一个纪录,但现实返回的纪录却凌驾一行,那就看成失足处置惩罚。

以上就是ASP.NET提防SQL注入式进击的要领,愿望对人人的进修有所协助。

更多ASP.NET提防SQL注入式进击的要领相干文章请关注ki4网!

标签:ASP.NET SQL 注入式 攻击


欢迎 发表评论: