仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 823|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET教程之在ASP.NET中怎样提防SQL注进式打击

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:47:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着!asp.net|sql|打击  1、甚么是SQL注进式打击?
  
  所谓SQL注进式打击,就是打击者把SQL命令拔出到Web表单的输出域或页面哀求的查询字符串,棍骗服务器实行歹意的SQL命令。在某些表单中,用户输出的内容间接用来机关(大概影响)静态SQL命令,或作为存储历程的输出参数,这类表单出格简单遭到SQL注进式打击。罕见的SQL注进式打击历程类如:
  
  ⑴某个ASP.NETWeb使用有一个登录页面,这个登录页面把持着用户是不是有权会见使用,它请求用户输出一个称号和暗码。
  
  ⑵登录页面中输出的内容将间接用来机关静态的SQL命令,大概间接用作存储历程的参数。上面是ASP.NET使用机关查询的一个例子:
  
  System.Text.StringBuilderquery=newSystem.Text.StringBuilder(
  "SELECT*fromUsersWHERElogin=")
  .Append(txtLogin.Text).Append("ANDpassword=")
  .Append(txtPassword.Text).Append("");
  
  ⑶打击者在用户名字和暗码输出框中输出"或1=1"之类的内容。
  
  ⑷用户输出的内容提交给服务器以后,服务器运转下面的ASP.NET代码机关出查询用户的SQL命令,但因为打击者输出的内容十分特别,以是最初失掉的SQL命令酿成:SELECT*fromUsersWHERElogin=or1=1ANDpassword=or1=1。
  
  ⑸服务器实行查询或存储历程,将用户输出的身份信息和服务器中保留的身份信息举行对照。
  
  ⑹因为SQL命令实践上已被注进式打击修正,已不克不及真正考证用户身份,以是体系会毛病地受权给打击者。
  
  假如打击者晓得使用会将表单中输出的内容间接用于考证身份的查询,他就会实验输出某些特别的SQL字符串改动查询改动其本来的功效,棍骗体系授与会见权限。
  
  体系情况分歧,打击者大概酿成的伤害也分歧,这次要由使用会见数据库的平安权限决意。假如用户的帐户具有办理员或其他对照初级的权限,打击者便可能对数据库的表实行各类他想要做的操纵,包含增加、删除或更新数据,乃至大概间接删除表。
  
  2、怎样提防?
  
  幸亏要避免ASP.NET使用被SQL注进式打击突入并非一件出格坚苦的事变,只需在使用表单输出的内容机关SQL命令之前,把一切输出内容过滤一番就能够了。过滤输出内容能够按多种体例举行。
  
  ⑴关于静态机关SQL查询的场所,可使用上面的手艺:
  
  第一:交换单引号,即把一切独自呈现的单引号改成两个单引号,避免打击者修正SQL命令的寄义。再来看后面的例子,“SELECT*fromUsersWHERElogin=or1=1ANDpassword=or1=1”明显会失掉与“SELECT*fromUsersWHERElogin=or1=1ANDpassword=or1=1”分歧的了局。
  
  第二:删除用户输出内容中的一切连字符,避免打击者机关出类如“SELECT*fromUsersWHERElogin=mas--ANDpassword=”之类的查询,由于这类查询的后半部分已被正文失落,不再无效,打击者只需晓得一个正当的用户登录称号,基本不必要晓得用户的暗码就能够顺遂取得会见权限。
  
  第三:关于用来实行查询的数据库帐户,限定其权限。用分歧的用户帐户实行查询、拔出、更新、删除操纵。因为断绝了分歧帐户可实行的操纵,因此也就避免了底本用于实行SELECT命令的中央却被用于实行INSERT、UPDATE或DELETE命令。
  
  ⑵用存储历程来实行一切的查询。SQL参数的传送体例将避免打击者使用单引号和连字符实行打击。别的,它还使得数据库权限能够限定到只同意特定的存储历程实行,一切的用户输出必需服从被挪用的存储历程的平安高低文,如许就很难再产生注进式打击了。
  
  ⑶限定表单或查询字符串输出的长度。假如用户的登录名字最多只要10个字符,那末不要承认表单中输出的10个以上的字符,这将年夜年夜增添打击者在SQL命令中拔出无害代码的难度。
  
  ⑷反省用户输出的正当性,确信输出的内容只包括正当的数据。数据反省应该在客户端和服务器端都实行――之以是要实行服务器端考证,是为了填补客户端考证机制懦弱的平安性。
  
  在客户端,打击者完整有大概取得网页的源代码,修正考证正当性的剧本(大概间接删除剧本),然后将不法内容经由过程修正后的表单提交给服务器。因而,要包管考证操纵的确已实行,独一的举措就是在服务器端也实行考证。你可使用很多内建的考证工具,比方RegularExpressionValidator,它们可以主动天生考证用的客户端剧本,固然你也能够拔出服务器真个办法挪用。假如找不到现成的考证工具,你能够经由过程CustomValidator本人创立一个。
  
  ⑸将用户登录称号、暗码等数据加密保留。加密用户输出的数据,然后再将它与数据库中保留的数据对照,这相称于对用户输出的数据举行了“消毒”处置,用户输出的数据不再对数据库有任何特别的意义,从而也就避免了打击者注进SQL命令。System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile,十分合适于对输出数据举行消毒处置。
  
  ⑹反省提取数据的查询所前往的纪录数目。假如程序只需求前往一个纪录,但实践前往的纪录却凌驾一行,那就看成堕落处置。不可能天天有学习.net),我一同学说,你应该早就有作品啦。我惶惶然……
只想知道 该用户已被删除
沙发
发表于 2015-1-19 23:42:14 | 只看该作者
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
再现理想 该用户已被删除
板凳
发表于 2015-1-28 06:14:48 | 只看该作者
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
乐观 该用户已被删除
地板
发表于 2015-2-5 14:06:30 | 只看该作者
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
因胸联盟 该用户已被删除
5#
发表于 2015-2-12 02:23:52 | 只看该作者
那么,ASP.Net有哪些改进呢?
透明 该用户已被删除
6#
发表于 2015-3-2 21:00:06 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
第二个灵魂 该用户已被删除
7#
发表于 2015-3-11 06:20:45 | 只看该作者
ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
变相怪杰 该用户已被删除
8#
发表于 2015-3-17 22:10:36 | 只看该作者
碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 21:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表