Цель этого скрипта - отправлять почтовые журналы веб-мастеру, когда есть ошибка сервера 404/500 и т. д.Этот скрипт php безопасен? fwrite и get
Сценарий использует fwrite для подсчета журналов, а затем сохраняет 10 журналов и отправляет их по почте, если достигает 10 журналов. Он использует некоторые значения и отображает их через эхо, как я могу быть уверен, что у него нет XSS или другой проблемы с взломом. Я знаю, что сценарий может быть не таким передовым, эффективным или чисто написанным, но он делает мне трюк. Меня беспокоит только безопасность.
файл .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 = "[email protected]"; // webmaster email
$subject = "errorpage guardian has a message"; // email bericht
$from = "From: [email protected]\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 ";
?>
Если вы думаете, что XSS, подумайте ['htmlspecialchars'] (http://php.net/htmlspecialchars). – hakre
Запись файла безопасна, поскольку вы не используете никакие предоставленные пользователем значения, чтобы открыть файл. Пользовательский агент, HTTP-референт или запрос uri могут содержать html/javascript-код, следуйте советам hakre. – knittl