欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

关于网站防范XSS攻击的几点思考

来源:本站转载 作者:佚名 时间:2013-05-23 TAG: 我要投稿

 要更彻底地防止网站受到跨站指令代码攻击和信息隐性代码攻击,系统就必须对于使用者端输入信息做到足够的检核并保护好网页内容,避免产生意外的有害行为。

  攻击网站通常都是通过跨站指令代码(Cross-site Scripting)攻击网站的后台漏洞。它和信息隐性代码攻击(SQL Injection)攻击的目标不同。前者是透过从Web前端输入信息至网站,导致网站输出了被恶意控制的网页内容,使得系统安全遭到破坏。而后者则是输入了足以改变系统所执行之SQL语句内容的字串,使得系统最终达到攻击的目的。

  但从更一般性的角度来看,这两种攻击手法基本上是相通的。他们都是透过系统对于输入信息的毫无检核或是检核不足,利用刻意制造出来的输入信息,来让系统产生不在预期内的有害行为。

  过滤输入信息有效吗?

  因此,当要防备这类型的攻击时,大多数人直觉想到的方式,便是对使用者所提供的输入信息进行过滤。在面对信息隐性代码攻击时,许多人会想到针对输入信息中,可能会含有的SQL关键字串或字元进行过滤,例如,使用者的输入信息中若含有单引号,那么便可能制造出危险的SQL语句,因此,许多程序设计者便会想到要针对单引号进行escape,来杜绝信息隐性代码的攻击。而这种escape或过滤的方法,其实不难规避,例如,针对单引号,有心人士还是可以利用信息库服务器支持的特殊写法,将单引号字元替换成其他的型式,使得escape的程序失效。

  同样的,面对跨站指令代码攻击,许多程序设计者首先会想到的,也是针对有可能造成疑虑的使用者信息进行过滤。例如,针对<或者>字元、或者SCRIPT字串进行过滤,倘若使用者的输入信息中含有可疑的字元或字串时,则进行改写或禁止使用。这种针对特定的目标进行筛选过滤的方式,可以称为黑名单式的过滤,因为,程序是先列出不能出现的对象清单,然后进行过滤。

  当然,在跨站指令代码攻击中,如果想利用黑名单式的过滤方式,当然也是行不通的。因为,单是javascript这个字串,有心人士就可以产生在HTML中等价、但是字串形式不为javascript的写法。例如,使用#x的十六进位字元表示方式,来表示javascript这个字串中的每一个字元。由于改写形式太多了,这使得想要利用黑名单的方式,几乎是不可能的事。

  因此,无论何种攻击,想要有更严密的防备,在信息的过滤上,都应该采取白名单式的过滤。而这正和黑名单相反,它不是列出不被允许的对象,而是列出可被接受的对象。

  以正向表列的方式管制

  在面对信息隐性代码攻击时,我们建议针对每个栏位都明确定义出它该有的形式,例如日期栏位就只能出现数字和斜线字元,而ID栏位,仅能出现英文字母及底线字元等等。如此一来,想要透过信息植入有害的组成,就不是那么容易可以办到了。

  对于同样需要对输入信息进行检核的跨站指令代码攻击来说,要做到输入信息的过滤,最好的策略也是基于白名单来过滤。例如,允许使用者输入HTML语法的地方,若仅允许输入图片,则可开放 形式的输入,其余则否。这么一来,想要规避过滤的规则,难度就比较高了。

  当然,采取较严格的白名单政策,程序在撰写难度上比较高,此外,允许使用者信息输入的形式也就更为受限,但这是为了安全必须付出的代价。

  将网页内容编代码,提升防御力

  除了针对输入信息进行白名单式的过滤之外,针对输出的页面内容进行编代码,也是实务上能派上用场的技巧。输入信息的过滤是针对可疑的信息进行防范,而针对输入进行编代码,则是让可能造成危害的信息变成无害。

  庆幸的是,有许多程序语言都推出了为了防范跨站指令代码攻击的程序库,协助程序设计者针对HTML输出内容进行编代码。例如PHP的htmlentities()或是htmlspecialchars()、ASP的Server.HTMLEncode()、ASP.NET的Server.HtmlEncode()等等。让专门的程序库来处理输入内容的编代码,也可以减少程序设计者自行开发的额外成本,同时也能提供更为完善的防备考虑。而像微软,更提供了一个名为Microsoft Anti-Cross Site Scripting Library的程序库,提供了各种HTML、JavaScript、URL、XML、VBScript的过滤及编代码机制。如此一来.便可以透过这一套程序库,将来自于使用者输入的字串,或是以使用者输入字串为基础的输出字串进行转换,成为单纯的文字,而不含可于浏览器上执行script程序,因此能够降低遭受到攻击的风险。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载