Autor Zpráva
krteczek
Profil
dobrý den zajímalo by mne, co všechno potřebuji abych mohl používat https protokol k přenosu stránek (jde mi o administrační rozhraní kde má přístup jen uzká skupinka lidí (2) a kde jsou v menu nástroje pomocí kterych by šlo neopatrnou manipulací neobeznámenou osobou, popřípadě záškodníkem ) nadělat spoustu škody na webu ). Pokud byste mohli napsat případně ukázkový skriptík byl bych vám moc vděčný.
krteczek
habendorf
Profil
Na to bych rozhodně nešel přes https. To je určeno k něčemu úplně jinému. Radši bych použil nějaké přihlášení na server.
DoubleThink
Profil *
Abys mohl používat https, musí mít server podporu kryptování (SSL/TLS). Instalaci SSL na Apachi jsem nedávno popsal na svém weblogu.

Přihlašování na serveru se dělá pomocí .htaccess - dobrý návod je zde.
krteczek
Profil
Díky za rady,

habendorf:já používám přihlášení hesly pomocí www autenticate, šlo mi o zabezpečený přenos informací mezi serverem a prohlížečem. Takže rozhodně ano https. Nebo se mýlím? a jestli ano tak bych si rád přečetl zdůvodnění od kohokoliv kdo do toho vidí. děkuji

DoubleThink: takže díky za tip, server sem nastavovat nemusel, mám mdk 10.0 s nainstalovaným apache a ssl funguje. Já nevěděl jak se to používá, co všechno musím udělat pro to abych jako programátor stránek mohl použít protokol https.

přihlašování na hostingový server pomoci .htaccess je asi nereálné (neumím si představit že mne někdo pustí k těmto souborum...)

takže pomocí www autenticate se na jedné stránce přihlásím, ověřím jmeno a heslo. to není problém to mi fachčí,

mám problém s tím, že abych mohl použít protokol https musím odkaz na další stranku napsat jako absolutmí v tomto tvaru: https://neco.nekde/blabla/admin.php , ale v tom případě mi nefungují přenosy serverových proměnných: $_SERVER["PHP_AUTH_USER"] a $_SERVER["PHP_AUTH_PW"] jsou na té druhé stránce prázdné... :o(.

Pokud použiji relativní adresu, tak se mi proměnne přenesou, ale není https spojení.

Tde mne zajímá co dělám špatně?
pro jistoto tu dám i ten kod

**************************************************pre.php************* ************************
<?
session_start();
require("login.php");
//pokud skript v souboru "login.php" proběhne v pořádku ( nebude ukončen ), zjistíme si cestu ke kořenu webu
// a vložíme ji do cesty k našemu souboru. je to takhle udelane aby jsme nemuseli přepisovat cesty na lokale a na webu
$cesta=dirname($_SERVER["SCRIPT_NAME"]);
?><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><?
?><p>Jste přihlášen, klikněte na odkaz <a href="https://<? echo $_SERVER["SERVER_NAME"].$cesta;?>/admin.php" >na administrační rozhraní</a><?
?>

*************************************************login.php************ ***************************
<?
//funguje to tak že vyskočí okno do ktereho uživatel zadá

if (!IsSet($_SERVER["PHP_AUTH_USER"]))
{

Header("WWW-Authenticate: Basic realm=\"Hesla\"");
Header("HTTP/1.0 401 Unauthorized");
// pokud uživatel nevyplní údaje vůbec zobrazí se mu následující hláška a běh php skriptu bude ukončen ( příkaz "exit;")
?><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><?
echo "Přístup pouze na uživatelské jméno a heslo.";
exit;
}
else
{

//z bezpečnostních důvodů se hesla ukládají do samostatných souborů, nebo do databáze, použiji soubor
require("jmeno-heslo.php");
//musíme skontrolovat jestli jsou údaje zadané uživatelem pravdivé, pokud ano, skript proběhne až do konce
// a vrátí se na stránku odkud byl volán, pokud ne, vypíše chybovou hlášku, a běh skriptu bude ukončen příkazem exit;
if (($_SERVER["PHP_AUTH_USER"]!=$jmeno) |($_SERVER["PHP_AUTH_PW"]!=$heslo))
{
?><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><?
echo "Neplatné přihlašovací údaje"; exit;
}
}
?>

******************************************jmeno-heslo.php************* **************************************

<?
$jmeno="jmeno";
$heslo="heslo";
?>

*******************************************admin.php****************** ************************************
<?
ob_start(); session_start();
$cesta= "http://".$_SERVER["SERVER_NAME"].(dirname($_SERVER["SCRIPT_NAME"]))." /pre.php";
//echo $cesta."<br>".$_SERVER["HTTP_REFERER"]."<br>".$_SERVER['REQUEST_URI']. "<br>";

if( $_SERVER["HTTP_REFERER"]==$cesta)
{ echo $_SERVER["PHP_AUTH_USER"]."<br>".$_SERVER["PHP_AUTH_PW"]."<br><br>";
require("jmeno-heslo.php");
if (($_SERVER["PHP_AUTH_USER"]==$jmeno) and ($_SERVER["PHP_AUTH_PW"]==$heslo))
{
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

<html>

<head>
<title>administrátorské rozhraní webu</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="styl.css" >
</head>

<body>
<p>Něco co může vidět jen povolaná osoba.</p>
</body>

</html>
<?
}
else
{
?><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><?
echo "Pokus o neautorizovaný přístup...";exit;
}
}
else
{
?><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><?
echo "Pokus o neautorizovaný přístup...";exit;
}
?>
<?ob_end_flush();?>

krteczek
krteczek
Profil
Ahoj!
Tak jsem na to přišel!!!
celý problém byl v tom, že jsem měl přistoupit už na soubor s přihlášením pomocí protokolu https a né až z něho.
takže celý postup vypadá následovně ( pro ty co by tohle někdy chtěli použít )

Máte nějakou stránku ( třeba index.php ).a na ní umístíme odkaz. Například takto:

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

<html>

<head>
<title>Nějaký web</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<p>Obsah webu pro všechny</p>
<? $cesta=dirname($_SERVER["SCRIPT_NAME"]);?>
<!-- musíme už ted přistoupit na stránku s přihlášením pomoci protokolu https://-->
<a href="https://<? echo $_SERVER["SERVER_NAME"].$cesta;?>/prihlaseni.php">administrátoruv ucet</a>
</body>

</html>

ted uvedu jak by mohl vypadat soubor : prihlaseni.php ( připomínám že už jsne připojeni pomocí protokolu https, a tudíž veškerá komunikace mezi serverem a prohlížečem probíhá pomocí 128bitového šifrovování ) :

<?
session_start();
//vložíme sounor login.php obsahujíci vlastní přihlášení pomoci www autentifikace
require("login.php");
//pokud skript v souboru "login.php" proběhne v pořádku ( nebude ukončen ), zjistíme si cestu ke kořenu webu
// a vložíme ji do cesty k našemu souboru. je to takhle udelane aby jsme nemuseli přepisovat cesty na lokale a na webu
$cesta=dirname($_SERVER["SCRIPT_NAME"]);
?><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><?
?><p>Jste přihlášen, klikněte na odkaz <a href="admin.php" >na administrační rozhraní</a><?
?>

do souboru prihlaseni.php vkládáme pomocí require tento soubor:login.php obsahujíci tento kod:

<?
//funguje to tak že vyskočí okno do ktereho uživatel zadá přihlašovací heslo a jméno

if (!IsSet($_SERVER["PHP_AUTH_USER"]))
{

Header("WWW-Authenticate: Basic realm=\"Hesla\"");
Header("HTTP/1.0 401 Unauthorized");
// pokud uživatel nevyplní údaje vůbec zobrazí se mu následující hláška a běh php skriptu bude ukončen ( příkaz "exit;")
?><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><?
echo "Přístup pouze na uživatelské jméno a heslo.";
exit;
}
else
{
//z bezpečnostních důvodů se hesla ukládají do samostatných souborů, nebo do databáze, použiji soubor
require("jmeno-heslo.php");
//musíme skontrolovat jestli jsou údaje zadané uživatelem pravdivé, pokud ano, skript proběhne až do konce
// a vrátí se na stránku odkud byl volán, pokud ne, vypíše chybovou hlášku, a běh skriptu bude ukončen příkazem exit;
if (($_SERVER["PHP_AUTH_USER"]!=$jmeno) |($_SERVER["PHP_AUTH_PW"]!=$heslo))
{
?><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><?
echo "Neplatné přihlašovací údaje"; exit;
}
}
?>

obsah souboru jmeno-heslo.php:

<?
$jmeno="jmeno";
$heslo="heslo";
?>

A navíc z toho souboru ( stránky prihlaseni.php ) odkazujeme poté co probehne prihlaseni v poradku ( jinak se ukončí běh skriptu a vypíše to námi definovanou chybovou hlášku ), na stránku admin.php která obsahuje kontrolu že jsme přišli ze stránky [b]prihlášení.php[b]. Kontrola se provádí pomocí serverové proměnne referer, a znovu se ověří že jsou přihlašovací údaje správne (opět pomocí serverových proměmmyých:

<?
ob_start();
session_start();
//nejprve si pomocí serverových proměnných zjistíme cestu ke skriptu
// ( předpokládám že všechny soubory jsou ve stejnem adresáři )
$cesta= "https://".$_SERVER["SERVER_NAME"].(dirname($_SERVER["SCRIPT_NAME"])). "/pre.php";
// potom se refereru zeptáme jestli uživatel přišel ze stránky na které je přihlášení,
//pokud ano bude pokračovat v kontrole přihlašovacích udajů, pokud bude vše správné,
// zobrazí se stránka s obsahem ktery nemá nikdo nepovolaný vidět
if( $_SERVER["HTTP_REFERER"]==$cesta)
{
require("jmeno-heslo.php");
if (($_SERVER["PHP_AUTH_USER"]==$jmeno) and ($_SERVER["PHP_AUTH_PW"]==$heslo))
{
//vše je v pořádku zobrazíme stránku pro admina
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

<html>

<head>
<title>administrátorské rozhraní webu</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="styl.css" >
</head>

<body>
<p>Něco co může vidět jen povolaná osoba.</p>
<p>opustit chráněnou oblast<a href="http://<?$_SERVER["SERVER_NAME"];?>">zde</a></p>
</body>

</html>
<?
}
else
{
//heslo a/nebo jmeno je špatné, zobrazí se chybová hláška a ukončí běh skriptu
?><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><?
echo "Pokus o neautorizovaný přístup...";exit;
}
}
else
{
//uživatel se pokusil přistoupit odjinud než z námi definované stránky a tudíž se jedná o neautorizovaný přístup
?><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><?
echo "Pokus o neautorizovaný přístup...";exit;
}
?>
<?ob_end_flush();?>

Jak vidíte není to až tak složité na zpracování ani na pochopení snad taky ne
Jen pro pořádek: opuštění ( odhlášení ) zabezpečených stránek se provádí pomocí absolutního odkazu ve tvaru: http://www.neco.nekde
tím se zruší šifrovaný přenos.
krteczek
Toto téma je uzamčeno. Odpověď nelze zaslat.