authentication_documentation.html.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 333 行

SVN-BASE
333
字号
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Documentation Simple Test : tester l'authentification</title><link rel="stylesheet" type="text/css" href="docs.css" title="Styles"></head><body><div class="menu_back"><div class="menu"><a href="index.html">SimpleTest</a>                |                <a href="overview.html">Overview</a>                |                <a href="unit_test_documentation.html">Unit tester</a>                |                <a href="group_test_documentation.html">Group tests</a>                |                <a href="mock_objects_documentation.html">Mock objects</a>                |                <a href="partial_mocks_documentation.html">Partial mocks</a>                |                <a href="reporter_documentation.html">Reporting</a>                |                <a href="expectation_documentation.html">Expectations</a>                |                <a href="web_tester_documentation.html">Web tester</a>                |                <a href="form_testing_documentation.html">Testing forms</a>                |                <a href="authentication_documentation.html">Authentication</a>                |                <a href="browser_documentation.html">Scriptable browser</a></div></div><h1>Documentation sur l'authentification</h1>        This page...        <ul><li>            Passer au travers d'une <a href="#basique">authentification HTTP basique</a>        </li><li>            Tester l'<a href="#cookies">authentification bas茅e sur des cookies</a>        </li><li>            G茅rer les <a href="#session">sessions du navigateur</a> et les timeouts        </li></ul><div class="content">                    <p>                Un des secteurs 脿 la fois d茅licat et important lors d'un test                de site web reste la s茅curit茅. Tester ces sch茅mas est au coeur                des objectifs du testeur web de SimpleTest.            </p>                <p><a class="target" name="basique"><h2>Authentification HTTP basique</h2></a></p>            <p>                Si vous allez chercher une page web prot茅g茅e                par une authentification basique, vous h茅riterez d'une ent锚te 401.                Nous pouvons repr茅senter ceci par ce test...<pre>class AuthenticationTest extends WebTestCase {<strong>    function test401Header() {        $this-&gt;get('http://www.lastcraft.com/protected/');        $this-&gt;showHeaders();    }</strong>}</pre>                Ce qui nous permet de voir les ent锚tes re莽ues...                <div class="demo">                    <h1>File test</h1><pre style="background-color: lightgray; color: black">HTTP/1.1 401 Authorization RequiredDate: Sat, 18 Sep 2004 19:25:18 GMTServer: Apache/1.3.29 (Unix) PHP/4.3.4WWW-Authenticate: Basic realm="SimpleTest basic authentication"Connection: closeContent-Type: text/html; charset=iso-8859-1</pre>                    <div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete.                    <strong>0</strong> passes, <strong>0</strong> fails and <strong>0</strong> exceptions.</div>                </div>                Sauf que nous voulons 茅viter l'inspection visuelle,                on souhaite que SimpleTest puisse nous dire si oui ou non                la page est prot茅g茅e. Voici un test en profondeur sur nos ent锚tes...<pre>class AuthenticationTest extends WebTestCase {    function test401Header() {        $this-&gt;get('http://www.lastcraft.com/protected/');<strong>        $this-&gt;assertAuthentication('Basic');        $this-&gt;assertResponse(401);        $this-&gt;assertRealm('SimpleTest basic authentication');</strong>    }}</pre>                N'importe laquelle de ces assertions suffirait,                tout d茅pend de la masse de d茅tails que vous souhaitez voir.            </p>            <p>                La plupart du temps, nous ne souhaitons pas tester                l'authentification en elle-m锚me, mais plut么t                les pages prot茅g茅es par cette authentification.                D猫s que la tentative d'authentification est re莽ue,                nous pouvons y r茅pondre 脿 l'aide d'une r茅ponse d'authentification :<pre>class AuthenticationTest extends WebTestCase {    function testAuthentication() {        $this-&gt;get('http://www.lastcraft.com/protected/');<strong>        $this-&gt;authenticate('Me', 'Secret');</strong>        $this-&gt;assertTitle(...);    }}</pre>                Le nom d'utilisateur et le mot de passe seront d茅sormais                envoy茅s 脿 chaque requ锚te vers ce r茅pertoire                et ses sous-r茅pertoires.                En revanche vous devrez vous authentifier 脿 nouveau                si vous sortez de ce r茅pertoire mais SimpleTest est assez                intelligent pour fusionner les sous-r茅pertoires dans un m锚me domaine.            </p>            <p>                Vous pouvez gagner une ligne en d茅finissant                l'authentification au niveau de l'URL...<pre>class AuthenticationTest extends WebTestCase {    function testCanReadAuthenticatedPages() {        $this-&gt;get('http://<strong>Me:Secret@</strong>www.lastcraft.com/protected/');        $this-&gt;assertTitle(...);    }}</pre>                Si votre nom d'utilisateur ou mot de passe comporte                des caract猫res sp茅ciaux, alors n'oubliez pas de les encoder,                sinon la requ锚te ne sera pas analys茅e correctement.                De plus cette ent锚te ne sera pas envoy茅e aux                sous requ锚tes si vous la d茅finissez avec une URL absolue.                Par contre si vous naviguez avec des URL relatives,                l'information d'authentification sera pr茅serv茅e.            </p>            <p>                 Pour l'instant, seule l'authentification de base est impl茅ment茅e                 et elle n'est r茅ellement fiable qu'en tandem avec une connexion HTTPS.                 C'est g茅n茅ralement suffisant pour prot茅ger                 le serveur test茅 des regards malveillants.                 Les authentifications Digest et NTLM pourraient 锚tre ajout茅es prochainement.            </p>                <p><a class="target" name="cookies"><h2>Cookies</h2></a></p>            <p>                L'authentification de base ne donne pas assez de contr么le                au d茅veloppeur Web sur l'interface utilisateur.                Il y a de forte chance pour que cette fonctionnalit茅                soit cod茅e directement dans l'architecture web                脿 grand renfort de cookies et de timeouts compliqu茅s.            </p>            <p>                Commen莽ons par un simple formulaire de connexion...<pre>&lt;form&gt;    Username:    &lt;input type="text" name="u" value="" /&gt;&lt;br /&gt;    Password:    &lt;input type="password" name="p" value="" /&gt;&lt;br /&gt;    &lt;input type="submit" value="Log in" /&gt;&lt;/form&gt;</pre>                Lequel doit ressembler 脿...            </p>            <p>                <form class="demo">                    Username:                    <input type="text" name="u" value=""><br>                    Password:                    <input type="password" name="p" value=""><br>                    <input type="submit" value="Log in">                </form>            </p>            <p>                Supposons que, durant le chargement de la page,                un cookie ait 茅t茅 inscrit avec un num茅ro d'identifiant de session.                Nous n'allons pas encore remplir le formulaire,                juste tester que nous pistons bien l'utilisateur.                Voici le test...<pre>class LogInTest extends WebTestCase {    function testSessionCookieSetBeforeForm() {        $this-&gt;get('http://www.my-site.com/login.php');<strong>        $this-&gt;assertCookie('SID');</strong>    }}</pre>                Nous nous contentons ici de v茅rifier que le cookie a bien 茅t茅 d茅fini.                Etant donn茅 que sa valeur est plut么t 茅nigmatique,                elle ne vaut pas la peine d'锚tre test茅e.            </p>            <p>                Le reste du test est le m锚me que dans n'importe quel autre formulaire,                mais nous pourrions souhaiter nous assurer                que le cookie n'a pas 茅t茅 modifi茅 depuis la phase de connexion.                Voici comment cela pourrait 锚tre test茅 :<pre>class LogInTest extends WebTestCase {    ...    function testSessionCookieSameAfterLogIn() {        $this-&gt;get('http://www.my-site.com/login.php');<strong>        $session = $this-&gt;getCookie('SID');        $this-&gt;setField('u', 'Me');        $this-&gt;setField('p', 'Secret');        $this-&gt;clickSubmit('Log in');        $this-&gt;assertWantedPattern('/Welcome Me/');        $this-&gt;assertCookie('SID', $session);</strong>    }}</pre>                Ceci confirme que l'identifiant de session                est identique avant et apr猫s la connexion.            </p>            <p>                Nous pouvons m锚me essayer de duper notre propre syst猫me                en cr茅ant un cookie arbitraire pour se connecter...<pre>class LogInTest extends WebTestCase {    ...    function testSessionCookieSameAfterLogIn() {        $this-&gt;get('http://www.my-site.com/login.php');<strong>        $this-&gt;setCookie('SID', 'Some other session');        $this-&gt;get('http://www.my-site.com/restricted.php');</strong>        $this-&gt;assertWantedPattern('/Access denied/');    }}</pre>                Votre site est-il prot茅g茅 contre ce type d'attaque ?            </p>                <p><a class="target" name="session"><h2>Sessions de navigateur</h2></a></p>            <p>                Si vous testez un syst猫me d'authentification,                la reconnexion par un utilisateur est un point sensible.                Essayons de simuler ce qui se passe dans ce cas :<pre>class LogInTest extends WebTestCase {    ...    function testLoseAuthenticationAfterBrowserClose() {        $this-&gt;get('http://www.my-site.com/login.php');        $this-&gt;setField('u', 'Me');        $this-&gt;setField('p', 'Secret');        $this-&gt;clickSubmit('Log in');        $this-&gt;assertWantedPattern('/Welcome Me/');<strong>                $this-&gt;restart();        $this-&gt;get('http://www.my-site.com/restricted.php');        $this-&gt;assertWantedPattern('/Access denied/');</strong>    }}</pre>                La m茅thode <span class="new_code">WebTestCase::restart()</span> pr茅serve les cookies                dont le timeout a expir茅, mais conserve les cookies temporaires ou expir茅s.                Vous pouvez sp茅cifier l'heure et la date de leur r茅activation.            </p>            <p>                L'expiration des cookies peut 锚tre un probl猫me.                Si vous avez un cookie qui doit expirer au bout d'une heure,                nous n'allons pas mettre le test en veille en attendant                que le cookie expire...            </p>            <p>                Afin de provoquer leur expiration,                vous pouvez dater manuellement les cookies,                avant le d茅but de la session.<pre>class LogInTest extends WebTestCase {    ...    function testLoseAuthenticationAfterOneHour() {        $this-&gt;get('http://www.my-site.com/login.php');        $this-&gt;setField('u', 'Me');        $this-&gt;setField('p', 'Secret');        $this-&gt;clickSubmit('Log in');        $this-&gt;assertWantedPattern('/Welcome Me/');        <strong>        $this-&gt;ageCookies(3600);</strong>        $this-&gt;restart();        $this-&gt;get('http://www.my-site.com/restricted.php');        $this-&gt;assertWantedPattern('/Access denied/');    }}</pre>                Apr猫s le red茅marrage, les cookies seront plus vieux                d'une heure et que tous ceux dont la date d'expiration                sera pass茅e auront disparus.            </p>            </div>        References and related information...        <ul><li>            La page du projet SimpleTest sur <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.        </li><li>            La page de t茅l茅chargement de SimpleTest sur <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.        </li><li>            <a href="http://simpletest.org/api/">L'API du d茅veloppeur pour SimpleTest</a> donne tous les d茅tails sur les classes et les assertions disponibles.        </li></ul><div class="menu_back"><div class="menu"><a href="index.html">SimpleTest</a>                |                <a href="overview.html">Overview</a>                |                <a href="unit_test_documentation.html">Unit tester</a>                |                <a href="group_test_documentation.html">Group tests</a>                |                <a href="mock_objects_documentation.html">Mock objects</a>                |                <a href="partial_mocks_documentation.html">Partial mocks</a>                |                <a href="reporter_documentation.html">Reporting</a>                |                <a href="expectation_documentation.html">Expectations</a>                |                <a href="web_tester_documentation.html">Web tester</a>                |                <a href="form_testing_documentation.html">Testing forms</a>                |                <a href="authentication_documentation.html">Authentication</a>                |                <a href="browser_documentation.html">Scriptable browser</a></div></div><div class="copyright">            Copyright<br>Marcus Baker 2006        </div></body></html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?