HTML应用安全

  HTML应用安全

  通常,我们使用HTML来创建交互网站,我们不能保证网络上每一个用户都是正直,友好的,为了大部分友好用户的体验和安全,我们需要关注网站的脆弱性,防止攻击者通过这些弱点进行攻击,窃取用户信息。本篇关注应用程序的安全性及应用程序开发过程中易犯的错误,主要介绍跨站脚本(XSS)和跨站请求伪造(CSRF)。

  网络上大部分安全问题都是源于“origin”(源或域)这一概念,主要的攻击都涉及到跨域行为。

  XSS (Cross-site scripting)

  XSS,跨域脚本攻击,是当前比较常见的一种网络攻击。

  SQL注入(SQL injection)

  在接受不确定输入内容(如第三方站点消息,URL参数,用户创建的文本批注等)时,在使用前对数据进行验证并且在展示时进行适当的编码是必不可少的,否则,可能会有恶意用户对网站进行攻击,轻者只是传递不规范的数据,严重的可能攻击服务器,扰乱网站正常运行,如,注入SQL脚本清除服务器上所有数据等。

  通常编写过滤器验证用户输入时,过滤器应该是基于白名单(已知的安全结构)配置编写,允许白名单通过,不允许其他输入;而基于黑名单(已知的不安全结构)配置编写,即允许除了黑名单之外的所有输入,是不安全的,因为还有许多未知的不安全事物。

  JavaScript脚本注入

  通常我们根绝URL中的指定参数,返回给用户不同页面,提供给用户如下导航:

  

 

  

  • Home

     

      

  • About Site

     

      

  • My Account

     

      

 

  如上,若以上URL没有编码直接展示给用户,恶意攻击者可以截断URL并插入一个script元素:

  http://blog.jhss.com/?id=%3Cscript%3Ealert%28%27Oh%20no%21%27%29%3C/script%3E

  若其他用户访问这个URL页面,则会执行注入的script标签内的任意脚本,恶意者可以指定恶意代码,窃取用户信息。

  还有很多方式被用来欺骗站点执行注入的代码,如下是我们应该考虑的方面:

  1.当时用看似无害的元素时,应该限制其可以使用的属性。如, 元素,如果允许使用onload属性,则攻击者可以使用onload属性添加回调函数执行任意指定代码。

 

  2.当允许插入 元素时,意味着当前页面所有