header('content-type:text/html;charset=gbk'); - set_time_limit(0);//タイムアウトを防ぐ
- /**
- *
- * php ディレクトリスキャン監視の拡張バージョン
- *
- * @バージョン 1.0
- *
- 以下の変数は使用前に手動で設定する必要があります
- *
- **/
- /*== =================== プログラム構成=====================*/
- $pass="テスト";//パスワードを設定します
- $jkdir="."; //監視およびスキャンするディレクトリを設定します。現在のディレクトリは '.' で、上位ディレクトリは '..' です。絶対パスを設定することもできます後ろにスラッシュを追加しない場合、デフォルトは現在のディレクトリです
- $logfilename="./m.log";//どこにでも配置できるログを保存するパスを設定します
- $exclude=array('data' ,'images');//ディレクトリを除外します
- $danger='eval|cmd|passthru|gzuncompress';//トロイの木馬ファイルかどうかを判断するために検出する危険な関数を設定します
- $suffix='php|inc ';//スキャンするファイルのサフィックスを設定します
- /*== =================== 設定の終了========== ===========*/
-
- $filename=$ _GET['filename'];
- $jumpoff=false; ['PHP_SELF'];
- $thisfile = end(explode('/',$ url));
- $jump="{$thisfile}|".implode('|',$exclude); file_num=$danger_num=0;
- define('M_PATH',$jkdir);
- if ($check=='check')
- {
- $safearr =explode("| ",$jump);
- $start_time=microtime(true);
- safe_check($ jkdir);
- $end_time=microtime(true);
- $total=$end_time-$start_time;
- $file_num=$file_num-$jkdir_num ;
- $message= "ファイルの数: ".$file_num;
- $message.= " フォルダーの数: ".$jkdir_num;
- $message.= " 疑わしいファイルの数: ".$danger_num; = " 実行時間: ".$total;
- echo $message;
- }else{
- if ($_GET['m']=="del") Delete();//ファイルの削除処理
- //ファイルの内容を読み取る
- if(isset($_GET['readfile'])){
- //出力ビューパスワード、パスワードが正しく検証された後、ファイルの内容が出力されます
- if(empty($_POST['passchack'])){
- echo""
- ."" ;
- 終了;
- }elseif(isset($_POST['passchack'])&&$_POST['passchack' ]==$pass){
- $code=file_get_contents($_GET['readfile']);
- exit;
- }else{
- exit;
- }
-
- }else{
- record_md5(M_PATH );
- if(file_exists(M_LOG)){
- $log = unserialize(file_get_contents(M_LOG));
- } else{
- $log = array();
-
- if($_GET['savethis']== 1){
- //現在のファイル md5 をログ ファイルに保存します
- @unlink(M_LOG); M_LOG,serialize($file_list));
- echo "正常に保存されました。クリックして戻る";
- 終了;
- }
- if(empty($log)){
- echo "ログ ファイルはまだ作成されていません。 [Save Current]をクリックするとログファイルが作成されます。 ";
- }else{
- if($file_list==$log){
- echo "このフォルダーには変更が加えられていません。";
- }else{
- if(count($file_list) > 0 ){
- foreach($file_list as $file => $md5){
- if(!isset($log[$file])){
- echo "新しい文例:".$file.""." 作成時刻:".date("Y-m-d H:i:s",filectime($file))." 変更時間:".date("Y-m-d H:i:s",filemtime($file))." ソースコード删除< ;/u>
";
- }else{
- if($log[$file] != $md5){
- echo "修正文件:".$file.""." 作成時刻:".date("Y-m-d H:i:s",filectime($file))." 変更時間:".date("Y-m-d H:i:s",filemtime($file))." ソースコード
";
-
- unset($log[$file]);
- }else{
- unset($log[$file]);
- }
- }
- }
- }
- if(count($log)>0){
- foreach($log as $file => $md5){
- echo "删除文例:".$file."
";
- }
- }
- }
- }
- }
- }
-
- //計算md5
- function Record_md5($jkdir){
- global $file_list,$exclude;
- if(is_dir($jkdir)){
- $file=scandir($jkdir)
- foreach($file as $f); {
- if($f!='.' && $f!='..' && !in_array($f, $exclude)){
- $path = $jkdir.'/'.$f;
- if(is_dir; ($path)){
- Record_md5($path);
- }else{
- $file_list[$path]=md5_file($path);
- }
- }
- }
- 関数 Safe_Check($jkdir)/ /遍历文件
- {
- global $danger ,$suffix ,$jkdir_num ,$file_num ,$danger_num;
-
- ) or die('文件夹不存在') ;
- while ($file=$hand->read())
- {
- $filename=$jkdir.'/'.$file;
- if (!$jumpoff) {
- if(Jump($filename)) continue;
- }
- if(@is_dir($filename) && $file != '.' && $file!= '..'&& $file!='./..')
- { $jkdir_num++;
- Safe_Check($filename);
- }
- if (preg_match_all ("/.($suffix)/i",$filename,$out))
- {
-
- $str='';
- $fp = @fopen($filename,'r')or die('没有权限');
- while(!feof($fp))
- {
- $str .= fgets($fp,1024);
- }
- fclose($fp);
- if( preg_match_all ("/($danger)[ rnt]{0,}([[(])/i",$str,$out))
- {
- echo "可疑文件:{$filename}"." 更新時間:".date("Y-m-d H:i:s",filectime($filename))." :".date("Y-m-d H:i:s",filemtime($filename))." 查看代頁< ;/u> 删除
";
- $danger_num++ ;
- }
- }
- $file_num++
- }
- }
- function Edit()//查看可疑文
- {
- $filename = str_replace("..","",$filename);ファイル = $ファイル名;
- $content = "";
- if(is_file($file))
- $fp = fopen($file,"r") または die('没有权制限'); ($fp,filesize($file));
- $content = htmlspecialchars($content)
-
- }
- echo "rn";
- exit();
- }
- function Delete()//删除文件
- { global $filename,$pass;
- if(empty($_POST['passchack'])){
- echo"
- 。 「
- . " "
- 。 " "
- 。 " "
- 。 ""
- ."";
- 終了;
- }elseif(isset($_POST['passchack'])&&$_POST['passchack']==$pass){
- (is_file($filename))?($mes=unlink($filename)?'削除に成功しました': '表示権限の削除に失敗しました'):'';
- echo $mes;
- }else{
- echo 'パスワードが違います! ';
- exit;
- }
- }
- function Jump($file)//ファイルをスキップ
- if($jump != '')
- {
- foreach($safearr as $v) )
- {
- if($v=='') 続行;
- if( eregi($v,$file) ) return true ; }
- }
- return false
- [ファイルの変更を表示]|[現在のファイルのフィンガープリントを保存]|[不審なファイルをスキャン]
-
-
- コードをコピー
-
-
-
PHP、ウェブ
|