Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

用户管理建议 #24

Open
prajna0 opened this issue Sep 2, 2015 · 105 comments
Open

用户管理建议 #24

prajna0 opened this issue Sep 2, 2015 · 105 comments

Comments

@prajna0
Copy link

prajna0 commented Sep 2, 2015

建议加上筛选功能或者有一个条件自动处理用户 比如从注册日期算起 15天(这个时间由站长自由设定)没有签到或其它操作,自动将用户改为停用状态,希望采纳~

@prajna0
Copy link
Author

prajna0 commented Sep 2, 2015

另外,Pro节点那个完全跟普通节点没什么意义,其实完全可以和"套餐"这个功能一起使用,比如当用户为A套餐时不可见Pro节点信息,从注册日期算起,满7天(由站长自由设定)自动更改为B套餐,则可见Pro节点, 目前我已经实现A套餐/B套餐后台切换和不可见的功能,没法实现自动满足条件切换。。我觉得这样用户质量能更高,也保护了站长的节点信息隐私~

@prajna0
Copy link
Author

prajna0 commented Sep 2, 2015

其实SSpanel原本一些没用的功能可以利用起来实现的其它功能,这确实很不错。

@xuanhuan
Copy link
Owner

xuanhuan commented Sep 3, 2015

最近我的事情很多,没空去想和做什么功能,等迟点有空再继续做。

@falseen
Copy link

falseen commented Sep 4, 2015

@arnaudGithub 把你的代码提交上来嘛,免得我们重复造轮子。到时候做个定时任务就ok了。我最近也在想定时任务的问题,但是我不太懂php,只好先用python实现。然后再慢慢想办法。

@prajna0
Copy link
Author

prajna0 commented Sep 8, 2015

@xuanhuan 请问一下,Materialize模板/admin/node.php及/admin/user.php列表颜色渐变在哪里更换它的颜色,我想换一下这个颜色与模板的蓝色太不搭配,Thanks!

@xuanhuan
Copy link
Owner

xuanhuan commented Sep 8, 2015

color-panel

@prajna0
Copy link
Author

prajna0 commented Sep 9, 2015

@xuanhuan 路径/templates/materialize/index.tpl添加代码



<{$index_Custom}><{* 自定义内容 *}>

19-23行在HTTPS状态下会出现绿锁不安全资源

@xuanhuan
Copy link
Owner

xuanhuan commented Sep 9, 2015

javascript:void(0);
这个是吗?

@falseen
Copy link

falseen commented Sep 9, 2015

@xuanhuan 是的,因为这个地址是指向本地的,而且不是https,所以才会出现不安全资源的提示。

@xuanhuan
Copy link
Owner

xuanhuan commented Sep 9, 2015

嗯,因为我没用图片,而使用css做背景了,你可以把图片地址加上,就是覆盖css了。
如果要用http 和 https
直接用 //

<img src="//www.google.com/?gws_rd=ssl">

@falseen
Copy link

falseen commented Sep 9, 2015

@xuanhuan 嗯,css生成的图片没法用https吗 ?

@xuanhuan
Copy link
Owner

xuanhuan commented Sep 9, 2015

如果不用图片,就只能把<img src="">删了,也可以这样<img src="javascript:void(0);">,不然第一次论播会没有内容。

@falseen
Copy link

falseen commented Sep 9, 2015

我知道了,只要把<img src="javascript:void(0);">改成<img src="//javascript:void(0);">就行了

@xuanhuan
Copy link
Owner

xuanhuan commented Sep 9, 2015

不行的

@falseen
Copy link

falseen commented Sep 9, 2015

我这边测试了可以,是真的。。

@prajna0
Copy link
Author

prajna0 commented Sep 9, 2015

@xuanhuan 经过测试,在javascript:void(0);前面加上//可解决

@xuanhuan
Copy link
Owner

xuanhuan commented Sep 9, 2015

好吧。。。

@falseen
Copy link

falseen commented Sep 9, 2015

@xuanhuan 那js也要改吧?

@xuanhuan
Copy link
Owner

xuanhuan commented Sep 9, 2015

不用

@xuanhuan
Copy link
Owner

xuanhuan commented Sep 9, 2015

你们有没有发现一个问题,论播内容在加载完成闪了两下。

@prajna0
Copy link
Author

prajna0 commented Sep 9, 2015

@xuanhuan 没有发现这个问题

@falseen
Copy link

falseen commented Sep 9, 2015

我也没发现。。

@xuanhuan
Copy link
Owner

xuanhuan commented Sep 9, 2015

我测试时发现是有的,所以刚才做了一个0X0的PNG通明图片,然后再编码BASE64,data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVR42mNgAAIAAAUAAen63NgAAAAASUVORK5CYII=

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVR42mNgAAIAAAUAAen63NgAAAAASUVORK5CYII=">

这样就不会有任何问题了。
0x0

@falseen
Copy link

falseen commented Sep 9, 2015

@xuanhuan 你用的什么浏览器?

@xuanhuan
Copy link
Owner

xuanhuan commented Sep 9, 2015

Google Chrome 版本 45.0.2454.85

@prajna0
Copy link
Author

prajna0 commented Sep 12, 2015

@xuanhuan 新添加的防自动签到好像对 https://qiandao.today 这种程序无效,我刚进行测试,可以使用这个正常自动签到

@falseen
Copy link

falseen commented Sep 12, 2015

我擦,这年头自动签到都做得这么傻瓜。。话说我以前都不知道还有这种网站。

@prajna0
Copy link
Author

prajna0 commented Sep 12, 2015

xshot-0035
xshot-0036
这里可以看到,直接显示了欢迎回来
xshot-0037
这里直接预览了。。

@prajna0
Copy link
Author

prajna0 commented Sep 12, 2015

@falseen 我之前一直都是使用的这个程序签到的一些ss站和其它网站~

@falseen
Copy link

falseen commented Sep 12, 2015

搞一个需要鼠标拖动的验证码应该就行了。

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

qq 20150918055412

@xuanhuan
Copy link
Owner

a4bea3e

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 这张图是AdminLTE-2的报错,materialize的报邮箱或密码错误

@xuanhuan
Copy link
Owner

f036e79

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 这下是正常了

@xuanhuan
Copy link
Owner

在复制的时候没看清楚造成的

@xuanhuan
Copy link
Owner

那个防签到系统平台,你们测试的有效吗?

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 我还没测试,代码在我朋友那,等会儿我朋友起来了我让他试试,不过原理就是用登陆后的Cookie签到

@xuanhuan
Copy link
Owner

这样按理来说,是行不通的。

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 我也太清楚,等他起来试过了告诉你吧~

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 哦对了,目前开发进度怎么样 有打算cron吗

@xuanhuan
Copy link
Owner

正在改进公告系统,昨天在测试发现重大问题,你在公告输入
content: '';
整个网站都打不开了。

@xuanhuan
Copy link
Owner

现在改的已经支持使用已存在的变量,还没做完。

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 确实如此,我刚试了,全站白屏,幸苦了

@xuanhuan
Copy link
Owner

image

@xuanhuan
Copy link
Owner

image
image

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan cron系统在进程中吗

@xuanhuan
Copy link
Owner

image

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 好吧,我的意思是ss-panel的cron系统在开发或已在进度列表里吗,就如我这个Issues一楼写的一样

@xuanhuan
Copy link
Owner

计划中

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 好,那行,幸苦了,注意身体啊,熬夜不好

@xuanhuan
Copy link
Owner

我之前已经写了一个记录日志模块,但是不知道要不要合拼到程序里,担心一些人别有用心人,用来做钓鱼网站收集用户信息。

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 这个确实是有,难免会有些人不走正轨。不过不合并的话,要怎么去使用或查看?

@xuanhuan
Copy link
Owner

只有记录,因为用的是json格式,自己写一个查看程序就好了。

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 那挺好的啊

@xuanhuan
Copy link
Owner

<?php
header("Content-type: text/html; charset=utf-8");
/**
 * $log_name 日志名称
 * visit   访问
 * monitor D监控和百度云观测
 * search  蜘蛛爬虫
 * $log_content 日志内容
 * $record_ip   等于“true”记录ip
 * $record_ip_info 必须要$record_ip等于“true”,这个才能用,等于“true”记录ip信息。
 * 使用方法:
 * 先要包含文件: include_once 'log.php';
 * 然后调用方法: write_log("visit",null,false,false);
 * 解释:write_log("日志名称(请用英文)","日志内容","true记录IP,不写或者为空则不记录","true记录IP信息,不写或者为空则不记录,如果前一个参数不写或者为空,这个也不会记录ip信息");
 * 
 * [write_log description]
 * @param  string  $log_name       [description]
 * @param  [type]  $log_content    [description]
 * @param  boolean $record_ip      [description]
 * @param  boolean $record_ip_info [description]
 * @return [type]                  [description]
 */
function write_log($log_name="visit",$log_content=null,$record_ip=false,$record_ip_info=false){
    global $U, $uid, $user_email ;
    //设置路径
    $log_dir = str_replace("lib/log.php","log/",str_replace("\\","/",__FILE__));
    $error_404 = "<?php header('HTTP/1.1 404 Not Found'); header(\"status: 404 Not Found\"); include(\$_SERVER['DOCUMENT_ROOT'].'/404.html'); exit();?>\n";
    //判断log目录是否存在
    if (!file_exists($log_dir)){
        //创建log目录
        mkdir ($log_dir);
        //写入一个index.php文件,当别人访问目录时返回404。
        file_put_contents($log_dir."index.php",$error_404);
    }
    //判断$log_name有user/时继续
    if(preg_match("/user\//si",$log_name)){
        //判断user目录是否存在
        if (!file_exists($log_dir."user")){
            //创建user目录
            mkdir ($log_dir."user");
            //写入一个index.php文件,当别人访问目录时返回404。
            file_put_contents($log_dir."user/index.php",$error_404);
        }
    //判断$log_name有admin/时继续
    }elseif(preg_match("/admin\//si",$log_name)){
        //判断admin目录是否存在
        if (!file_exists($log_dir."admin")){
            //创建admin目录
            mkdir ($log_dir."admin");
            //写入一个index.php文件,当别人访问目录时返回404。
            file_put_contents($log_dir."admin/index.php",$error_404);
        }
    }

    //判断log相关名称目录是否存在
    if (!file_exists($log_dir.$log_name)) {
        //创建log相关名称目录
        mkdir($log_dir.$log_name);
        //写入一个index.php文件,当别人访问目录时返回404。
        file_put_contents($log_dir.$log_name."/index.php",$error_404);
    }
    //要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个
    $log_file = $log_dir.$log_name."/".date("Y-m-d_")."log.php";
     $str_content='{'."\n";
     $str_content.='"时间":"'.date("Y-m-d H:i:s").'",'."\n";
     if(!empty($user_email)){
        $str_content.='"email":"'.$user_email.'",'."\n";
     }
     if(!empty($uid)){
        $str_content.='"uid":"'.@$uid.'",'."\n";
     }
     if(!empty($U)){
         if(!empty($U->GetUserName())){
            $str_content.='"用户名":"'.@$U->GetUserName().'",'."\n";
         }
     }
     if($log_name=="mail_success" || $log_name=="mail_error"){
             global $email,$Selectmailservice;
             $str_content.='"邮箱":"'.$email.'",'."\n";
             $str_content.='"邮件服务":"'.$Selectmailservice.'",'."\n";
     }
     if(@preg_match("/user_/si",$log_name) || @preg_match("/user\//si",$log_name)){
         if(@$log_name=="user_login_success" || @$log_name=="user/login_success"){
             global $id,$email;
             $str_content.='"id":"'.$id.'",'."\n";
             $str_content.='"邮箱":"'.$email.'",'."\n";
         }elseif($log_name=="user_login_error" || $log_name=="user/login_error"){
             global $email;
             $str_content.='"邮箱":"'.$email.'",'."\n";
         }elseif($log_name=="user_look_node_qr" || $log_name=="user_look_node_json" || 
            $log_name=="user/look_node_qr" || $log_name=="user/look_node_json"){
             global $id,$server,$port;
             $str_content.='"节点_id":"'.$id.'",'."\n";
             $str_content.='"节点_ip":"'.$server.'",'."\n";
             $str_content.='"节点_端口":"'.$server.'",'."\n";
         }elseif($log_name=="user_create_Invite_code" || $log_name=="user/create_Invite_code"){
             $str_content.='"邀请码":"'.$U->InviteNumToZero().'",'."\n";
         }
     }elseif(@preg_match("/admin_/si",$log_name) || @preg_match("/admin//si",$log_name)){
         if($log_name=="admin_login_success" || $log_name=="admin/login_success"){
             global $id,$email;
             $str_content.='"id"'.$id.'",'."\n";
             $str_content.='"邮箱":"'.$email.'",'."\n";
         }elseif($log_name=="admin_login_error" || $log_name=="admin/login_error"){
             global $email;
             $str_content.='"邮箱":"'.$email.'",'."\n";
         }elseif($log_name=="admin_edit_user" || $log_name=="admin/edit_user"){
            //  global $email;
            //  $str_content.='"user_id"'.$_POST['user_uid'].'",'."\n";
            //  $str_content.='"用户名:"'.$_POST['user_name'].'",'."\n";
            //  $str_content.='"邮箱"'.$email.'",'."\n";

         }
         elseif($log_name=="admin_del_user" || $log_name=="admin/del_user"){
             $str_content.='"用户id":"'.$_GET['uid'].'",'."\n";
         }elseif($log_name=="admin_edit_node" || $log_name=="admin_add_node" || 
            $log_name=="admin/edit_node" || $log_name=="admin/add_node"){
             global $node_name,$node_server,$node_method,$node_info,$node_type,$node_status,$node_order;
             if(!empty($node_id)){
                 global $node_id;
                 $str_content.='"节点id":"'.$node_id.'",'."\n";
             }
             $str_content.='"节点名字":"'.$node_name.'",'."\n";
             $str_content.='"节点地址":"'.$node_server.'",'."\n";
             $str_content.='"加密方式":"'.$node_method.'",'."\n";
             $str_content.='"节点描述":"'.$node_info.'",'."\n";
             $str_content.='"分类":"'.$node_type.'",'."\n";
             $str_content.='"状态":"'.$node_status.'",'."\n";
             $str_content.='"排序":"'.$node_order.'",'."\n";
         }elseif($log_name=="amin_add_code" || $log_name=="amin/add_code"){

         }elseif($log_name=="admin_change_announcement" || $log_name=="admin/change_announcement"){
            global $announcement_name;
            if ($announcement_name=='index_Announcement') {
                global $index_Announcement;
                $announcement_content = $index_Announcement;
            }elseif ($announcement_name=='index_button') {
                global $index_button;
                $announcement_content = $index_button;
            }elseif ($announcement_name=='index_Custom') {
                global $index_Custom;
                $announcement_content = $index_Custom;
            }elseif ($announcement_name=='footer_Announcement') {
                global $footer_Announcement;
                $announcement_content = $footer_Announcement;
            }elseif ($announcement_name=='tos_content') {
                global $tos_content;
                $announcement_content = $tos_content;
            }elseif ($announcement_name=='code_Announcement') {
                global $code_Announcement;
                $announcement_content = $code_Announcement;
            }elseif ($announcement_name=='user_index_Announcement') {
                global $user_index_Announcement;
                $announcement_content = $user_index_Announcement;
            }elseif ($announcement_name=='user_node_Announcement_node') {
                global $user_node_Announcement_node;
                $announcement_content = $user_node_Announcement_node;
            }elseif ($announcement_name=='user_node_Announcement_node_pro') {
                global $user_node_Announcement_node_pro;
                $announcement_content = $user_node_Announcement_node_pro;
            }elseif ($announcement_name=='user_invite_Announcement_color_orange') {
                global $user_invite_Announcement_color_orange;
                $announcement_content = $user_invite_Announcement_color_orange;
            }elseif ($announcement_name=='user_invite_Announcement_color_blue') {
                global $user_invite_Announcement_color_blue;
                $announcement_content = $user_invite_Announcement_color_blue;
            }
            if($announcement_content!=$log_content){
                 $str_content.='"名称":"'.$announcement_name.'",'."\n";
                 $announcement_content=preg_replace('/"/','\"',$announcement_content); 
                 $str_content.='"原内容":"'.$announcement_content.'",'."\n";
             }

         }
     }
     if(!empty($log_content)){

        if($log_name=="admin_change_announcement"){
          if($announcement_content!=$log_content){
               $log_content=preg_replace('/"/','\"',$log_content);
               $str_content.='"新内容":"'.$log_content.'",'."\n"; 
            }else{
               $str_content.='"信息":"内容不变",'."\n";
            }
        }else{
            $str_content.='"信息":"'.$log_content.'",'."\n";
        }
     }
     //true记录IP
     if($record_ip===true){
         //在引用前判断SMARTY_DIR是否为假,如果是假,要先设置为真才能用ip.php,不然调用不了函数,还会返回一个404页面。
         if(!defined('SMARTY_DIR')) {define('SMARTY_DIR','SMARTY_DIR');}
         //包含ip.php文件
         require_once dirname(__FILE__).DIRECTORY_SEPARATOR."Ss/Etc/ip.php";
         //获取并记录ip
         $str_content.='"ip":"'.getIP().'",'."\n";
         if($record_ip_info===true){
             //获取ip信息,以下记录。
             $ip_data=(array)getCity(getIP());
             /* 过滤<? ?> 和 < > */
             $ip_data=preg_replace("/<\?|\?>|<|>/si"," tag ",$ip_data);
             //true记录IP信息
             if(!empty($ip_data['isp'])){
                $str_content.='"运营商":"'.$ip_data['isp'].'",'."\n";
                $str_content.='"运营商-id":"'.$ip_data['isp_id'].'",'."\n";
             }
             if(!empty($ip_data['country'])){
                $str_content.='"国家":"'.$ip_data['country'].'",'."\n";
                $str_content.='"国家-id":"'.$ip_data['country_id'].'",'."\n";
             }
             if(!empty($ip_data['area'])){
                $str_content.='"地区":"'.$ip_data['area'].'",'."\n";
                $str_content.='"地区-id":"'.$ip_data['area_id'].'",'."\n";
             }
             if(!empty($ip_data['region'])){
                $str_content.='"省份":"'.$ip_data['region'].'",'."\n";
                $str_content.='"省份-id":"'.$ip_data['region_id'].'",'."\n";
             }
             if(!empty($ip_data['city'])){
                $str_content.='"城市":"'.$ip_data['city'].'",'."\n";
                $str_content.='"城市-id":"'.$ip_data['city_id'].'",'."\n";
             }
             if(!empty($ip_data['county'])){
                $str_content.='"县/区/镇":"'.$ip_data['county'].'",'."\n";
                $str_content.='"县/区/镇-id":"'.$ip_data['county_id'].'",'."\n";
             }
         }
     }

     $str_content.='"url":"http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"].'",'."\n";
     if(!empty($_SERVER['HTTP_REFERER'])){
        $str_content.='"前一页":"'.$_SERVER['HTTP_REFERER'].'",'."\n";
     } 
     /* 过滤<? ?> 和 < > */
     $UA=preg_replace("/<\?|\?>|<|>/si"," tag ",@$_SERVER['HTTP_USER_AGENT']);
     $str_content.='"UA":"'.$UA.'"'."\n";
     $str_content.='}'."\n";

     if(file_exists($log_file)){
         if(!$f  = file_put_contents($log_file,",".$str_content,FILE_APPEND)){
             // echo "<br/>log写入失败";
         }else{
             // echo "<br/>log写入成功。";
         }
     }else{
         if(!$f  = file_put_contents($log_file,$error_404.$str_content,FILE_APPEND)){
              // echo "<br/>log写入失败";
         }else{
              // echo "<br/>log写入成功。";
         }
     }
}

if(!defined('SMARTY_DIR')) {
    header('HTTP/1.1 404 Not Found');
    header("status: 404 Not Found");
    include($_SERVER['DOCUMENT_ROOT'].'/404.html');
    write_log("log.php","有人直接访问这个文件了。",true,true);
}
?>

放在lib/log.php

@xuanhuan
Copy link
Owner

<?php
if(!defined('SMARTY_DIR')) {
    header('HTTP/1.1 404 Not Found');
    header("status: 404 Not Found");
    include($_SERVER['DOCUMENT_ROOT'].'/404.html');
    define('SMARTY_DIR','SMARTY_DIR');
    @require_once '../../log.php';
    write_log("ip.php","有人直接访问这个文件了。",true,true);
    exit();
}
/**
 * 获取用户真实 IP
 */
function getIP()
{
    static $realip;
    if (isset($_SERVER)){
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
            $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
            $realip = $_SERVER["HTTP_CLIENT_IP"];
        } else {
            $realip = $_SERVER["REMOTE_ADDR"];
        }
    } else {
        if (getenv("HTTP_X_FORWARDED_FOR")){
            $realip = getenv("HTTP_X_FORWARDED_FOR");
        } else if (getenv("HTTP_CLIENT_IP")) {
            $realip = getenv("HTTP_CLIENT_IP");
        } else {
            $realip = getenv("REMOTE_ADDR");
        }
    }
    return $realip;
}
/**
 * 获取 IP  地理位置
 * 淘宝IP接口
 * @Return: array
 */
function getCity($ip)
{
$url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
try {
    $ip=json_decode(file_get_contents($url)); 
    if((string)$ip->code=='1'){
      return false;
      }
    $data = (array)$ip->data;
    return $data;
}  catch (Exception $e) {
   return $e;
}

}
?>

放在lib/Ss/Etc/ip.php

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 弄这2个php就可以使用了?

@xuanhuan
Copy link
Owner

是的,请看log.php的说明,还有一部分没完成。

@prajna0
Copy link
Author

prajna0 commented Sep 17, 2015

@xuanhuan 恩,我等会儿试试效果,期待完成~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants