sas Tue Dec 17 05:17:30 2002 EDT Modified files: /phpdoc/en/reference/session reference.xml Log: remove the unfounded paranoia from the documentation. also improve some paragraphs further.
Index: phpdoc/en/reference/session/reference.xml diff -u phpdoc/en/reference/session/reference.xml:1.25 phpdoc/en/reference/session/reference.xml:1.26 --- phpdoc/en/reference/session/reference.xml:1.25 Tue Dec 3 13:21:04 2002 +++ phpdoc/en/reference/session/reference.xml Tue Dec 17 05:17:29 2002 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- $Revision: 1.25 $ --> +<!-- $Revision: 1.26 $ --> <reference id="ref.session"> <title>Session handling functions</title> <titleabbrev>Sessions</titleabbrev> @@ -59,38 +59,29 @@ <section id="session.security"> <title>Sessions and security</title> <para> - Using sessions, does not mean, you can be absolutely sure, that - the session data can only be viewed by that user. This is important - to keep in mind, when storing and displaying sensitive - information. When storing data into a session, one should always - ask themselves, what the damage is, when somebody else views that - information, or how your application is affected when this session - is actually somebody else. - </para> - <para> - For instance, if somebody else takes a session, can he then post - a message in a forum, as that user and how big of a problem is - that? Or perhaps he can view what the original user was thinking - of ordering, because he gets access to that user's shopping cart. - Obviously for a flowershop, this is less dramatic, than for a - pharmacy. - </para> - <para> - Therefore, when dealing with sensitive information, there should - always be additional methods to decide whether it is a valid - session. Sessions are not reliable as a secure authentication - mechanism. - </para> - <para> - Sessions rely on the session ID, meaning one can 'steal' a - session, by stealing the session ID. This can be made harder, by - using a cookie specifically a session cookie, but does not in any - way make it impossible and still relies on the user closing all - browser windows, to expire the session cookie. - Besides that, even session cookies can be sniffed on a network or - logged by a proxyserver. + The session module cannot guarantee that the information you store + in a session is only viewed by the user who created the session. You need + to take additional measures to actively protect the integrity of the + session, depending on the value associated with it. + </para> + <para> + Assess the importance of the data carried by your sessions and deploy + addditional protections -- this usually comes at a price, reduced + convenience for the user. For example, if you want to protect users from + simple social engineering tactics, you need to enable + session.use_only_cookies. In that case, cookies must be enabled + unconditionally. + </para> + <para> + There are several ways to leak an existing session id to third parties. + A leaked session id enables the third party to access all resources which + are associated with a specific id. First, URLs carrying session ids. If + you link to an external site, the URL including the session id might be + stored in the external site's referrer logs. Second, a more active + attacker might listen to your network traffic. If it is not encrypted, + session ids will flow in plain text over the network. The solution here + is to implement SSL on your server and make it mandatory for users. </para> - </section> <section id="session.requirements"> &reftitle.required; @@ -100,7 +91,11 @@ Optionally you can use shared memory allocation (mm), developed by Ralf S. Engelschall, for session storage. You have to download <ulink url="&url.mm;">mm</ulink> and install it. This option is not - available for Windows platforms. + available for Windows platforms. Note that the session storage module + for mm does not guarantee that concurrent accesses to the same session + are properly locked. It might be more appropiate to use a shared memory + based filesystem (such as tmpfs on Solaris/Linux, or /dev/md on BSD) to + store sessions in files, because they are properly locked. </para> </note> </section> @@ -265,18 +260,16 @@ linkend="ini.register-globals"><literal>register_globals</literal></link> is enabled, then the global variables and the <varname>$_SESSION</varname> entries will automatically reference the - same value for session variables which were registered in prior session - instances. + same values which were registered in the prior session instance. </para> <para> - Additionally, if you register a new session variable by using - <function>session_register</function>, the entry in the global scope - and the <varname>$_SESSION</varname> entry will not reference the same - value until the next <function>session_start</function> (this - applies to PHP 4.2 and before only). I.e. a modification to the - global variable will not be reflected by the - <varname>$_SESSION</varname> entry. This is unlikely to matter - in practice and has been corrected in PHP 4.3. + There is a defect in PHP 4.2.3 and earlier. If you register a new + session variable by using <function>session_register</function>, the + entry in the global scope and the <varname>$_SESSION</varname> entry will + not reference the same value until the next + <function>session_start</function>. I.e. a modification to the newly + registered global variable will not be reflected by the + <varname>$_SESSION</varname> entry. This has been corrected in PHP 4.3. </para> </section> @@ -299,26 +292,30 @@ </para> <para> The session module supports both methods. Cookies are optimal, but - since they are not reliable (clients are not bound to accept - them), we cannot rely on them. The second method embeds the - session id directly into URLs. + because they are not always available, we also provide an alternative + way. The second method embeds the session id directly into URLs. </para> <para> - PHP is capable of doing this transparently if compiled with <link - linkend="install.configure.enable-trans-sid"> - <literal>--enable-trans-sid</literal></link>. This option is always - enabled in PHP 4.2 and later. If you enable this option, relative URIs - will be changed to contain the session id automatically. Alternatively, - you can use the constant <literal>SID</literal> which is defined, if the - client did not send the appropriate cookie. <literal>SID</literal> is - either of the form <literal>session_name=session_id</literal> or is an - empty string. + PHP is capable of transforming links transparently. Unless you are using + PHP 4.2 or later, you need to enable it manually when building PHP. + Under UNIX, pass <link linkend="install.configure.enable-trans-sid"> + <literal>--enable-trans-sid</literal></link> to configure. If this build + option and the run-time option session.use_trans_sid are enabled, + relative URIs will be changed to contain the session id automatically. <note> <para> The <link linkend="ini.arg-separator.output">arg_separator.output</link> - &php.ini; directive allows to customize the argument seperator. + &php.ini; directive allows to customize the argument seperator. For full + XHTML conformance, specify &amp; there. </para> </note> + </para> + <para> + Alternatively, you can use the constant <literal>SID</literal> which is + always defined. If the client did not send an appropriate session + cookie, it has the form <literal>session_name=session_id</literal>. + Otherwise, it expands to an empty string. Thus, you can embed it + unconditionally into URLs. </para> <para> The following example demonstrates how to register a variable, and
-- PHP Documentation Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php