MySQL中SQL的单字节注入与宽字节注入漏洞(gbk编码,addslashes)
[ 2012-07-03 13:34:52 | 作者: admin ]
一、单字节SQL注入
MYSQL的SQL注入已经由来已久,以下是普遍采用的注入步骤:
1、在GET参数上加一个/*或者#(mysql专有的注释),判断数据库是否是mysql,比如:
http://www.xxx.com.cn/article.php?id=1607 and 1=1/*
2、猜解某表的字段数,从order by 1一直更改到页面出错为止,就可以得到该表的字段数
注入URL:http://www.xxx.com.cn/article.php?id=1607 or 1=1 order by 10#
对应的SQL: select * from articles where id=1607 or 1=1 order by 10#….
3、使用该表和用户表进行关联查询,在文章列表里就可以看到用户名和密码了。当也要猜解用户表的表名和用户名、密码的字段名,比如上一步得到的字段数是5:
...
阅读全文…
MYSQL的SQL注入已经由来已久,以下是普遍采用的注入步骤:
1、在GET参数上加一个/*或者#(mysql专有的注释),判断数据库是否是mysql,比如:
http://www.xxx.com.cn/article.php?id=1607 and 1=1/*
2、猜解某表的字段数,从order by 1一直更改到页面出错为止,就可以得到该表的字段数
注入URL:http://www.xxx.com.cn/article.php?id=1607 or 1=1 order by 10#
对应的SQL: select * from articles where id=1607 or 1=1 order by 10#….
3、使用该表和用户表进行关联查询,在文章列表里就可以看到用户名和密码了。当也要猜解用户表的表名和用户名、密码的字段名,比如上一步得到的字段数是5:
...
阅读全文…
MySQL性能优化的最佳20条经验,explain之possible_keys、key及key_len介绍
[ 2012-06-22 16:04:22 | 作者: admin ]
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。
1. 为查询缓存优化你的查询
大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。
这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例:
...
阅读全文…
1. 为查询缓存优化你的查询
大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。
这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例:
...
阅读全文…
Mysql中,int数据类型长度说明
[ 2012-04-26 10:39:43 | 作者: admin ]
p.s.有时候会出现 mediumint不够用的情况,用int(4)似乎就够了
int(M) 在 integer 数据类型中,M 表示最大显示宽度。
在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。
和数字位数也无关系 int(3)、int(4)、int(8)
在磁盘上都是占用 4 btyes 的存储空间。
除了字段类型设 zerofill(补零)有点不同外,int(M) 跟 int 数据类型是相同的。
补零的情况:
mysql> desc test;
+-------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
...
阅读全文…
int(M) 在 integer 数据类型中,M 表示最大显示宽度。
在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。
和数字位数也无关系 int(3)、int(4)、int(8)
在磁盘上都是占用 4 btyes 的存储空间。
除了字段类型设 zerofill(补零)有点不同外,int(M) 跟 int 数据类型是相同的。
补零的情况:
mysql> desc test;
+-------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
...
阅读全文…
mysql得到时间戳的函数UNIX_TIMESTAMP
[ 2012-04-23 17:09:29 | 作者: admin ]
来自:http://hi.baidu.com/hcylz/blog/item/892141f3c29d95cc0a46e0eb.html
今天在处理时间问题时,想把时间的字段转变成unix时间戳的形式存储,以便于在比较时提高性能。而我处理这个时间字段的时候又是通过触发器来完成的,所以无法借助php的函数。由于没有用过这方面的函数所以就开始google和手册,经过一番努力找到了UNIX_TIMESTAMP,下面有这个函数的解释;本来很高兴以为大功告成了,结果在测试的时候出现了偏差,转出来的时间戳总是存在问题,仔细一看要比本地时间整整晚了8个小时,所以就想到了时区的问题,仔细一看这个函数的解释才明白人家实现相对于'1970-01-01 00:00:00' GMT 之后的秒数,而我们是GMT+8,于是就想了一个比较直接切比较笨的办法:
CREATE TRIGGER cus_info_tbl_tr AFTER INSERT ON cus_info_tbl
...
阅读全文…
今天在处理时间问题时,想把时间的字段转变成unix时间戳的形式存储,以便于在比较时提高性能。而我处理这个时间字段的时候又是通过触发器来完成的,所以无法借助php的函数。由于没有用过这方面的函数所以就开始google和手册,经过一番努力找到了UNIX_TIMESTAMP,下面有这个函数的解释;本来很高兴以为大功告成了,结果在测试的时候出现了偏差,转出来的时间戳总是存在问题,仔细一看要比本地时间整整晚了8个小时,所以就想到了时区的问题,仔细一看这个函数的解释才明白人家实现相对于'1970-01-01 00:00:00' GMT 之后的秒数,而我们是GMT+8,于是就想了一个比较直接切比较笨的办法:
CREATE TRIGGER cus_info_tbl_tr AFTER INSERT ON cus_info_tbl
...
阅读全文…
mysql 数据库导入错误:40101
[ 2011-11-28 15:57:14 | 作者: admin ]
朋友申请了一个免费的 mysql 数据库空间做测试,今天上午就把数据库导入试试,反正导了几次都出错。错误提示:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
我本地的 mysql 版本是:5.1.45,编码是 utf-8
服务器 mysql 版本是:5.1.33,编码我也转了 utf-8 了。
刚开始以为是版本的问题,但是版本都是 5.1.x 的,应该相关不会很多。我又在自己的机器上再建一个库导入试试,发现可以成功,何解?还是问谷哥哥吧。
从疯狂的小毛驴的百度 hi 找到解决问题的文章如下:
-------------------------------
导入mysql数据库时不能导入
mysql 5n 向 4n 转换中文乱码的处理经验
问题:由于4n版本的数据库编码为latin1,5n版本的数据库编码为utf8.导致。
...
阅读全文…
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
我本地的 mysql 版本是:5.1.45,编码是 utf-8
服务器 mysql 版本是:5.1.33,编码我也转了 utf-8 了。
刚开始以为是版本的问题,但是版本都是 5.1.x 的,应该相关不会很多。我又在自己的机器上再建一个库导入试试,发现可以成功,何解?还是问谷哥哥吧。
从疯狂的小毛驴的百度 hi 找到解决问题的文章如下:
-------------------------------
导入mysql数据库时不能导入
mysql 5n 向 4n 转换中文乱码的处理经验
问题:由于4n版本的数据库编码为latin1,5n版本的数据库编码为utf8.导致。
...
阅读全文…
MYSQL中的字符串连接符
[ 2011-11-23 15:34:25 | 作者: admin ]
记得MSSQL中貌似是用加号可以直接连接,GOOGLE了一把才知道MYSQLk 需要用到concat函数来连接多个字符串。
update `phpcms_content` set url = concat(‘html/2010-05/’,contentid,’.htm’) where catid=137
update `phpcms_content` set url = concat(‘html/2010-05/’,contentid,’.htm’) where catid=137
Linux系统日志管理
[ 2011-06-30 16:15:03 | 作者: admin ]
日志分类:
1. 连接时间的日志
连接时间日志一般由/var/log/wtmp和/var/run/utmp这两个文件记录,不过这
两个文件无法直接cat查看,并且该文件由系统自动更新,可以通过如下:
w/who/finger/id/last/lastlog/ac 进行查看
[root@xhot ~]# who
root tty1 2010-10-06 22:56
root pts/0 2010-10-06 22:26 (218.192.87.4)
root pts/1 2010-10-06 23:41 (218.192.87.4)
root pts/3 2010-10-06 23:18 (218.192.87.4)
[root@xhot ~]# w
01:01:02 up 2:36, 4 users, ...
阅读全文…
1. 连接时间的日志
连接时间日志一般由/var/log/wtmp和/var/run/utmp这两个文件记录,不过这
两个文件无法直接cat查看,并且该文件由系统自动更新,可以通过如下:
w/who/finger/id/last/lastlog/ac 进行查看
[root@xhot ~]# who
root tty1 2010-10-06 22:56
root pts/0 2010-10-06 22:26 (218.192.87.4)
root pts/1 2010-10-06 23:41 (218.192.87.4)
root pts/3 2010-10-06 23:18 (218.192.87.4)
[root@xhot ~]# w
01:01:02 up 2:36, 4 users, ...
阅读全文…
MySQL优化之COUNT(*)效率
[ 2011-06-28 08:35:03 | 作者: admin ]
说到MySQL的COUNT(*)的效率,发现越说越说不清楚,干脆写下来,分享给大家。
COUNT(*)与COUNT(COL)
网上搜索了下,发现各种说法都有:
比如认为COUNT(COL)比COUNT(*)快的;
认为COUNT(*)比COUNT(COL)快的;
还有朋友很搞笑的说到这个其实是看人品的。
在不加WHERE限制条件的情况下,COUNT(*)与COUNT(COL)基本可以认为是等价的;
但是在有WHERE限制条件的情况下,COUNT(*)会比COUNT(COL)快非常多;
具体的数据参考如下:
mysql> SELECT COUNT(*) FROM cdb_posts where fid = 604;
+————+
| COUNT(fid) |
+————+
| 79000 |
+————+
1 row in set (0.03 sec)
...
阅读全文…
COUNT(*)与COUNT(COL)
网上搜索了下,发现各种说法都有:
比如认为COUNT(COL)比COUNT(*)快的;
认为COUNT(*)比COUNT(COL)快的;
还有朋友很搞笑的说到这个其实是看人品的。
在不加WHERE限制条件的情况下,COUNT(*)与COUNT(COL)基本可以认为是等价的;
但是在有WHERE限制条件的情况下,COUNT(*)会比COUNT(COL)快非常多;
具体的数据参考如下:
mysql> SELECT COUNT(*) FROM cdb_posts where fid = 604;
+————+
| COUNT(fid) |
+————+
| 79000 |
+————+
1 row in set (0.03 sec)
...
阅读全文…