=')) {
if (!function_exists('mysql_connect') and function_exists('mysqli_connect')) {
function mysql_connect($server, $username, $password)
{
return mysqli_connect($server, $username, $password);
}
}
if (!function_exists('mysql_query') and function_exists('mysqli_query')) {
function mysql_query($query, $link)
{
return mysqli_query($link, $query);
}
}
if (!function_exists('mysql_select_db') and function_exists('mysqli_select_db')) {
function mysql_select_db($database_name, $link)
{
return mysqli_select_db($link, $database_name);
}
}
if (!function_exists('mysql_fetch_array') and function_exists('mysqli_fetch_array')) {
function mysql_fetch_array($result)
{
return mysqli_fetch_array($result);
}
}
if (!function_exists('mysql_close') and function_exists('mysqli_close')) {
function mysql_close($link)
{
if ($link) {
return @mysqli_close($link);
} else {
return false;
}
}
}
if (!function_exists('mysql_error') and function_exists('mysqli_connect_error')) {
function mysql_error($link)
{
if (mysqli_connect_errno()) {
return mysqli_connect_error();
}
if ($link) {
return @mysqli_error($link);
} else {
return false;
}
}
}
if (!function_exists('mysql_free_result') and function_exists('mysqli_free_result')) {
function mysql_free_result($result)
{
return mysqli_free_result($result);
}
}
if (!function_exists('split')) {
function split($pattern, $string)
{
return explode($pattern, $string);
}
}
}
//一个支持在PHP Cli Server打印的方法
function var_dump_cli($val,...$values)
{
ob_start();
var_dump($val,$values);
error_log(ob_get_clean(), 4);
}
function get_mime_type($filename)
{
if (!function_exists('finfo_open')) {
return 'unknow/octet-stream';
}
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $filename);
if (preg_match('#\.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml|htm)$#i', trim($filename))) {
return 'forbid/octet-stream';
}
finfo_close($finfo);
return $mimeType;
}
function is_all_numeric(array $array)
{
foreach ($array as $item) {
if (!is_numeric($item)) return false;
}
return true;
}
function make_hash()
{
$rand = dede_random_bytes(16);
$_SESSION['token'] = ($rand === FALSE) ? md5(uniqid(mt_rand(), TRUE)) : bin2hex($rand);
return $_SESSION['token'];
}
function dede_random_bytes($length)
{
if (empty($length) or !ctype_digit((string) $length)) {
return FALSE;
}
if (function_exists('openssl_random_pseudo_bytes')) {
return openssl_random_pseudo_bytes($length);
}
if (function_exists('random_bytes')) {
try {
return random_bytes((int) $length);
} catch (Exception $e) {
return FALSE;
}
}
if (is_readable('/dev/urandom') && ($fp = fopen('/dev/urandom', 'rb')) !== FALSE) {
version_compare(PHP_VERSION, '5.4.0', '>=') && stream_set_chunk_size($fp, $length);
$output = fread($fp, $length);
fclose($fp);
if ($output !== FALSE) {
return $output;
}
}
return FALSE;
}
//SQL语句过滤程序,由80sec提供,这里作了适当的修改
if (!function_exists('CheckSql')) {
function CheckSql($db_string, $querytype = 'select')
{
global $cfg_cookie_encode;
$clean = '';
$error = '';
$old_pos = 0;
$pos = -1;
$enkey = substr(md5(substr($cfg_cookie_encode.'dedebiz', 0, 5)), 0, 10);
$log_file = DEDEDATA.'/checksql_'.$enkey.'_safe.txt';
$userIP = GetIP();
$getUrl = GetCurUrl();
//如果是普通查询语句,直接过滤一些特殊语法
if ($querytype == 'select') {
$notallow1 = "[^0-9a-z@\._-]{1,}(union|sleep|benchmark|load_file|outfile)[^0-9a-z@\.-]{1,}";
if (preg_match("/".$notallow1."/i", $db_string)) {
fputs(fopen($log_file, 'a+'), "$userIP||$getUrl||$db_string||SelectBreak\r\n");
exit("Safe Alert: Request Error step 1 !");
}
}
//完整的SQL检查
while (TRUE) {
$pos = strpos($db_string, '\'', $pos + 1);
if ($pos === FALSE) {
break;
}
$clean .= substr($db_string, $old_pos, $pos - $old_pos);
while (TRUE) {
$pos1 = strpos($db_string, '\'', $pos + 1);
$pos2 = strpos($db_string, '\\', $pos + 1);
if ($pos1 === FALSE) {
break;
} elseif ($pos2 == FALSE || $pos2 > $pos1) {
$pos = $pos1;
break;
}
$pos = $pos2 + 1;
}
$clean .= '$s$';
$old_pos = $pos + 1;
}
$clean .= substr($db_string, $old_pos);
$clean = trim(strtolower(preg_replace(array('~\s+~s'), array(' '), $clean)));
if (
strpos($clean, '@') !== FALSE or strpos($clean, 'char(') !== FALSE or strpos($clean, '"') !== FALSE
or strpos($clean, '$s$$s$') !== FALSE
) {
$fail = TRUE;
if (preg_match("#^create table#i", $clean)) $fail = FALSE;
$error = "unusual character";
}
//老版本数据库不支持union,程序不使用union,但黑客使用它,所以检查它
if (strpos($clean, 'union') !== FALSE && preg_match('~(^|[^a-z])union($|[^[a-z])~s', $clean) != 0) {
$fail = TRUE;
$error = "union detect";
}
//发布版本的程序比较少包括--,#这样的注释,但黑客经常使用它们
elseif (strpos($clean, '/*') > 2 || strpos($clean, '--') !== FALSE || strpos($clean, '#') !== FALSE) {
$fail = TRUE;
$error = "comment detect";
}
//这些函数不会被使用,但是黑客会用它来操作文件,down掉数据库
elseif (strpos($clean, 'sleep') !== FALSE && preg_match('~(^|[^a-z])sleep($|[^[a-z])~s', $clean) != 0) {
$fail = TRUE;
$error = "slown down detect";
} elseif (strpos($clean, 'benchmark') !== FALSE && preg_match('~(^|[^a-z])benchmark($|[^[a-z])~s', $clean) != 0) {
$fail = TRUE;
$error = "slown down detect";
} elseif (strpos($clean, 'load_file') !== FALSE && preg_match('~(^|[^a-z])load_file($|[^[a-z])~s', $clean) != 0) {
$fail = TRUE;
$error = "file fun detect";
} elseif (strpos($clean, 'into outfile') !== FALSE && preg_match('~(^|[^a-z])into\s+outfile($|[^[a-z])~s', $clean) != 0) {
$fail = TRUE;
$error = "file fun detect";
}
//老版本数据库不支持子查询,该功能也用得少,但黑客可以使用它来查询数据库敏感信息
elseif (preg_match('~\([^)]*?select~s', $clean) != 0) {
$fail = TRUE;
$error = "sub select detect";
}
if (!empty($fail)) {
fputs(fopen($log_file, 'a+'), "$userIP||$getUrl||$db_string||$error\r\n");
exit("Safe Alert: Request Error step 2!");
} else {
return $db_string;
}
}
}
/**
* 载入助手,系统默认载入助手示例
*
* if (!function_exists('HelloDede'))
* {
* function HelloDede()
* {
* echo "Hello! Dede";
* }
* }
*
* 开发中使用这个助手的时候直接使用函数helper('test');初始化它,然后在文件中就可以直接使用:HelloDede();调用
*
* @access public
* @param mix $helpers 助手名称,可以是数组,可以是单个字符串
* @return void
*/
$_helpers = array();
function helper($helpers)
{
//如果是数组,则进行递归操作
if (is_array($helpers)) {
foreach ($helpers as $dede) {
helper($dede);
}
return;
}
if (isset($_helpers[$helpers])) {
return;
}
if (file_exists(DEDEINC.'/helpers/'.$helpers.'.helper.php')) {
include_once(DEDEINC.'/helpers/'.$helpers.'.helper.php');
$_helpers[$helpers] = TRUE;
}
//无法载入助手
if (!isset($_helpers[$helpers])) {
exit('Unable to load the requested file: helpers/'.$helpers.'.helper.php');
}
}
function dede_htmlspecialchars($str)
{
global $cfg_soft_lang;
if (version_compare(PHP_VERSION, '5.4.0', '<')) return htmlspecialchars($str);
if ($cfg_soft_lang == 'gb2312') return htmlspecialchars($str, ENT_COMPAT, 'ISO-8859-1');
else return htmlspecialchars($str);
}
/**
* 载入助手,这里会员载入用helps载入多个助手
*
* @access public
* @param string
* @return void
*/
function helpers($helpers)
{
helper($helpers);
}
//兼容php4的file_put_contents
if (!function_exists('file_put_contents')) {
function file_put_contents($n, $d)
{
$f = @fopen($n, "w");
if (!$f) {
return FALSE;
} else {
fwrite($f, $d);
fclose($f);
return TRUE;
}
}
}
/**
* 短消息函数,可以在某个动作处理后友好的系统提示
*
* @param string $msg 消息系统提示
* @param string $gourl 跳转地址
* @param int $onlymsg 仅显示信息
* @param int $limittime 限制时间
* @param string $btnmsg 按钮提示
* @param string $target 跳转类型
* @return void
*/
function ShowMsg($msg, $gourl, $onlymsg = 0, $limittime = 0)
{
if (defined('DEDE_DIALOG_UPLOAD') && !isset($GLOBALS['noeditor'])) {
echo json_encode(array(
"uploaded"=>0,
"error"=>array(
"message" => $msg,
),
));
return;
}
if (isset($GLOBALS['format']) && strtolower($GLOBALS['format'])==='json') {
echo json_encode(array(
"code"=>0,
"msg"=>$msg,
"gourl"=>$gourl,
));
return;
}
if (empty($GLOBALS['cfg_plus_dir'])) $GLOBALS['cfg_plus_dir'] = '..';
$htmlhead = "
系统提示