Newsletter 365tipů můžete číst zdarma. Placené předplatné je dobrovolná podpora, která pomáhá webu pokračovat.
Podpořit 365tipů

TIP#2117: Co byste po instalaci WordPressu měli smazat či změnit? install.php – pozor ať nedopadnete špatně

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. 

POZOR: Novější a lépe fungující řešení v Jak zabránit tomu, aby WordPress při výpadku databáze ukazoval install.php? (V2.0)

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.