有一个开源项目提供将PHP代码转换成Scala代码的功能,该项目的网站是 http://code.google.com/p/php-to-scala-migration-helper/。
In short, php-to-scala converts PHP code to clean, maintainable Scala source code. To cut to the chase, see ConversionExamples, or the feature-by-feature DesignDocument.
PHP-to-Scala Migration Helper is technically a PHP Compiler, but it differs radically from other existing compilers such as Hip-Hop, PHC, Raven, Roadsend, Phalanger, and Quercus, in a few key points (see: KeyDifferences for details), most importantly the primary, usable output of the tool is nice, maintainable Source Code, not executable or Java bytecode. ......
这个漏洞严格上说并不是 Nginx 和 PHP 本身的漏洞造成的,而是由配置造成的。在我之前写的许多配置中,都普遍存在这个漏洞。
简易检测方法:
打开 Nginx + PHP 服务器上的任意一张图片,如:
http://blog.lrenwang.com/test.png
如果在图片链接后加一串 /xxx.php (xxx为任意字符)后,如:
http://blog.lrenwang.com/test.png/xxx.php
图片还能访问并且输出的 Content-Type 为 text/html 的话,说明你的配置存在漏洞。
分析原因
Nginx 传给 PHP 的值为 /var/www/lrenwang/test.png/xxx.php,即 $_SERVER 中 ORIG_SCRIPT_FILENAME 的值,但是 $_SERVER 中 SCRIPT_FILENAME 却是 /var/www/test/test.png。
原因是,/var/www/lrenwang/test.png/xxx.php 并不存在,对于这些不存在的路径,PHP 会检查路径中存在的文件,并将多余的部分当作 PATH_INFO。
这里,/var/www/lrenwang/test.png 被 PHP 解析为 SCRIPT_FILENAME,/xxx.php 被 PHP 解析为 PATH_INFO 后被丢弃,因此并没有在 $_SERVER 中出现。
解决方法:
解决这个漏洞的方法很显然:关闭上面所述的解析即可。
这个解析可以在 PHP 的配置文件中设置,默认为开启。在这里我们需要将它关闭:
;cgi.fix_pathinf ......
声明:补充翻译了原帖中几处未翻译处。
---------------------------------------------------- 转帖开始 -------------------------------------------------------
PHP中的CURL函数库(Client URL Library Function)
curl_close - 关闭一个curl会话
curl_copy_handle - 拷贝一个curl连接资源的所有内容和参数
curl_errno - 返回一个包含当前会话错误信息的数字编号
curl_error - 返回一个包含当前会话错误信息的字符串
curl_exec - 执行一个curl会话
curl_getinfo - 获取一个curl连接资源句柄的信息
curl_init - 初始化一个curl会话
curl_multi_add_handle - 向curl批处理会话中添加单独的curl句柄资源
curl_multi_close - 关闭一个批处理句柄资源
curl_multi_exec - 解析一个curl批处理句柄
curl_multi_getcontent - 返回获取的输出的文本流
curl_multi_info_read - 获取当前解析的curl的相关传输信息
curl_multi_init - 初始化一个curl批处理句柄资源
curl_multi_remove_handle - 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select - Get all the ......
预期准备:
一个139邮箱,收到邮件后,可以免费给你短信提醒。如果你不需要短信提醒功能,用什么邮箱都可以
另外一个可以运行PHP文件的Web服务器(相当于监控服务器),现在免费的PHP网站空间很多,上网搜搜。如果将PHP监控文件放到你自己的服务
器上,这个监控文件也就等于摆设,服务器挂掉了,它也无法运行了,怎么能起到监控作用呢?
1、创建监控文件
打开你喜欢的文本编辑器,新建一个PHP文件,命名为monitor.php。这部分代码也很简单,就是两个函数,一个用于测试服务器是否可以访
问,另一个用于给你发送邮件通知
复制粘贴以下代码至monitor.php文件:
<?php
function check($host, $find)
{
$fp = fsockopen($host, 80, $errno, $errstr, 10);
if (!$fp)
{
echo "$errstr ($errno)\n";
} else
{
$header = "GET / HTTP/1.1\r\n";
$header .= "Host: $host\r\n";
$header .= "Connection: close\r\n\r\n";
fputs($fp, $header);
while (!feof($fp))
{
$str .= fgets($fp, 1024);
}
fclose($fp ......
前言
PHP是一种被广泛使用的脚本语言,尤其适合于web开发。具有跨平台,容易学习,功能强大等特点,据统计全世界有超过34%的网站有php的应用,包括Yahoo、sina、163、sohu等大型门户网站。而且很多具名的web应用系统(包括 bbs,blog,wiki,cms等等)都是使用php开发的,Discuz、phpwind、phpbb、vbb、wordpress、boblog 等等。随着web安全的热点升级,php应用程序的代码安全问题也逐步兴盛起来,越来越多的安全人员投入到这个领域,越来越多的应用程序代码漏洞被披露。针对这样一个状况,很多应用程序的官方都成立了安全部门,或者雇佣安全人员进行代码审计,因此出现了很多自动化商业化的代码审计工具。也就是这样的形势导致了一个局面:大公司的产品安全系数大大的提高,那些很明显的漏洞基本灭绝了,那些大家都知道的审计技术都无用武之地了。我们面对很多工具以及大牛扫描过 n遍的代码,有很多的安全人员有点悲观,而有的官方安全人员也非常的放心自己的代码,但是不要忘记了“没有绝对的安全”,我们应该去寻找新的途径挖掘新的漏洞。本文就给介绍了一些非传统的技术经验和大家分享。
另外在这里特别说明一下本文里面很多漏洞都是来源于网络上牛人和朋友们的 ......
因为工作需要,数据库使用的MS SQL Server2005,而默认的排序规则是SQL_Latin1_General_CP1_CI_AS。创建了一个表,因为需要存储中文信息,Address字段的类型是nvarchar(255)。
此时使用php来连接sql server,页面的编码和文件的编码都是UTF-8,查询此Address字段,显示在页面上是???之类的。怎么解决?
使用
iconv('iso-8859-1','utf-8',$address);
是没有什么用处的。
此时如果SQL一语句中指定字符排序规则为中文再进行转换输出的才是正常的:
$query = 'select Address collate Chinese_PRC_CI_AS from A';
$rs = mssql_query($query,$conn) or die ('Query failed: '.$query);
if ($row = mssql_fetch_array($rs))
{
$address = $row[0];
$address = iconv('GBK','UTF-8',$address);
echo $address;
}
还有其它方法吗? ......
因为工作需要,数据库使用的MS SQL Server2005,而默认的排序规则是SQL_Latin1_General_CP1_CI_AS。创建了一个表,因为需要存储中文信息,Address字段的类型是nvarchar(255)。
此时使用php来连接sql server,页面的编码和文件的编码都是UTF-8,查询此Address字段,显示在页面上是???之类的。怎么解决?
使用
iconv('iso-8859-1','utf-8',$address);
是没有什么用处的。
此时如果SQL一语句中指定字符排序规则为中文再进行转换输出的才是正常的:
$query = 'select Address collate Chinese_PRC_CI_AS from A';
$rs = mssql_query($query,$conn) or die ('Query failed: '.$query);
if ($row = mssql_fetch_array($rs))
{
$address = $row[0];
$address = iconv('GBK','UTF-8',$address);
echo $address;
}
还有其它方法吗? ......