出现如标题错误的最大可能原因是。。。
膘叔的简单人生
出现如标题错误的最大可能原因是。。。
简单的说吧,两种配置,一种是客户端,一种是服务端 ,客户端配置ServerAliveInterval,服务端配置:ClientAliveInterval和ClientAliveCountMax
我知道INNODB不錯,但是我的VPS只有小小的512M內存,實在是扛不住,這玩意啥也不錯就吃掉了我不少內存了。於是我直接在my.cnf裏加上了skip-innodb。結果服務無法啟動。
找了一下資料 ,原來mysql 5.5以上的時候,默認的引擎就是innodB,因此,如果要skip掉它,必須告訴 mysql我的默認引擎是myisam。因此代碼就變成了這樣,在[mysqld]中加入:
default-storage-engine = MyISAM
然後再skip-innodb,接著運行service mysql restart,世界清靜 了。
原來運行top的時候,mysql一直佔有著70%左右的CPU。現在立刻清零。
一下子安逸了
关注一下这玩意是因为在命令行下写程序的时候,发现不能够自我守护。都只能用shell来再开一个进程监控。本来想做三角监控的,但想想,只是为了一个小程序,我得写三个程序来自我守护,真没劲啊。
所以,找到pcntl_fock函数的时候很激动,其实在很久以前看过,但是没关注过,毕竟很多时间跑命令行程序的时候,一下子就跑完了,真正跑了不退出的程序,真的很少用。
<?php
$pid = pcntl_fork();
if($pid == -1){
//创建失败咱就退出呗,没啥好说的
die('could not fork');
}
else{
if($pid){
//从这里开始写的代码是父进程的,因为写的是系统程序,记得退出的时候给个返回值
exit(0);
}
else{
//从这里开始写的代码都是在新的进程里执行的,同样正常退出的话,最好也给一个返回值
exit(0);
}
}
?>
所以,以下内容就来自于上述代码中有涉及到的博客:
这样一改好理解多了,如果你父进程希望知道子进程正常退出的话,可以加上前面的pcntl_wait.
函数的用法是整明白了,在实际的工作中有什么用处呢?
1.后台程序
命令行程序好写,服务程序也好写,笔者觉得这服务程序最难写.想想原来想在windows下写个服务啥的,又是要注册服务又是要这样那样的老费劲了.现在专职管理linux想让个命令行程序在后台运行,直接在命令后面加个&就搞定了.但是这样总觉得土.有了pcntl_fork突然发现世界是那么的美好.当主进程成功创建子进程并获得子进程的id以后,自己在临死前还不忘说一句:"我已成功运行,我的id是:xxxx(子进程的id)",完了还给系统返回个0(正常退出),哈哈,死都死的那么有尊严.
前面说的是程序常驻内存的情况,当然了这时候要注意内存的释放以及向日志文件打印信息,而不是往屏幕上(一打印信息程序就退出的哟).还有一种情况是:程序被其它脚本调用,其它脚本只关心程序是不是正常运行,如果程序要运行很长时间才能运行完的话,最好不让脚本等待.这样的话pcntl_fork又派上用场了:)
2.延时处理.
有的时候,我们程序退出的时候要清理自身产生的东西,比如说要删除自己(当然了linux下面是可以删除正在运行的文件的,只是举个例子),这个时候就可以另起动一个进程,然后自己结束了,把事情交给另一个进程来做.当我们写服务程序的时候,我们肯定是写日志文件记录程序的运行情况(要不谁知道程序是不是在那睡大觉的:0).程序正常退出的时候我们可以写一条日志说程序退出了,但是当程序收到linux下伟大的kill -9的时候,怎么记录自己的退出行为呢?额.....这个和php的进程信号有关好像和这个没多大关系.
另一种情况:一个完善的程序一般都支持start,stop,restart这样的参数.start好说,stop也好说,既然start和stop都好说了,这个restart就先stop然后再start就可以了啊.额...好像又和pcntl_fork没多大关系,当你收到重启的信号总不能还是kill然后再start吧,是不是太黄太暴力了?还是温柔一点,让当前进程退出,让另外的进程再把它拉起来吧.在windows下想实现这一点似乎很困难呢,比如程序更新的时候,一般都是单写更新程序,或者程序退出的时候另起动一个批处理启动自己:)
3.不死进程
其实就是传说中的双进程了.早些年的时候万象网管为了达到不被恶意结束的目的用的就是这招了.虽然咱不用担心程序被人恶意停止,但是也保不齐主程序因为任务太重抗不住自己先挂了(这种情况也不是不会发生).所以......
说了这么多,只是对写程序的一些思考,对一个函数用法的延伸.我想到了这么多,你呢?
不知道是否能够做到这个地步,但是先关注一下,只是现在加班频繁,都不知道有没有时间来折腾它。套用锅巴说的一句:忙的象狗的人往 往都是穷鬼
在微博的#SAE技术分享# 看到一些有意思的东西,比如这一篇的标题,嗯,确实是有一些奇怪的玩意。
比如,ubuntu下的apt-get moo,居然出来了这样的玩意,你能相信吗?》
root@webserver:/# apt-get moo
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
...."Have you mooed today?"...
好一只羊?还有一些其他的命令,比如yes,好象记得这个命令是专门用来处理自动化安装的吧?即自动输入y,N个,直到安装完成,如果没有安装,就在屏幕上拼命的输出。。。
还有一些其他的。。比如banner,会将你输入的字符用##打印出来,比如我这个:
root@webserver:/# banner bannertest
##### ## # # # # ###### #####
# # # # ## # ## # # # #
##### # # # # # # # # ##### # #
# # ###### # # # # # # # #####
# # # # # ## # ## # # #
##### # # # # # # ###### # #
,再比如fortune,这个函数很有意思,既能学英文又可以很好玩,该网页上这么显示了:
orange@orange-desktop:~$ fortune
Q:How many IBM types does it take to change a light bulb?
A:Fifteen. One to do it, and fourteen to write document number
GC7500439-0001, Multitasking Incandescent Source System Facility,
of which 10% of the pages state only "This page intentionally
left blank", and 20% of the definitions are of the form "A:.....
consists of sequences of non-blank characters separated by blanks".
想看更多?到这里看一下吧:http://www.linuxidc.com/Linux/2007-05/3784.htm,不是每个linuxer都是闷瓜。
有意思的文章,大多数时候,我们都是知道\r,\n,\r\n,但为什么是这样的呢,居然找到了一篇科普贴。
来吧,看看为什么吧。
原文来自:【科普贴】话说回车和换行
看xml的时候发现这样的一段话:
XML 以 LF 存储换行
在 Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。这对字符与打字机设置新行的动作有相似之处。在 Unix 应用程序中,新行以 LF 字符存储。而 Macintosh 应用程序使用 CR 来存储新行。
让我对这三个(win,unix,mac)苦逼的主产生了兴趣,为啥你们不一样呢,难道你们认识“回车”和“换行”的时间有先有后吗?为啥没统一或者说为啥产生了CR和LF这两个玩意?说说历史吧!
潜台词:很多时候敲击enter就是换行了呀,还回啥个车,回车就是换行吗?
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行。
可能是基于成本和效率的考虑,我认为都统一成一个“回车”就够了,可是当年正是这种想法导致了现在的问题,至于这三家互不相同,我也不知道,各有各的考虑吧,反正蛋疼的是用户,比起现在浏览器的兼容性问题,这算不上问题。
以下是他们表示“下一行”的方式:
OS 表示 C语言表示 16进制表示
windows 回车+换行(CR/LF) \r\n 0x0d0a
UNIX 换行符(LF) \n 0x0a
MAC 回车符(CR) \r 0x0d
看一下在一份xml文件里的情况吧,我没钱买苹果,所以下面不包括MAC OS,果粉别砍我!


至少你知道这是怎么回事了,至少在不同平台之间传送文件时别傻傻的骂别人没整理文件格式,至少...,这还不够吗?
-------------
在用PHP写文件的时候,一般我们都是用\n来解决断行。但这时候,如果用windows下的记事本打开这个文件,你会发现一堆黑框,并且处在一行里。
因此,看了上面的文章后,你会知道怎么办了。突然想到以前的str_replace(array("\r\n","\r","\n"),"<br />",$str), 这种烂代码。当然nl2br就解决这样的功能了。然后再转回来?哎。纠结啊。。
服务器为了性能,已经启用了几个扩展,今天早上,又重新为它加上了memcache这个扩展。
其实以前memcached我早就装了,但memcache扩展我一直没有启用,如果用那个纯PHP的接口,也还是可以使用的。现在用上自带的标准接口,是为了未来的yii框架做打算(不过我也只开了很少的64M的缓冲区,对于我这样的小网站,足够了)
在ubuntu上安装memcache扩展是非常方便的。apt一下就全回来了。只是apache+php+mysql是单独配置的。所以还得象网上那些教程一样按顺序操作
1、wget http://pecl.php.net/get/memcache-2.2.3.tgz
2、tar zxvf memcache-2.2.3.tgz 到一个目录里
3、运行/software/php/bin/phpize 会得到一个环境变量(您的系统可能是/usr/local/bin/phpize)
4、./configure –enable-memcache –with-php-config=/usr/local/bin/php-config –with-zlib-dir
如果没有中断,可以直接执行第五步,如果有中断情况,则检查原因
5、make && make install (查看最后输出的路径)
6、到php.ini里查看一下你的Extension指向的路径,把第5步里的路径中的文件copy到extension指向的目录
同时加上extension="memcache.so";
7、/etc/init.d/apachectl restart
OVER
在做PHP开发的同时,不可避免的会使用linux。好吧,即使你不精通linux,你怎么着也得会一些常见的命令吧,不说高深的东西,最起码你要会cp,mv,chmod,chown,tar之类的,否则,你连文件都无法移动位置。
国内在02~03年左右,鸟哥的私房菜大概是影响了很多人吧,由于我一直是在win下,所以LINUX接触不多,但也确实听说了这个。这次看到这篇博客,里面介绍了好多的书籍,所以复制了一下(自己也有过LINUX的书籍,被人抢走了。。。。)
来,上菜了。。原文来自:http://www.cnblogs.com/wwang/archive/2011/01/27/1944406.html
相对于 Daniel P. Bovet 和 Marco Cesati 的内核巨著《 Understand the Linux Kernel 》,它少了五分细节,相对于实践经典《 Linux Device Drivers 》,它多了五分说理。可以说,本书填补了 Linux 内核理论和实践之间的鸿沟,“一桥飞架南北,天堑变通途”。
自从我的开发环境换成ubuntu后,对于SVN总感觉不象以前那样痛快。毕竟习惯了windows下的小乌龟了,于是找了很多资料,然后在某篇博客里发现了这个rabbitvcs,兴冲冲的装上去。
然后,就开始我的rabbitvcs之旅了,只是这段旅行并不快乐,在我写这篇文章的时候,它已经被我remove掉了。
先简单介绍一下rabbitvcs吧,它是一个GUI的SVN client,界面和操作方法都有点类似于小乌龟,所以,上手度极高。配置起来也挺方便,如果你装的是中文版的ubuntu,菜单中还有部分会被汉化。如果你用过小乌龟,那么我就不多说了。如果你没有用过,那我说了也白说。
剩下的就是我说缺点了,它有一个最大的缺点,那就是,SVN目录如果稍微过大,它就会在打开目录的时候,几乎停止响应。OK,你停止响应也就算了,你不能影响到所有打开的目录吧,只要是涉及到目录打开的,都会停止响应,时间比较长。
还有一个缺点就是,无论你怎么设置保存密码,它都记不住,我靠,你都记不住,你把那个复选框放出来干啥。真受不了。
所以,我卸载了,当然,最主要的原因,还是因为它卡死了目录。
现在我还是到SVN目录下,直接执行:svn update --username=xxx --password=xxx,速度超快,看来以后还是这样比较好。
看到这篇文章的时候是在晚上,然后就觉得好郁闷,不过也挺佩服淘宝QA那些人的奇思怪想,看看他们是怎么说的吧。
一、关于文件名
大家都知道在 windows 下面文件名是有规则,定义了一些保留的字符,他们分别是:
< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
而linux下面是没有对这些大部分字符进行限制的,可以随意定义的,那么,我们就可以将 XSS Pyload 存储在文件名中,如图所示:

我们可以看到可以成功将 xss pyload 存储在文件名当中了。
二、利用攻击
很多时候,由于代码的各种环境,让我们的攻击成为可能,查看以下PHP上传文件代码:
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>
<html>
<body>
<form action="" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
当文件上传成功,程序将文件信息进行输出。而此时没有对文件名进行任何处理,那么,如果将我们定义好的特殊字符的文件名进行上传,然后经过程序输出,就可以攻击了,如图所示:

可以看到,我们确实可以攻击成功了!那么,并不是所有的上传地方都存在,要满足以下条件才可以:
1、文件上传后保存前进行了一次原样输出。
2、直接按原文件名进行存储。
3、其他特定环境,看程序逻辑。
4、web server 为 linux。
5、上传攻击机器为 linux。
示例代码:http://code.google.com/p/madal-example-project/source/browse/trunk/controllers/image_uploader.php?r=2
更多的:http://code.google.com/query/#q=$_FILES[%22file%22][%22name%22]
线上攻击测试:http://www.woyigui.cn/fileupload.php
三、防范
1、存储时以随机文件名保存。
2、任意时候对文件名进行处理后输出,可以进行 html 编码后输出。
参考:
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx
--EOF——
原文来自:http://qa.taobao.com/?p=10139,虽然这个条件很苛刻,但毕竟还是存在被注入的可能啊,而且这种注入真的很妖。