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语句来 实现 突击 。
三、防备之道 针对WebSQL 突击,我们有如下 步骤预防: 1) 审查输入类型,过滤惊险字符 我们需求 保障输入类型 相符预期,例如上面的id参数 定然是数字类型;同时过滤掉惊险的 要害字和符号,像PHP里addslashes这个函数的作用一样 。 2) 在SQL语句中 使用参数 模式 SQL语句是 可以用参数 模式的,例如
这种字符串拼接的 模式并不安全, 可以换为
这样能 保障参数的输入 相符设定的类型 。 3)慎重 对待每一次SQL操作 无论是select、modify、update或者delete,你编写的任何一条SQL语句操作都有可能成为 突击者的 突击对象,造成重大损失,所以都必须要慎重 对待 。 4)不要存储主要数据 当地数据库永远透明而不安全,主要的数据必须要存储在服务器上,当地数据库里没有主要数据就不会对消费者造成重大损失 。 5)杜绝XSS 漏洞 XSS 突击的防备将会在专门章节 阐述,本文不铺开详析 。 有关文章: HTML5安全风险详析之一:CORS 突击 HTML5安全风险详析之二:Web Storage 突击 |