1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
|
<?xml version="1.0" encoding="iso-8859-2"?>
<!-- EN-Revision: 1.21 Maintainer: goba Status: ready -->
<chapter id="features.http-auth">
<title>HTTP hitelests PHP-vel</title>
<simpara>
A HTTP hitelestsi (authentication) funkcik csak akkor elrhetek
PHP-ben, ha az Apache modulknt fut, br rgebben a CGI md hasznlat
sorn is mkdtt ez a funkci, azonban ez a lehetsg mr megsznt.
Az Apache modulknt fut PHP esetben a <function>header</function> fggvnyt
kell hasznlni arra, hogy egy "Authentication Required"
zenetet kldjn a kliens bngsznek, aminek hatsra az egy Username/Password
bemeneti ablakot nyit meg a felhasznl szmra. Ha a ltogat kitlttte
a username s password mezket, az URL, ami a PHP szkriptre mutat, ismt
meghvsra kerl, s rendelkezsre llnak a $PHP_AUTH_USER, $PHP_AUTH_PW
s a $PHP_AUTH_TYPE vltozk, amik a felhasznli nv, jelsz s
azonostsi tpus rtkeket tartalmazzk rtelemszeren. Jelen pillanatban
csupn a "Basic" azonostsi tpus tmogatott. Lsd mg a
<function>header</function> fggnyvt.</simpara>
<para>
Egy egyszer plda PHP szkript, ami kliens azonostst vlt ki:
<example>
<title>HTTP azonostsi plda</title>
<programlisting role="php">
<![CDATA[
<?php
if(!isset($PHP_AUTH_USER)) {
header("WWW-Authenticate: Basic realm=\"Azonosts indoka\"");
header("HTTP/1.0 401 Unauthorized");
echo "Ez jelenik meg, ha a Cancel gombot nyomja a felhasznl\n";
exit;
} else {
echo "<p>Hell $PHP_AUTH_USER.</p>";
echo "<p>A megadott jelszavad: $PHP_AUTH_PW.</p>";
}
?>
]]>
</programlisting>
</example>
</para>
<note>
<title>Megjegyzs</title>
<para>
Vigyzz a HTTP fejlcek rsakor! A maximlis kompatibilits elrshez
a "Basic" kulcsszt nagy B betvel kezdd, a "realm" rszt mindenkppen tedd
idzjelbe (s nem aposztrfok kz)! Vgl pontosan egy szkzt hagyj
ki a "401" eltt a "HTTP/1.0 401" fejlc sorban.
</para>
</note>
<para>
Egy vals esetben persze nem a $PHP_AUTH_USER s
$PHP_AUTH_PW kirsa az elrni kvnt cl, gy
ltalban a usernv s jelsz ellenrzse kvetkezik.
Termszetesen lehetsg van ezt egy adatbzis lekrdezssel megoldani,
vagy egy dbm fjlban utnanzni a szksges adatoknak.
</para>
<para>
Figyelj a hibs Internet Explorer bngszkre, amik nem fogadjk
el tetszleges sorrendben a HTTP fejlceket. A tesztek azt
mutatjk, hogy a <emphasis>WWW-Authenticate</emphasis> elkldse
a <literal>HTTP/1.0 401</literal> eltt megoldja a problmt.
</para>
<simpara>
Mivel a hagyomnyos HTTP azonosts sorn a jelsz rejtett
az elrt szkript eltt, a PHP nem lltja be a PHP_AUTH vltozkat
ha az adott file-ra a hagyomnyos azonosts is engedlyezett,
s gy nem derthet ki a user jelszava. Ebben az esetben
a $REMOTE_USER vltoz tartalmazza a mr azonostott felhasznl
nevt.
</simpara>
<note>
<title>Belltsi megjegyzs</title>
<para>
A PHP az <literal>AuthType</literal> direktva meglte alapjn
dnti el, hogy rajta kvlll azonosts trtnik-e.
Figyelj ennek a direktvnak az elkerlsre abban a krnyezetben,
ahol a PHP-t szeretnd hasznlni azonostsok kezelsre (klnben
minden azonostsi prblkozs sikertelen lesz).
</para>
</note>
<simpara>
Vedd szre, hogy ez nem kszbli ki azt a problmt,
hogy ms nem azonosts-kteles URL cmeken lv
szkriptek ugyanazon a szerveren megszerezzk a jelszavakat
az azonostott URL-ekrl.
</simpara>
<simpara>
A Netscape Navigator s Internet Explorer bngszk trlni fogjk
a bngsz adott oldalhoz tartoz azonostsi trt (authentication cache),
amennyiben egy 401-es szerver zenetet kapnak. Ez gyakorlatilag
kilpteti a user-t, ami azt jelenti, hogy legkzelebb ismt meg kell
adnia a nevt s jelszavt. Idnknt ezt arra hasznljk, hogy
lejrati idt rendelve a belpsekhez egy id utn megszntessk
azokat, vagy egy kilps gombot biztostsanak.</simpara>
<simpara></simpara>
<example>
<title>HTTP azonostsi plda, ami j nevet s jelszt kr</title>
<programlisting role="php">
<![CDATA[
<?php
function azonositas() {
header( "WWW-Authenticate: Basic realm=\"Azonostsi Rendszer Teszt\"");
header( "HTTP/1.0 401 Unauthorized");
echo "rvnyes nevet s jelszt kell megadnod, hogy elrd ezt a szolgltatst!\n";
exit;
}
if(!isset($PHP_AUTH_USER) || ($JartMarItt == 1 && !strcmp($RegiUser, $PHP_AUTH_USER))) {
azonositas();
}
else {
echo "<p>Hell: $PHP_AUTH_USER<br>";
echo "Rgebben: $RegiUser";
echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
echo "<input type=\"hidden\" name=\"JartMarItt\" value=\"1\">\n";
echo "<input type=\"hidden\" name=\"RegiUser\" value=\"$PHP_AUTH_USER\">\n";
echo "<input type=\"submit\" value=\"jraazonosts\">\n";
echo "</form></p>\n";
}
?>
]]>
</programlisting>
</example>
<simpara>
A HTTP Basic azonostsi standard nem kveteli meg ezt a
viselkedst a bngszk rszrl, teht ne pts r!
Lynx-el vgzett tesztek azt mutattk, hogy a Lynx nem
trli az azonostsi bizonytvnyokat a 401-es szerver
vlasz hatsra, teht egy back s forward lpssel
ismt megnylik az oldal, feltve, hogy az azonostsi
felttelek nem vltoztak. Ellenben a felhasznl megnyomhatja
a '_' billentyt, hogy trlje az azonostsi informcikat.
</simpara>
<simpara>
Szintn fontos megjegyezni, hogy ez a mdszer nem vezet
eredmnyre, ha Microsoft IIS szervert hasznlsz CGI
md PHP-val, az IIS korltozsai miatt.
</simpara>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|