Jak zaheslovat web - přes PHP

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Al-ADAM
Datum: 18.5.2006
Hodnocení/Hlasovalo: 3.63/8

Pokud jste se někdy pokoušeli dělat nějaké osobní stránky, určitě jste chtěli donějaké části webu zakázat přístup nepovolaným. Zde se dozvíte jak na to (přes PHP). Nedá se to téměř obejít. Maximálně slovníkovým útokem.

Pokud jste se někdy pokoušeli dělat nějaké osobní stránky, určitě jste chtěli donějaké části webu zakázat přístup nepovolaným. Zde se dozvíte jak na to (přes PHP). Nedá se to téměř obejít. Maximálně slovníkovým útokem.

Postup:

1. Nejdříve si vytvořte složku, ve které bude zaheslovaná část webu. Nazvěte jí třeba heslo.



2. Vytvořte si PHP dokument, ve kterém bude:

<?

$user_passwords = array (

"jmeno" => "heslo",

);

$logout_page = "logout.php";

$login_page = "login.php";

$invalidlogin_page = "invalidlogin.php";

if ($action == "logout")
{
Setcookie("logincookie[pwd]","",time() -86400);
Setcookie("logincookie[user]","",time() - 86400);
include($logout_page);
exit;
}
else if ($action == "login")
{
if (($loginname == "") || ($password == ""))
{
include($invalidlogin_page);
exit;
}
else if
(strcmp($user_passwords[$loginname],$password) == 0)
{

Setcookie("logincookie[pwd]",$password,time() + 86400);

Setcookie("logincookie[user]",$loginname,time() + 86400);
}
else
{
include($invalidlogin_page);
exit;
}
}
else
{
if (($logincookie[pwd] == "") ||
($logincookie[user] == ""))
{
include($login_page);
exit;
}
else if
(strcmp($user_passwords[$logincookie[user]],$logincookie[pwd]) == 0)
{

Setcookie("logincookie[pwd]",$logincookie[pwd],time() + 86400);

Setcookie("logincookie[user]",$logincookie[user],time() + 86400);
}
else
{
include($invalidlogin_page);
exit;
}
}
?>


a pojmenujte ho protection.php.
To co je zobrazene žlutě můžete případně změnit, ale pokud budete postupovat přímo podle návodu, zůstane to stejný.

Co je Modře je jméno a heslo, pod kterým se bude do chráněné zóny přihlašovat. Můžete přidat i další jména a hesla, oddělujte je vždy čárkou.



3. Teď si vytvořte dokument login.php, který bude obsahovat tohle, a ještě další grafické prvky (nepovinně), které si sami doděláte.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title></title>
</head>

<FORM METHOD=post ACTION="<? echo $PHP_SELF ?>?action=login">
<B>Uživatelské jméno:</B><BR>
<INPUT TYPE=text SIZE=30 NAME=loginname><BR>

<B>Heslo:</B><BR>
<INPUT TYPE=password SIZE=30 NAME=password><BR>
<? if (substr($PHP_SELF,-9) == "login.php") { echo "<P>Nelze zobrazit soubor, soubor je chráněný heslem!</P>"; } else { echo "<INPUT TYPE=submit VALUE=\"Login!\">"; } ?>
</FORM>
</BODY>
</HTML>


Můžete si zase trochu upravit podle sebe. Je to normální html dokument s php scriptem, takže tam můžete přidat i další věci.



4.Vytvořte si dokument logout.php, který bude jako u loginu obsahovat tohle:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title></title>

</head>


<p>Díky za tvou návštěvu!</p>
<p>Klikněte <a href="<? echo $PHP_SELF ?>">zde</a> pro nové přihlášení.</p>

</body>
</html>

Znovu si můžete upravit podle sebe.



5. Nyní vytvořte dokument invalidlogin.php, který obsahuje tohle:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title></title>
</head>


<P><FONT "red"><B>Špatné už. jméno, nebo heslo!</B><BR>Prosím zkuste znovu.</FONT></P>
<FORM METHOD=post ACTION="<? echo $PHP_SELF ?>?action=login">
<B>Uživatelské jméno:</B><BR>
<INPUT TYPE=text SIZE=30 NAME=loginname><BR>

<B>heslo:</B><BR>
<INPUT TYPE=password SIZE=30 NAME=password><BR>
<INPUT TYPE=submit VALUE="Login!">
</FORM>
</BODY>
</HTML>


To je ze vše ze speciálních dokumentů. Pak už máte jen klasický index.php. Akorát dejte úplně na začátek dokumentu tohle:

<?include "protection.php"?>

Jestli chcete mít ve sve "VIP zóně" více stránek, vložte nad každou z nich to include.

Když chcete na VIP zónu odkazovat z přístupných stránek, odkazujte normálně na heslo/index.php