Hi guys, I've developed a virus scanning program using php. Well, it seems my program worked fine--- it can detected the infected files. The problem is how can I make the program to delete the infected files. It seems when I tried to developed the coding, it didn't work. Below is the code;
<?php
$path = $_SERVER['DOCUMENT_ROOT'];
$debug = true;
file_scan("http://localhost/", $defs, true);
$extensions = Array();
$extensions[] = 'htm';
$extensions[] = 'html';
$extensions[] = 'txt';
$extensions[] = 'php';
$extensions[] = 'hp4';
$extensions[] = 'hp5';
//$extensions[] = '.pl';
// CODE BEGINS here
// declare variables
$report = '';
// output html headers
renderhead();
// set counters
$dircount = 0;
$filecount = 0;
$infected = 0;
// load virus defs
if (!check_defs('virus.def'))
trigger_error("Virus.def vulnerable to overwrite, please change permissions", E_USER_ERROR);
$defs = load_defs('virus.def', $debug);
// scan specified root for specified defs
file_scan($path, $defs, $debug);
// output summary
echo '<h1>Scan Completed</h2>';
echo '<div id=summary>';
echo '<p><strong>Scanned folders:</strong> ' . $dircount . '</p>';
echo '<p><strong>Scanned files:</strong> ' . $filecount . '</p>';
echo '<p class=r><strong>Infected files:</strong> ' . $infected . '</p>';
echo '</div>';
// output full report
echo $report;
function file_scan($folder, $defs, $debug = true) {
// hunts files/folders recursively for scannable items
global $dircount, $report;
$dircount++;
if ($debug)
$report .= '<p class="d">Scanning folder ...</p>';
if ($d = @dir($folder)) {
while (false !== ($entry = $d->read())) {
$isdir = @is_dir($folder.'/'.$entry);
if (!$isdir and $entry!='.' and $entry!='..') {
virus_check($folder.'/'.$entry,$defs,$debug);
} elseif ($isdir and $entry!='.' and $entry!='..') {
file_scan($folder.'/'.$entry,$defs,$debug);
}
}
$d->close();
}
}
function virus_check($file, $defs, $debug = true) {
global $filecount, $infected, $report, $extensions;
// find scannable files
$scannable = 0;
foreach ($extensions as $ext) {
if (substr($file,-3)==$ext)
$scannable = 1;
}
// compare against defs
if ($scannable) {
// affectable formats
$filecount++;
$data = file($file);
$data = implode('\r\n', $data);
$clean = 1;
foreach ($defs as $virus) {
if (strpos($data, $virus[1])) {
// file matches virus defs
$report .= '<p class="r">Infected: ' . $file . ' (' . $virus[0] . ')</p>';
$infected++;
$clean = 0;
}
}
if (($debug)&&($clean))
$report .= '<p class="g">Clean: ' . $file . '</p>';
}
}
function load_defs($file, $debug = true) {
// reads tab-delimited defs file
$defs = file($file);
$counter = 0;
$counttop = sizeof($defs);
while ($counter < $counttop) {
$defs[$counter] = explode(' ', $defs[$counter]);
$counter++;
}
if ($debug)
echo '<p>Loaded ' . sizeof($defs) . ' malicious codes definitions</p>';
return $defs;
}
function check_defs($file) {
// check for >755 perms on virus defs
clearstatcache();
$perms = substr(decoct(fileperms($file)),-2);
if ($perms > 55)
return false;
else
return true;
}
function renderhead() {
?>
<html>
<head>
<title>Virus scan</title>
<style type="text/css">
h1 {
font-family: arial;
}
p {
font-family: arial;
padding: 0;
margin: 0;
font-size: 10px;
}
.g {
color: #009900;
}
.r {
color: #990000;
font-weight: bold;
}
.d {
color: #ccc;
}
#summary {
border: #333 solid 1px;
background: #f0efca;
padding: 10px;
margin: 10px;
}
#summary p {
font-size: 12px;
}
</style>
</head>
<body>
<?php
}
?>
<p class="d"> </p>
</body>
</html>
So guys can you helped enhance my coding? I mean the program can delete the infected files. Thanks in advanced.