自从用上SQLite数据库以来,就一直在用SQLite Expert作为图形化管理工具。这个工具的功能非常强大,但糟糕的是,它是一款收费软件,因此之前用的都是破解版。近来在忙前端的工作,好久没打开这个工具了。今天一开,提示版本更新了,而且最新的版本号是3.0.20,比我当前用的2.3.9要高出一个大版本号。
访问官网后发现,SQLite Expert已经分为个人版和专业版两个版本,个人版是免费的,专业版售价$59。下载了个人版并安装好后,立刻开始试用。3.x版本的图标变了:

但界面还是老样子,没有太大的区别:
SQL注入漏洞曾经是Web应用程序的噩梦,CMS、BBS、Blog无一不曾受其害。
SQL注入的原理
以往在Web应用程序访问数据库时一般是采取拼接字符串的形式,比如登录的时候就是根据用户名和密码去查询:
string sql = "SELECT TOP 1 * FROM [User] WHERE UserName = '" + userName + "' AND Password = '" + password + "'";
其中userName和password两个变量的值是由用户输入的。在userName和password都合法的情况下,这自然没有问题,但是用户输入是不可信的,一些恶意用户只要用一些技巧,就可以绕过用户名、密码登录。
假设password的值是"1' or '1' = '1",userName的值随便取,比如是"abc",那变量sql的值就是:
"SELECT TOP 1 * FROM [Use
目前流行的数据库都提供了自动编号类型,SQLite也不例外。当数据库中包含自动编号的字段时,SQLite会自动建立一个名为 sqlite_sequence 的表。这个表包含两个字段:name 和 seq 。name字段记录了自动编号字段所在的表,seq字段记录了当前用到的序号(下一条记录的编号就是当前序号加1)。
在开发过程中,我们经常要把表重置。也就是说把表中的记录全部清空,并把自动编号归0。在SQLite中,只需要修改 sqlite_sequence 表就可以了:
UPDATE sqlite_sequence SET seq = 0 WHERE name = 'TableName'
也可以直接把该记录删掉:
DELETE FROM sqlite_sequence WHERE name = 'TableName'
要是想重置所有表,那直接把 sqlite_sequence
大部分数据库在进行字符串比较的时候,对大小写是不敏感的。但是,最近使用SQLite的时候,却发现它的情况恰好相反。
假设表User的结构和值如下:
执行下面的SQL语句:
SELECT * FROM [User] WHERE UserName = 'user1'
结果是没有找到任何记录。明显地,SQLite在进行字符串比较的时候,默认对大小写是敏感的。这会对应用程序造成不良的影响。比如