这个PHP脚本安全吗? fwrite并得到

时间:2012-04-05 08:15:08

标签: php .htaccess get xss fwrite

此脚本的目的是在出现404/500等服务器错误时将日志邮寄给网站管理员。

该脚本使用fwrite来计算日志,然后保存10个日志并在它达到10个日志时邮寄它们。 它使用了一些值并通过echo显示它们,我怎么能确定它没有XSS或其他hackable问题。 我知道这个脚本可能不是那么先进,高效或者写得很干净,但它确实是我的诀窍。 我只关心它的安全性。

.htaccess文件

ErrorDocument 400 /errors/error.php?err=400
ErrorDocument 401 /errors/error.php?err=401
ErrorDocument 403 /errors/error.php?err=403
ErrorDocument 404 /errors/error.php?err=404
ErrorDocument 500 /errors/error.php?err=500
ErrorDocument 410 /errors/error.php?err=410

php文件/errors/error.php

<?php

$fp = fopen("counterlog.txt", "r"); 
$count = fread($fp, 1024); 
fclose($fp); 


$errorNum = (int)$_GET['err'];
$err_str = array(404=>'Type of error: Not Found (404)', 400=>'Type of error: Bad Request (400)', 401=>'Type of error: Unauthorized (401)', 403=>'Type of error: Forbidden (403)', 410=>'Type of error: Gone (410)', 500=>'Type of error: Internal Server Error (500)');

$ip = getenv ("REMOTE_ADDR"); 
$requri = getenv ("REQUEST_URI"); 
$servname = getenv ("SERVER_NAME"); 
$combine = $ip . " tried to load " . $servname . $requri; 

$httpref = getenv ("HTTP_REFERER");

if (empty($httpref)) { 
 $httpref = "Unknown Location";
}

$httpagent = getenv ("HTTP_USER_AGENT");

$today = date("F j, Y, H:i:s"); 

$note = "This information has been sent to the webmaster." ;

$message = "On $today \n <br> $combine <br> \n User Agent = $httpagent \n <br>User got there from: $httpref <br><br> $err_str[$errorNum] <br><br> $note\n ";
$message2 = "#$count \n $today \n $combine \n User Agent = $httpagent \n User got there     from: $httpref \n $err_str[$errorNum] \n\n ";

$fh = fopen("errorlogje.txt", "a") or die("can't open file");
$stringData = $message2;
fwrite($fh, $stringData);
fclose($fh);

if ($count == 10) {
$count = 0;
$fh = fopen("errorlogje.txt", "r");
$bericht = fread($fh, 4096);
$to = "mail@mail.nl"; // webmaster email
$subject = "errorpage guardian has a message"; // email bericht
$from = "From: mailguardian@mail.nl\r\n";  // email afzender (makelijk voor het sorteren)
mail($to, $subject, $bericht, $from);

$fh = fopen("errorlogje.txt", "w");
fclose($fh);
}
else {
$count = $count + 1;
}

$fp = fopen("counterlog.txt", "w"); 
fwrite($fp, $count); 
fclose($fp); 

echo " $message ";

?>

1 个答案:

答案 0 :(得分:1)

这是非常安全的,是的。 您正在使用的唯一$_GET值已转换为整数,因此可以消除任何可能的问题。