您现在的位置: 万盛学电脑网 >> 网络安全 >> 安全资讯防护 >> 正文

XSS攻击防范的方法

作者:佚名    责任编辑:admin    更新时间:2022-06-22

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

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

  过滤输入信息有效吗?

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

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

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

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

  以正向表列的方式管制

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