HTML5安全风险详析之三:WebSQL攻击


  本文标签:HTML5安全 WebSQL安全

一、WebSQL安全风险简介

数据库安全向来是后端人员 宽泛关注和需求预防的问题  。然而自从HTML5引入当地数据库和WebSQL之后,前端开发关于数据库的安全也必须要有所了解和 警觉  。WebSQL的安全问题通常 体现为两个 部分:

第一种是SQL注入:和当地数据库一样, 突击者 可以通过SQL注入点来进行数据库 突击  。

另外一方面,假如Web App有XSS 漏洞,那么当地数据很方便 透露, 可以想想当地数据库里存储了消费者近期交易记录或者私信的状况  。

二、WebSQL安全风险详析

1、SQL注入

例如我们有一个URL为http:/blog.csdn.net/hfahe?id=1,它 接纳了一个id参数来进行当地数据库 查问并输出,对应的SQL语句为“select name from user where id = 1”  。

然而针对这个 方便的SQL 查问, 突击者 可以 构造一个 虚假的输入数据“1 or 1 = 1”,那么我们的SQL语句将变为“select name from user where id = 1 or 1 = 1”  。这就相当 蹩脚了,由于1=1这个条件总是成立的,那么这条语句将遍历数据库user表里的全部记录并进行输出  。

利用这种 模式, 突击者 可以 构造多种 突击的SQL语句,来控制消费者的当地数据库记录  。

2、XSS与数据库控制

在有XSS 漏洞的状况下, 突击者猎取当地数据需求如下几个步骤:

1)猎取JavaScript数据库对象

2)猎取SQLite上的表 构造

3)猎取数据表名

4)操作数据

例如如下脚本 完全的实现了上面的步骤,我在Chrome控制台里运行即可得到消费者当地数据库的表名,利用这个表名 突击者 可以用任何SQL语句来 实现 突击  。

  1. 01.var dbo;    
  2. 02.var table;    
  3. 03.var usertable;    
  4. 04.for(i in window) {    
  5. 05.    obj = window[i];    
  6. 06.    try {    
  7. 07.        if(obj.constructor.name=="Database"){    
  8. 08.            dbo = obj;    
  9. 09.            obj.transaction(function(tx){    
  10. 10.                tx.executeSql(SELECT name FROM sqlite_master WHERE type=\table\, [], function(tx,results) {    
  11. 11.                    table = results;    
  12. 12.                },null);    
  13. 13.            });    
  14. 14.        }    
  15. 15.    } catch(ex) {}    
  16. 16.}    
  17. 17.if(table.rows.length > 1)    
  18. 18.    usertable = table.rows.item(1).name;  

三、防备之道

针对WebSQL 突击,我们有如下 步骤预防:

1)  审查输入类型,过滤惊险字符

我们需求 保障输入类型 相符预期,例如上面的id参数 定然是数字类型;同时过滤掉惊险的 要害字和符号,像PHP里addslashes这个函数的作用一样  。

2)  在SQL语句中 使用参数 模式

SQL语句是 可以用参数 模式的,例如

  1. 01.executeSql("SELECTname FROM stud WHERE id=" + input_id) 

这种字符串拼接的 模式并不安全, 可以换为

  1. executeSql("SELECTname FROM stud WHERE id=?“, [input_id]);) 

这样能 保障参数的输入 相符设定的类型  。

3)慎重 对待每一次SQL操作

无论是select、modify、update或者delete,你编写的任何一条SQL语句操作都有可能成为 突击者的 突击对象,造成重大损失,所以都必须要慎重 对待  。

4)不要存储主要数据

当地数据库永远透明而不安全,主要的数据必须要存储在服务器上,当地数据库里没有主要数据就不会对消费者造成重大损失  。

5)杜绝XSS 漏洞

XSS 突击的防备将会在专门章节 阐述,本文不铺开详析  。

有关文章:

HTML5安全风险详析之一:CORS 突击

HTML5安全风险详析之二:Web Storage 突击