googlecode同步虚拟主机级敏感信息处理
2012-06-19 23:33
656 查看
<?php /** * Google SVN 钩子同步文件 * * * 加密字串格式 {\_Replace:xxxxxxx} */ if(empty($_SERVER['HTTP_GOOGLE_CODE_PROJECT_HOSTING_HOOK_HMAC']) || strlen($_SERVER['HTTP_GOOGLE_CODE_PROJECT_HOSTING_HOOK_HMAC']) != 32) { die; } //引入Key include 'Goole_hooks_key.php'; include '../Source/include/BinCryptClass.inc.php'; $json_data = file_get_contents('php://input'); $data = json_decode($json_data, true); if(hash_hmac('md5', $json_data, $authentication_key) != $_SERVER['HTTP_GOOGLE_CODE_PROJECT_HOSTING_HOOK_HMAC'] || empty($data)) { die; } $start_time = float_time(); list($project_name, $added, $removed, $modified, $revision, $url, $timestamp, $message) = array($data['project_name'], $data['revisions'][0]['added'], $data['revisions'][0]['removed'], $data['revisions'][0]['modified'], $data['revisions'][0]['revision'], trim($data['revisions'][0]['url'], '/ '), $data['revisions'][0]['timestamp'], $data['revisions'][0]['message']); //连接数据库 if(!mysql_connect($dbHost, $dbUser, $dbPassWord)) { header('HTTP/1.0 403'); die; } mysql_query('SET NAMES "GBK"'); date_default_timezone_set('PRC'); //版本过滤 $sql = "SELECT MAX(revision) AS max_revision FROM a2417006_usv01.Bin_Sync_code_log"; $rs = mysql_fetch_assoc(mysql_query('SELECT MAX(revision) AS max_revision FROM a2417006_usv01.Bin_Sync_code_log')); if($revision <= $rs['max_revision']) { die; } $server_base_path = realpath(dirname(__FILE__).'/../../'); $output_str = ''; //文件添加处理 foreach($added as $val) { create_dir_or_file($val, 'add'); } //文件修改处理 foreach($modified as $val) { create_dir_or_file($val, 'modified'); } //文件删除 foreach($removed as $val) { if(!is_string($val) || strlen(rtrim($val, "/\\ \n\r\n")) < 2) { continue; } $tmp = $server_base_path.$val; delete($tmp); $output_str .= "删除'{$tmp}'. "; } $date = date('Y-m-d H:i:s', $timestamp); $running_time = float_time() - $start_time; $json_data = addslashes($json_data); $sql = "INSERT INTO a2417006_usv01.Bin_Sync_code_log (running_time, revision, added, modified, removed, msg, original_data, up_time)VALUES('{$running_time}', {$revision}, '".implode(', ', $added)."', '".implode(',', $modified)."', '".implode(',', $removed)."', \"{$output_str}\", '{$json_data}', '{$date}')"; mysql_query($sql); function delete($file, $not_ignore_error = true) { if(!file_exists($file)) { return true; } if(is_dir($file)) { $dir = opendir($file); while($tmp = readdir($dir)) { if($tmp == '.' || $tmp == '..') { continue; } $tmp = $file.'/'.$tmp; if(is_dir($tmp)) { if(delete($tmp) == false && $not_ignore_error) { return false; } } else { if(unlink($tmp) == false && $not_ignore_error) { return false; } } } closedir($dir); return rmdir($file); } else { return unlink($file); } } function create_dir_or_file($file, $type) { global $server_base_path, $output_str, $project_name, $url; $file_name = $server_base_path.$file; for($i = 1; $i <= 3; $i ++) { $link = $url.$file; $tmp_data = file_get_contents($link); $output_str .= "正在获取远程数据'{$link}'. "; if($tmp_data !== false) { break; } $output_str .= "获取文件失败, 正在重试({$i}). "; } if($tmp_data === false) { $output_str .= "获取文件失败. "; return false; } $output_str .= "获取文件成功. "; if($type == 'add' && strpos($tmp_data, $project_name.'.googlecode.com') !== false) { $output_str .= !file_exists($file_name) && mkdir($file_name) && chmod($dir_name, 0777) ? "创建文件夹'{$file_name}'成功. " : "创建文件夹'{$file_name}'失败."; } else { //对有加密的字串解密 $tmp_data = preg_replace_callback('/{'.'_Replace:(.+)}/U', create_function('$string', 'return BinCryptClass::decrypt($string[1], PRIVATE_KEY);'), $tmp_data); $output_str .= file_put_contents($file_name, $tmp_data) === false ? "创建文件'{$file_name}'失败." : "创建文件'{$file_name}'成功."; } } function float_time($len = 6) { return number_format(microtime(true), $len, '.', ''); } ?>
相关文章推荐
- 请注意PHP程序里的敏感信息处理
- Java 敏感信息加密处理
- websphere7.0异常:SRVE0255E: 尚未定义要处理 /wcm 的 Web 组/虚拟主机
- Nginx学习日记第二篇 -- 虚拟主机,状态信息,访问认证
- Apache的虚拟主机配置及其信号处理方法
- Python中敏感信息(用户名、密码等)处理方法――添加到环境变量
- 站长必须了解及学习的虚拟主机常见故障处理
- 敏感信息采集-前后端处理
- Wampserver2.5配置虚拟主机出现403 Forbidden的处理方案
- 配置nginx状态信息虚拟主机
- 记一次从库主机断电重启后同步故障处理
- Day06 4000 Ajax中跨域请求,域名处理,forward与redirect区别,tomcat中配置虚拟主机
- 层显示用户的基本信息,ajax异步与同步,一般处理程序
- Nginx配置信息及虚拟主机的创建
- WAS部署 -- SRVE0255E: 尚未定义要处理 /snoop 的 Web 组/虚拟主机
- 在虚拟主机中用ASP.NET1.1服务器端TIMER定时读取RSS信息到数据库
- 虚拟主机无法使用fsockopen操作处理方法
- 看好你的门-确保验证机制的安全(2)-安全处理敏感信息
- 阿里云虚拟主机执行curl_exec()报500错误,且没有详细信息
- Wampserver2.5配置虚拟主机出现403 Forbidden的处理方案