O nutnosti smazat install.php jsem se poučil už před lety, když jsem zprovoznil (na VPSku) můj vůbec první WordPress. Tento soubor jsem nesmazal a někdo (naštěstí hodný) do mě oprávněně rýpnul tím, že vlezl do mého webu a přidal tam článek.
WordPress bohužel po instalaci stále nemaže install.php a je s tím spojená jedna velmi nepříjemná letitá chyba.
Pokud dojde k výpadku databáze, tak by se měla objevit stránka s chybovou informací o “výpadku”, ale zaručeno to není. Zcela běžně se místo toho objeví právě install.php – a ten umožňuje “nainstalovat” WordPress – což obnáší i to, že se vám při vhodném načasování někdo může vloupat do vašeho webu a ukrást ho.
Pokud by vše fungovalo jak mělo, tak install.php už nebezpečný není, WordPress to má už ošetřené a při pokusu o otevření se zobrazuje to, co vidíte v obrázku v záhlaví.
Smazat
Poté co dokončíte instalaci byste tedy rozhodně install.php měli smazat, nebo, ještě lépe, ho nahradit něčím bezpečným. Smažete-li ho a dojde k výpadku databáze, tak váš web bude vyhazovat “TOO MANY REDIRECTS”, takže je vhodnější ho nahradit.
Install.php najdete ve složce wp-admin, takže stačí použít FTP a postarat se o nápravu. Buď smazáním souboru, nebo, chcete-li si ho nechat, tak přejmenováním – třeba na install.php.original
Háček je i v tom, že po aktualizaci WordPressu se vám tam install.php opět objeví. Aktualizace prostě zjistí chybějící soubor a dá ho tam.
Zablokujte přístup
Pokud nechcete mazat, tak můžete do .htaccess přidat následující
# PROTECT install.php
<Files install.php>
Order Allow,Deny
Deny from all
Satisfy all
</Files>
Dejte tam náhradu, vlastní kód
Případně, třetí elegantní řešení, můžete nahradit PHP kódem, který v případě výpadku bude zobrazovat 503 chybu (v Chrome 500 chybu).
<?php header("HTTP/1.1 503 Service Temporarily Unavailable"); ?>
<?php header("Status 503 Service Temporarily Unavailable"); ?>
<?php header("Retry-After 3600"); // 60 minutes ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Error Establishing Database Connection</title>
</head>
<body>
<h1>Error Establishing Database Connection</h1>
<p>We are currently experiencing database issues. Please check back shortly. Thank you.</p>
</body>
</html>
Případně, varianta, která vám pošle upozornění (musíte doplnit váš e-mail, nezapomente).
<?php
/*
WordPress install.php replacement page
@ https://perishablepress.com/important-security-fix-for-wordpress/
Place in /wp-admin/ directory
*/
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 3600'); // 3600 seconds = 60 minutes
mail('semdejtevas@emial', 'Database Error', 'There is a problem with the database!');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Site offline for maintenance</title>
</head>
<body>
<h1>We'll be right back..</h1>
<p>The site is currently offline for maintenance.</p>
</body>
</html>
Pomůže WordFence?
WordFence blokuje snahu o otevření install.php, ale má to jeden háček. Při skutečném výpadku databáze to neudělá. Takže na toto řešení se spoléhat nemůžete.
