sys_sec_info.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?php
  2. /**
  3. * 系统安全信息
  4. *
  5. * @createtime 2018/4/14
  6. * @author 空竹
  7. * @copyright 芝麻开发(http://www.zhimawork.com)
  8. */
  9. require_once('admin_init.php');
  10. require_once('admincheck.php');
  11. $POWERID = '9002';//权限
  12. Admin::checkAuth($POWERID, $ADMINAUTH);
  13. $ZHIMA_SEC_STATUS = array(
  14. 'ok' => '<span class="status green">OK</span>',
  15. 'bad' => '<span class="status red">BAD</span>',
  16. 'unknown' => '<span class="status orange">CHECK</span>'
  17. );
  18. $ZHIMA_SEC_INFO = array();
  19. //
  20. //$ZHIMA_SEC_INFO['100']['req'] = '';
  21. //$ZHIMA_SEC_INFO['100']['status'] = $status100;
  22. //$ZHIMA_SEC_INFO['100']['desc'] = '';
  23. //201
  24. //读取上次备份日期
  25. try{
  26. $r = $mylog->read($LOG_PATH.'backupdb.log');
  27. $r_msg = json_decode($r)->msg;
  28. $backuptime = substr($r_msg, 0, 19);
  29. if(time() - strtotime($backuptime) > 3600 * 24 * 30){
  30. $status201 = 'bad';
  31. }else{
  32. $status201 = 'ok';
  33. }
  34. }catch( MyException $e ){
  35. $backuptime = '未知';
  36. $status201 = 'unknown';
  37. }
  38. $ZHIMA_SEC_INFO['201']['req'] = '数据库备份';
  39. $ZHIMA_SEC_INFO['201']['status'] = $status201;
  40. $ZHIMA_SEC_INFO['201']['desc'] = '有服务器操作权限的应设置数据库自动备份,否则应定期进行手动备份。上次备份时间:<strong>'.$backuptime.'</strong>。<a href="sys_backup_db.php" target="_blank">【立即备份】</a>';
  41. //101
  42. $ini_er = ini_get('error_reporting');
  43. if($ini_er == 0){
  44. $status101 = 'ok';
  45. }else{
  46. $status101 = 'bad';
  47. }
  48. $ZHIMA_SEC_INFO['101']['req'] = '系统上线须关闭PHP报错';
  49. $ZHIMA_SEC_INFO['101']['status'] = $status101;
  50. $ZHIMA_SEC_INFO['101']['desc'] = '如果有服务器权限,请设置php.ini中的display_errors=off。在根目录下config.inc.php中打开error_reporting(0)。';
  51. //102
  52. $debug = $DB_DEBUG_LEVEL;
  53. if($debug === 0){
  54. $status102 = 'ok';
  55. }else{
  56. $status102 = 'bad';
  57. }
  58. $ZHIMA_SEC_INFO['102']['req'] = '系统上线须关闭数据库调试';
  59. $ZHIMA_SEC_INFO['102']['status'] = $status102;
  60. $ZHIMA_SEC_INFO['102']['desc'] = '在根目录下config.inc.php中设置$DB_DEBUG_LEVEL为0';
  61. //103
  62. if(PROJECTCODE == 'ZhimaPHP'){
  63. $status103 = 'bad';
  64. }else{
  65. $status103 = 'ok';
  66. }
  67. $ZHIMA_SEC_INFO['103']['req'] = '修改项目编号';
  68. $ZHIMA_SEC_INFO['103']['status'] = $status103;
  69. $ZHIMA_SEC_INFO['103']['desc'] = '在根目录下config.inc.php中修改常量PROJECTCODE的值。';
  70. //104
  71. if(empty($HTTP_PATH) || (substr($HTTP_PATH, 0, 7) != 'http://' && substr($HTTP_PATH, 0, 8) != 'https://') || substr($HTTP_PATH, -1, 1) != '/' || substr($HTTP_PATH, -2, 1) == '/'){
  72. $status104 = 'bad';
  73. }else{
  74. $status104 = 'ok';
  75. }
  76. $ZHIMA_SEC_INFO['104']['req'] = '正确设置访问路径';
  77. $ZHIMA_SEC_INFO['104']['status'] = $status104;
  78. $ZHIMA_SEC_INFO['104']['desc'] = '在根目录下的config.inc.php中设置$HTTP_PATH的值。访问路径应该以http://或https://开头,并以“/”结束。';
  79. //105 //TODO 改进判断子目录
  80. if(is_writable($FILE_PATH.'userfiles')){
  81. $status105 = 'unknown';
  82. }else{
  83. $status105 = 'bad';
  84. }
  85. $ZHIMA_SEC_INFO['105']['req'] = '设置根目录下userfiles及其子目录的写权限为777';
  86. $ZHIMA_SEC_INFO['105']['status'] = $status105;
  87. $ZHIMA_SEC_INFO['105']['desc'] = '';
  88. //106
  89. if(is_writable($LOG_PATH.'common.log') && is_writable($LOG_PATH.'debug.log') && is_writable($LOG_PATH.'backupdb.log')){
  90. $status106 = 'ok';
  91. }else{
  92. $status106 = 'bad';
  93. }
  94. $ZHIMA_SEC_INFO['106']['req'] = '设置日志文件的写权限';
  95. $ZHIMA_SEC_INFO['106']['status'] = $status106;
  96. $ZHIMA_SEC_INFO['106']['desc'] = '设置根目录下logs中日志文件的写权限';
  97. //107 //TODO 改进判断更多临时文件夹
  98. if(file_exists($FILE_PATH.'_sql') || file_exists($FILE_PATH.'_doc')){
  99. $status107 = 'bad';
  100. }else{
  101. $status107 = 'unknown';
  102. }
  103. $ZHIMA_SEC_INFO['107']['req'] = '系统上线删除开发文档和临时文件';
  104. $ZHIMA_SEC_INFO['107']['status'] = $status107;
  105. $ZHIMA_SEC_INFO['107']['desc'] = '删除各个目录中下划线开头的文件和文件夹,特别是根目录下的_sql和_doc等。';
  106. //108 //TODO 改进判断放在其他位置而未重命名的
  107. if(file_exists($FILE_PATH.'phpMyAdmin') || file_exists($FILE_PATH.'web/phpMyAdmin')){
  108. $status108 = 'bad';
  109. }else{
  110. $status108 = 'unknown';
  111. }
  112. $ZHIMA_SEC_INFO['108']['req'] = '系统根目录下不得存在phpMyAdmin文件夹';
  113. $ZHIMA_SEC_INFO['108']['status'] = $status108;
  114. $ZHIMA_SEC_INFO['108']['desc'] = '放在系统中的phpMyAdmin必须重命名';
  115. //109 //TODO 改进判断代码里面
  116. if(file_exists($FILE_PATH.'phpinfo.php') || file_exists($FILE_PATH.'web/phpinfo.php') || file_exists($FILE_PATH.'web/info.php')){
  117. $status109 = 'bad';
  118. }else{
  119. $status109 = 'unknown';
  120. }
  121. $ZHIMA_SEC_INFO['109']['req'] = '系统上线后不得存在输出phpinfo的页面';
  122. $ZHIMA_SEC_INFO['109']['status'] = $status109;
  123. $ZHIMA_SEC_INFO['109']['desc'] = '删除系统中输出phpinfo的页面或代码';
  124. //110
  125. if(file_exists($FILE_PATH.'admin')){
  126. $status110 = 'bad';
  127. }else{
  128. $status110 = 'ok';
  129. }
  130. $ZHIMA_SEC_INFO['110']['req'] = '系统上线须对管理后台admin重命名';
  131. $ZHIMA_SEC_INFO['110']['status'] = $status110;
  132. $ZHIMA_SEC_INFO['110']['desc'] = '';
  133. //202
  134. /** 2018/10/17放弃
  135. if(file_exists($FILE_PATH.'logs')){
  136. $status202 = 'bad';
  137. }else{
  138. $status202 = 'ok';
  139. }
  140. $ZHIMA_SEC_INFO['202']['req'] = '系统上线须对根目录下logs进行重命名';
  141. $ZHIMA_SEC_INFO['202']['status'] = $status202;
  142. $ZHIMA_SEC_INFO['202']['desc'] = 'logs重命名后,须对应修改根目录下config.inc.php中的定义。';
  143. **/
  144. //TODO 检查所有程序的变量是否过滤
  145. //TODO 检查是否有没写在Table层的SQL语句
  146. //TODO 单个文件过大
  147. //TODO userfiles目录下是否存在可执行文件
  148. ?>
  149. <!DOCTYPE html>
  150. <html>
  151. <head>
  152. <?php include('htmlhead.inc.php');?>
  153. <title>安全信息 - 系统信息 - 管理系统 </title>
  154. </head>
  155. <body>
  156. <div id="header">
  157. <?php include('top.inc.php');?>
  158. <?php
  159. $FLAG_TOPNAV = "system";
  160. include('nav.inc.php');
  161. ?>
  162. </div>
  163. <div id="container">
  164. <?php
  165. $FLAG_LEFTMENU = 'sys_sec_info';
  166. include('admin_menu.inc.php');
  167. ?>
  168. <div id="maincontent">
  169. <div class="tips">
  170. 提示:<span class="status green">OK</span>表示正常状态。<span class="status red">BAD</span>表示不正常状态。<span class="status orange">CHECK</span>表示需要技术人员检查确认。
  171. </div>
  172. <div class="tablelist">
  173. <table>
  174. <tr>
  175. <th width="10%">编号</th>
  176. <th width="30%">安全项</th>
  177. <th width="15%">状态</th>
  178. <th width="45%">操作说明</th>
  179. </tr>
  180. <?php
  181. foreach($ZHIMA_SEC_INFO as $k => $v){
  182. echo '<tr>';
  183. echo '<td class="center">'.$k.'</td>';
  184. echo '<td>'.$ZHIMA_SEC_INFO[$k]['req'].'</td>';
  185. echo '<td class="center">'.$ZHIMA_SEC_STATUS[$ZHIMA_SEC_INFO[$k]['status']].'</td>';
  186. echo '<td>'.$ZHIMA_SEC_INFO[$k]['desc'].'</td>';
  187. echo '</tr>';
  188. }
  189. ?>
  190. </table>
  191. </div>
  192. </div>
  193. <div class="clear"></div>
  194. </div>
  195. <?php include('footer.inc.php');?>
  196. </body>
  197. </html>