“分享知识”目录存档

通过PHP程序获取汉字拼音

2005年01月12日,星期三

  细心的网友可能会发现,VeryCD的资源搜索是支持拼音的,不论你是直接输入拼音,还是输入同音字,我们的搜索程序都会提示你正确的关键字。比如: http://search.verycd.com/search?q=萧雅轩

  之前我们使用的是一个网上已经很普遍的汉字转拼音函数,通过使用后发现,这个函数的算法虽然简便,但只能取得GB2312中根据拼音排列的3755个常用汉字,所以其适用范围很有限。由于其它汉字大都按部首/笔画顺序排列,所以我们只能通过建立一个汉字-拼音表来实现一一对应。

  这个时候输入法生成器就派上了用场,利用它的逆转换功能生成一个汉字拼音的文本文件。然后再写了一个PHP小程序删除了这个文本文件中的词组和多音字。

CODE
<?
//注意,在2000/XP下生成的文本文件是Unicode格式,需要先转换到GB
$py = file_get_contents("WINPY.TXT");
$arr_tmp = explode("\r\n", $py);
$arr_py = array();
foreach ($arr_tmp as $v)
{
? ?if (preg_match("/^[".chr(0×81)."-".chr(0xfe)."].[a-z]/", $v))
? ?{
? ? ? ?$word = substr($v, 0, 2);
? ? ? ?if (!$arr_py[$word])
? ? ? ?{
? ? ? ? ? ?$arr_py[$word] = substr($v, 2);
? ? ? ? ? ?$output .= $v."\n";
? ? ? ?}
? ?}
}
$handle = fopen("WINPY2.TXT", ‘w’);
fwrite($handle, $output);
?>


以下压缩包中就是原始的WINPY.TXT和经过处理后的WINPY2.TXT
通过读入WINPY2.TXT再配合几个字符串操作函数就可以非常简单的获取到汉字的拼音了(具体的代码xdanger还在写,我这里就不贴出来了)

附注:我们在最后处理的时候忽略了多音字的因素,以后仍然有待改进。
   网上关于正则判断中文的文章大都使用[chr(0xa1)-chr(0xff)]来判断中文,事实上这只能判断出GB2312的几千个汉字,生僻字和繁体字都不包含在内,正确的应该是[chr(0x81)-chr(0xfe)]
WINPY.rar

PHP重大漏洞,已有大量网站被黑

2004年12月22日,星期三

添加图片
大意了,前两天明明看到PHP有重大安全升级,但是没意识到有那么严重,我们的一台Windows服务器今天因此被黑,硬盘上所有的html文件和php文件被替换成

HTML

<HTML><HEAD>
<TITLE>This site is defaced!!!</TITLE>
</HEAD><BODY bgcolor=”#000000” text=”#FF0000“>
<H1>This site is defaced!!!</H1>
<HR>
<ADDRESS><b>NeverEverNoSanity WebWorm generation 10.</b></ADDRESS>
</BODY></HTML>


Google了一下,已经有大量和我们同样命运: http://www.google.com/search?q=NeverEverNoSanity

再次查询这个漏洞的详情

QUOTE
PHP编程语言存在远程任意文件读取及目录遍历漏洞

受影响系统:

PHP PHP 5.0.2
PHP PHP 5.0.1
PHP PHP 5.0.0
PHP PHP 4.3.9
PHP PHP 4.3.8
PHP PHP 4.3.7
PHP PHP 4.3.6

不受影响系统:

PHP PHP 5.0.3
PHP PHP 4.3.10

详细描述:

PHP是一种流行的WEB服务器端编程语言。

PHP存在输入验证漏洞,远程攻击者可以利用这个漏洞读取系统文件内容及进行目录遍历攻击。

问题一是addslashes()存在问题,addslashes()用于过滤用户输入,在magic_quotes_gpc设置”on”时,将对每个输入执行addslashes()进行过滤,但是由于NULL字节不正确被addslashes()编码,如果用户输入被include()或 require()使用,可能导致攻击者读取文件系统的任意文件。

问题二是上传路径遍历问题,PHP自动过滤上传的文件名数据,删除在斜杠或反斜杠之前的数据,但是如果攻击者上传的文件包含单引号,而WEB服务又设置magic_quotes为ON,或者对上传文件名执行addslashes()操作,那么在单引号前会前缀一个反斜杠,因此在Windows系统可造成目录遍历问题,导致文件上传到系统任意目录中。

我们的服务器似乎就是因为存在第二个问题而被黑……
解决此漏洞的方法就是立即升级php版本: cn.php.net

如何使用Blog的TrackBack功能

2004年12月18日,星期六

QUOTE
TrackBack最早是Movable Type上的一个小功能。可以说就是这个小功能在blog界却掀起了一场革命。

TrackBack为将全世界无数个blog连接起来的功能。例如,当你读了某个网站的文章,想对此写下自己的感想。这个时候利用网站准备的讨论功能进行投稿是很最常见的做法。但这样只是把自己的评论意见写下来向别人的网站投稿,而你自己手里却什么也没留下。

如果你还不知道什么是TrackBack,请先学习一下这个:关于TrackBack

以下将简单叙述使用TrackBack的过程

首先点击进入目标Blog,复制该Blog的TrackBack链接。

QUOTE
添加图片

然后到自己的Blog中,点击“条目选项”,选择“Send TrackBack”,填入目标Blog的TrackBack链接,点击“Go”

QUOTE
添加图片

TrackBack通知发送成功后,就可以看到,对方的Blog中已经显示出了你对他的TrackBack。

QUOTE
添加图片

注: TrackBack通知的发送并不限于本站内,它可以与所有支持TrackBack功能的Blog通用。

抵御SYN攻击

2004年12月14日,星期二

今天网站服务器又受到了SYN攻击 sad.gif

CODE
[root@host3 root]# netstat -ant | grep SYN_RECV | wc -l
? ?769


网上无聊的人可真多啊。

我们目前只能通过激活 TCP SYN Cookie 保护来抵御syn攻击

CODE
echo 1 > /proc/sys/net/ipv4/tcp_syncookies


使用这个要记得将其写入/etc/rc.d/rc.local,否则下次启动就失效了……

SSH登陆时,怎样才能无需使用密码

2004年11月17日,星期三

由于尝试调整VeryCD的服务器集群架构,需要让各个服务器间通过ssh来自动同步数据。因为所有的操作都要在脚本中自动执行,所以必须要让脚本执行时不需要输入密码就能登陆SSH。

请教了“曾浩峰”后,掌握了建立ssh的公私密钥来实现此功能的方法:

首先建立本机的公私密钥

CODE

[root@host1 root]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
9b:40:4c:a1:9c:d0:10:d6:bf:1b:5f:0d:8c:6b:0c:0a root@host1
[root@host1 root]#


注意不要输入passphrase

然后将公钥文件传送到需要登陆的服务器

CODE

[root@host1 root]# scp .ssh/id_dsa.pub root@host2:id_dsa.pub
root@host2.verycd.com’s password:
id_dsa.pub ? ? ? ? ? 100% |*****************************| ? 600 ? ? ? 00:00

登陆那台服务器

CODE
[root@host1 root]# ssh -v root@host2

将刚才的公钥文件内容添加到用户的.ssh目录下的authorized_keys文件中

CODE

[root@host2 root]# cat id_dsa.pub >> /root/.ssh/authorized_keys

然后更改该文件权限

CODE

[root@host2 root]# chmod 600 /root/.ssh/authorized_keys

退出

CODE

[root@host2 root]# exit
Connection to host2 closed.
[root@host1 root]#

再次登陆即不再需要密码了

CODE
[root@host1 root]# ssh host2
Last login: Wed Nov 17 17:55:34 2004 from 61.129.xxx.xxx
[root@host2 root]#