国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

256 lines
11KB

  1. <?php
  2. /**
  3. * @version $id:config.php 8:38 2010年7月9日 tianya $
  4. * @package DedeBIZ.User
  5. * @copyright Copyright (c) 2022 DedeBIZ.COM
  6. * @license https://www.dedebiz.com/license
  7. * @link https://www.dedebiz.com
  8. */
  9. //针对会员中心操作进行XSS过滤
  10. function XSSClean($val)
  11. {
  12. global $cfg_soft_lang;
  13. if ($cfg_soft_lang == 'gb2312') gb2utf8($val);
  14. if (is_array($val)) {
  15. foreach ($val as $key => $value) {
  16. if (in_array($key, array('tags', 'body', 'dede_fields', 'dede_addonfields', 'dopost', 'introduce'))) continue;
  17. $val[$key] = XSSClean($val[$key]);
  18. }
  19. return $val;
  20. }
  21. $val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/','', $val);
  22. $search = 'abcdefghijklmnopqrstuvwxyz';
  23. $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  24. $search .= '1234567890!@#$%^&*()';
  25. $search .= '~`";:?+/={}[]-_|\'\\';
  26. for ($i = 0; $i < strlen($search); $i++) {
  27. $val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); //with a ;
  28. $val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); //with a ;
  29. }
  30. $val = str_replace("`", "‘", $val);
  31. $val = str_replace("'", "‘", $val);
  32. $val = str_replace("\"", "“", $val);
  33. $val = str_replace(",", ",", $val);
  34. $val = str_replace("(", "(", $val);
  35. $val = str_replace(")", ")", $val);
  36. $ra1 = array('javascript','vbscript','expression','applet','meta','xml','blink','link','style','script','embed','object','iframe','frame','frameset','ilayer','layer','bgsound','title','base');
  37. $ra2 = array('onabort','onactivate','onafterprint','onafterupdate','onbeforeactivate','onbeforecopy','onbeforecut','onbeforedeactivate','onbeforeeditfocus','onbeforepaste','onbeforeprint','onbeforeunload','onbeforeupdate','onblur','onbounce','oncellchange','onchange','onclick','oncontrolselect','oncopy','oncut','ondataavailable','ondatasetchanged','ondatasetcomplete','ondblclick','ondeactivate','ondrag','ondragend','ondragenter','ondragleave','ondragover','ondragstart','ondrop','onerror','onerrorupdate','onfilterchange','onfinish','onfocus','onfocusin','onfocusout','onhelp','onkeydown','onkeypress','onkeyup','onlayoutcomplete','onload','onlosecapture','onmousedown','onmouseenter','onmouseleave','onmousemove','onmouseout','onmouseover','onmouseup','onmousewheel','onmove','onmoveend','onmovestart','onpaste','onpropertychange','onreadystatechange','onreset','onresize','onresizeend','onresizestart','onrowenter','onrowexit','onrowsdelete','onrowsinserted','onscroll','onselect','onselectionchange','onselectstart','onstart','onstop','onsubmit','onunload');
  38. $ra = array_merge($ra1, $ra2);
  39. $found = true;
  40. while ($found == true) {
  41. $val_before = $val;
  42. for ($i = 0; $i < sizeof($ra); $i++) {
  43. $pattern = '/';
  44. for ($j = 0; $j < strlen($ra[$i]); $j++) {
  45. if ($j > 0) {
  46. $pattern .= '(';
  47. $pattern .= '(&#[xX]0{0,8}([9ab]);)';
  48. $pattern .= '|';
  49. $pattern .= '|(&#0{0,8}([9|10|13]);)';
  50. $pattern .= ')*';
  51. }
  52. $pattern .= $ra[$i][$j];
  53. }
  54. $pattern .= '/i';
  55. $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2);
  56. $val = preg_replace($pattern, $replacement, $val);
  57. if ($val_before == $val) {
  58. $found = false;
  59. }
  60. }
  61. }
  62. if ($cfg_soft_lang == 'gb2312') utf82gb($val);
  63. return $val;
  64. }
  65. $_GET = XSSClean($_GET);
  66. $_POST = XSSClean($_POST);
  67. $_REQUEST = XSSClean($_REQUEST);
  68. $_COOKIE = XSSClean($_COOKIE);
  69. require_once(dirname(__FILE__).'/../system/common.inc.php');
  70. require_once(DEDEINC.'/filter.inc.php');
  71. require_once(DEDEINC.'/memberlogin.class.php');
  72. require_once(DEDEINC.'/dedetemplate.class.php');
  73. //检查CSRF
  74. function CheckCSRF()
  75. {
  76. $cc_csrf_token_check = GetCookie("dede_csrf_token");
  77. if (
  78. !(isset($_POST['_csrf_token'], $cc_csrf_token_check) && is_string($_POST['_csrf_token']) && is_string($cc_csrf_token_check) && hash_equals($_POST['_csrf_token'], $cc_csrf_token_check))
  79. ) {
  80. ShowMsg('刷新页面重新提交,请不要发布重复文档', '-1');
  81. exit();
  82. }
  83. DropCookie("dede_csrf_token");
  84. }
  85. //生成CSRF校验token,在比较重要的表单中应该要加上这个token校验
  86. $cc_csrf_token = GetCookie("dede_csrf_token");
  87. if (!isset($GLOBALS['csrf_token']) || $GLOBALS['csrf_token'] === null) {
  88. if (
  89. isset($cc_csrf_token) && is_string($cc_csrf_token)
  90. && preg_match('#^[0-9a-f]{32}$#iS', $cc_csrf_token) === 1
  91. ) {
  92. $GLOBALS['csrf_token'] = $cc_csrf_token;
  93. } else {
  94. $GLOBALS['csrf_token'] = md5(uniqid(mt_rand(), TRUE));
  95. }
  96. }
  97. if (strtoupper($_SERVER['REQUEST_METHOD']) !== 'POST') {
  98. PutCookie('dede_csrf_token', $GLOBALS['csrf_token'], 7200, '/');
  99. }
  100. //获得当前脚本名称,如果您的系统被禁用了$_SERVER变量,请自行修改这个选项
  101. $dedeNowurl = $s_scriptName = '';
  102. $dedeNowurl = GetCurUrl();
  103. $dedeNowurls = explode('?', $dedeNowurl);
  104. $s_scriptName = $dedeNowurls[0];
  105. $menutype = '';
  106. $menutype_son = '';
  107. $gourl = empty($gourl) ? "" : RemoveXSS($gourl);
  108. //检查是否开放用户功能
  109. if ($cfg_mb_open == 'N') {
  110. if (defined('AJAXLOGIN')) {
  111. if ($format === 'json') {
  112. echo json_encode(array(
  113. "code" => -1,
  114. "msg" => "网站关闭了会员功能,您无法浏览此页面",
  115. "data" => null,
  116. ));
  117. exit;
  118. } else {
  119. die('');
  120. }
  121. } else {
  122. ShowMsg("网站关闭了会员功能,您无法浏览此页面", "javascript:;");
  123. exit();
  124. }
  125. }
  126. $keeptime = isset($keeptime) && is_numeric($keeptime) ? $keeptime : -1;
  127. $cfg_ml = new MemberLogin($keeptime);
  128. //检查收件箱
  129. function PmRead(){
  130. global $dsql, $cfg_ml;
  131. $query = "SELECT * FROM `#@__member_pms` WHERE folder LIKE 'outbox' AND isadmin='1'";
  132. $dsql->SetQuery($query);
  133. $dsql->Execute();
  134. while ($row = $dsql->GetArray()) {
  135. $row2 = $dsql->GetOne("SELECT * FROM `#@__member_pms` WHERE fromid = '$row[id]' AND toid='{$cfg_ml->M_ID}'");
  136. if (!is_array($row2)) {
  137. $row3 = "INSERT INTO `#@__member_pms` (`floginid`,`fromid`,`toid`,`tologinid`,`folder`,`subject`,`sendtime`,`writetime`,`hasview`,`isadmin`,`message`) VALUES ('admin','{$row['id']}','{$cfg_ml->M_ID}','{$cfg_ml->M_LoginID}','inbox','{$row['subject']}','{$row['sendtime']}','{$row['writetime']}','{$row['hasview']}','{$row['isadmin']}','{$row['message']}')";
  138. $dsql->ExecuteNoneQuery($row3);
  139. }
  140. }
  141. }
  142. //判断用户是否登录
  143. $myurl = '';
  144. if ($cfg_ml->IsLogin()) {
  145. $myurl = $cfg_memberurl."/index.php?uid=".urlencode($cfg_ml->M_LoginID);
  146. if (!preg_match("#^http[s]?:#i", $myurl)) $myurl = $cfg_basehost.$myurl;
  147. if ($cfg_ml->fields['face'] == "") {
  148. $cfg_ml->fields['face'] = $cfg_cmsurl."../static/web/img/admin.png";
  149. }
  150. PmRead();
  151. }
  152. //有没新短信
  153. $pms = $dsql->GetOne("SELECT COUNT(*) AS nums FROM `#@__member_pms` WHERE toid='{$cfg_ml->M_ID}' AND `hasview`=0 AND folder = 'inbox'");
  154. /**
  155. * 检查用户是否有权限进行某个操作
  156. *
  157. * @param int $rank 权限值
  158. * @param int $money 金币
  159. * @return void
  160. */
  161. function CheckRank($rank = 0, $money = 0)
  162. {
  163. global $cfg_ml, $cfg_memberurl, $cfg_mb_spacesta,$dsql;
  164. if (!$cfg_ml->IsLogin()) {
  165. header("Location:{$cfg_memberurl}/login.php?gourl=".urlencode(GetCurUrl()));
  166. exit();
  167. } else {
  168. if ($cfg_mb_spacesta == '-10') {
  169. //var_dump($cfg_ml->fields);
  170. //如果启用注册邮件验证
  171. if ($cfg_ml->fields['spacesta'] == '-10') {
  172. if (empty($cfg_ml->fields['email'])) {
  173. ShowMsg("邮箱地址为空,请设置一个邮箱地址", "edit_email.php", 0, 5000);
  174. exit;
  175. }
  176. $msg = "您未进行邮件验证,请到验证邮箱</br>重新发送邮件验证<a href='{$cfg_memberurl}/index_do.php?fmdo=sendMail' class='text-primary'>点击此处</a>";
  177. ShowMsg($msg, "-1", 0, 5000);
  178. exit;
  179. }
  180. }
  181. if ($cfg_ml->M_Rank < $rank) {
  182. $needname = "";
  183. if ($cfg_ml->M_Rank == 0) {
  184. $row = $dsql->GetOne("SELECT membername FROM `#@__arcrank` WHERE `rank`='$rank'");
  185. $myname = "普通会员";
  186. $needname = $row['membername'];
  187. } else {
  188. $dsql->SetQuery("SELECT membername From `#@__arcrank` WHERE `rank`='$rank' OR `rank`='".$cfg_ml->M_Rank."' ORDER BY `rank` DESC");
  189. $dsql->Execute();
  190. $row = $dsql->GetObject();
  191. $needname = $row->membername;
  192. if ($row = $dsql->GetObject()) {
  193. $myname = $row->membername;
  194. } else {
  195. $myname = "普通会员";
  196. }
  197. }
  198. ShowMsg("需要<span class='text-primary'>$needname</span>才能浏览本页面<br>您目前等级是<span class='text-primary'>$myname</span>", "-1", 0, 5000);
  199. exit();
  200. } else if ($cfg_ml->M_Money < $money) {
  201. ShowMsg("需要<span class='text-primary'>$money</span>金币才能浏览本页面<br>您目前金币<span class='text-primary'>".$cfg_ml->M_Money."</span>个", "-1", 0, 5000);
  202. exit();
  203. }
  204. }
  205. }
  206. /**
  207. * 更新文档统计
  208. *
  209. * @access public
  210. * @param int $channelid 栏目模型id
  211. * @return string
  212. */
  213. function countArchives($channelid)
  214. {
  215. global $cfg_ml, $dsql;
  216. $id = (int)$channelid;
  217. if ($cfg_ml->IsLogin()) {
  218. $channeltype = array(1 => 'article', 2 => 'album', 3 => 'soft', -8 => 'infos');
  219. if (isset($channeltype[$id])) {
  220. $_field = $channeltype[$id];
  221. } else {
  222. $_field = 'articles';
  223. }
  224. $row = $dsql->GetOne("SELECT COUNT(*) AS nums FROM `#@__archives` WHERE channel='$id' AND mid='".$cfg_ml->M_ID."'");
  225. $dsql->ExecuteNoneQuery("UPDATE `#@__member_tj` SET ".$_field."='".$row['nums']."' WHERE mid='".$cfg_ml->M_ID."'");
  226. } else {
  227. return FALSE;
  228. }
  229. }
  230. //安全提示问题,这两句不要修改
  231. $safequestions = array();
  232. $safequestions[0] = '没安全提示问题';
  233. //下面的设置可以手工修改
  234. $safequestions[1] = '您最喜欢的格言什么';
  235. $safequestions[2] = '您家乡的名称是什么';
  236. $safequestions[3] = '您读的小学叫什么';
  237. $safequestions[4] = '您的父亲叫什么名字';
  238. $safequestions[5] = '您的母亲叫什么名字';
  239. $safequestions[6] = '您最喜欢的偶像是谁';
  240. $safequestions[7] = '您最喜欢的歌曲是什么';
  241. //以下不要修改
  242. function GetSafequestion($selid=0,$formname='safequestion')
  243. {
  244. global $safequestions;
  245. $safequestions_form = "<select name='$formname' id='$formname' class='form-control'>";
  246. foreach($safequestions as $k=>$v)
  247. {
  248. if ($k==$selid) $safequestions_form .= "<option value='$k' selected>$v</option>\r\n";
  249. else $safequestions_form .= "<option value='$k'>$v</option>\r\n";
  250. }
  251. $safequestions_form .= "</select>\r\n";
  252. return $safequestions_form;
  253. }
  254. $enabledChannels = MemberLogin::GetEnabledChannels();
  255. ?>