cvs: phpdoc /en/security magicquotes.xml

From: Date: Tue, 07 Sep 2004 17:20:21 +0000
Subject: cvs: phpdoc /en/security magicquotes.xml
Groups: php.doc 
Request: Send a blank email to phpdoc+get-969363865@lists.php.net to get a copy of this message
philip Tue Sep 7 13:20:21 2004 EDT Modified files: /phpdoc/en/security magicquotes.xml Log: Rewrote and expanded text, fixed build, implemented simplesect instead of sect1 (all this belongs one one page), and used itemized lists.

http://cvs.php.net/diff.php/phpdoc/en/security/magicquotes.xml?r1=1.2&r2=1.3&ty=u Index: phpdoc/en/security/magicquotes.xml diff -u phpdoc/en/security/magicquotes.xml:1.2 phpdoc/en/security/magicquotes.xml:1.3 --- phpdoc/en/security/magicquotes.xml:1.2 Tue Sep 7 11:11:46 2004 +++ phpdoc/en/security/magicquotes.xml Tue Sep 7 13:20:21 2004 @@ -1,80 +1,158 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- $Revision: 1.2 $ --> +<!-- $Revision: 1.3 $ --> <chapter id="security.magicquotes"> <title>Magic Quotes</title> <para> - Magic Quotes is a process which automatically escapes all incoming data to a PHP script. + Magic Quotes is a process that automagically escapes incoming data to the + PHP script. It's preferred to code with magic quotes off and to instead + escape the data at runtime, as needed. </para> - <warning> - <para> - You should NOT rely on this feature. It is strongly prefered to turn this off, and deal with - user input properly. - </para> - </warning> - <sect1 id="security.magicquotes.what"> + <simplesect id="security.magicquotes.what"> <title>What are Magic Quotes</title> <para> - When on, all <literal>'</literal> (single-quote), <literal>"</literal> (double quote), - <literal>\</literal> (backslash) and <literal>NULL</literal> characters are escaped with a - backslash automatically. - </para> - <para> - Magic Quotes has 3 Modes of operation. - </para> - <para> - <link linkend="ini.magic_quotes_gpc">magic_quotes_gpc</link>. This affects GET, POST and COOKIE - data. This information is populated by the end users of the script. - </para> - <para> - <link linkend="ini.magic_quotes_runtime">magic_quotes_runtime</link>. If enabled, most functions - that return data from any sort of external source including databases and text files will have - quotes escaped with a backslash. - </para> - <para> - <link linkend="ini.magic_quotes_sybase">magic_quotes_sybase</link>. If enabled, a single-quote - is escaped with a single-quote instead of a backslash. - </para> - <para> - This setting will completely override magic_quotes_gpc. Having both directives enabled means - only single quotes are escaped as <literal>''</literal>. Double quotes, backslashes and NULL's - will remain untouched and unescaped. - </para> - </sect1> + When on, all <literal>'</literal> (single-quote), <literal>"</literal> + (double quote), <literal>\</literal> (backslash) and <literal>NULL</literal> + characters are escaped with a backslash automatically. This is identical + to what <function>addslashes</function> does. + </para> + <para> + There are three magic quote directives: + </para> + <itemizedlist> + <listitem> + <simpara> + <link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link> + </simpara> + <simpara> + Affects HTTP Request data (GET, POST, and COOKIE). Cannot be set at + runtime, and defaults to <emphasis>on</emphasis> in PHP. + </simpara> + <simpara> + See also <function>get_magic_quotes_gpc</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <link linkend="ini.magic-quotes-runtime">magic_quotes_runtime</link> + </simpara> + <simpara> + If enabled, most functions that return data from an external source, + including databases and text files, will have quotes escaped with a + backslash. Can be set at runtime, and defaults to <emphasis>on</emphasis> + in PHP. + </simpara> + <simpara> + See also <function>set_magic_quotes_runtime</function> and + <function>get_magic_quotes_runtime</function>. + </simpara> + </listitem> + <listitem> + <simpara> + <link linkend="ini.magic-quotes-sybase">magic_quotes_sybase</link> + </simpara> + <simpara> + If enabled, a single-quote is escaped with a single-quote instead of a + backslash. If on, it completely overrides + <link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link>. Having + both directives enabled means only single quotes are escaped as + <literal>''</literal>. Double quotes, backslashes and NULL's will + remain untouched and unescaped. + </simpara> + <simpara> + See also <function>ini_get</function> for retrieving its value. + </simpara> + </listitem> + </itemizedlist> + </simplesect> - <sect1 id="security.magicquotes.why"> + <simplesect id="security.magicquotes.why"> <title>Why use Magic Quotes</title> - <para> - Magic-quotes were implemented in PHP to reduce code written by beginners from being dangerous. - </para> - <para> - Magic Quotes are enabled by default. - </para> - <para> - If you disable magic quotes, you must be very careful to protect yourself from - <link linkend="security.database.sql-injection">SQL Injection Attacks</link>. - </para> - </sect1> + <itemizedlist> + <listitem> + <simpara> + Useful for beginners + </simpara> + <simpara> + Magic quotes are implemented in PHP to help code written by beginners + from being dangerous. Although + <link linkend="security.database.sql-injection">SQL Injection</link> + is still possible with magic quotes on, the risk is reduced. + </simpara> + </listitem> + <listitem> + <simpara> + Convenience + </simpara> + <simpara> + For inserting data into a database, magic quotes essentially runs + <function>addslashes</function> on all Get, Post, and Cookie data, + and does so automagically. + </simpara> + </listitem> + </itemizedlist> + </simplesect> - <sect1 id="security.magicquotes.whynot"> + <simplesect id="security.magicquotes.whynot"> <title>Why not to use Magic Quotes</title> - <para> - Portability, performance, etc. - </para> - </sect1> + <itemizedlist> + <listitem> + <simpara> + Portability + </simpara> + <simpara> + Assuming it to be on, or off, affects portability. Use + <function>get_magic_quotes_gpc</function> to check for this, and code + accordingly. + </simpara> + </listitem> + <listitem> + <simpara> + Performance + </simpara> + <simpara> + Because not every piece of escaped data is inserted into a + database, there is a performance loss for escaping all this data. + Simply calling on the escaping functions (like + <function>addslashes</function>) at runtime is more efficient. + </simpara> + <simpara> + Although <filename>php.ini-dist</filename> enables these directives + by default, <filename>php.ini-recommended</filename> disables it. + This recommendation is mainly due to performance reasons. + </simpara> + </listitem> + <listitem> + <simpara> + Inconvenience + </simpara> + <simpara> + Because not all data needs escaping, it's often annoying to see escaped + data where it shouldn't be. For example, emailing from a form, and + seeing a bunch of \' within the email. To fix, this may require + excessive use of <function>stripslashes</function>. + </simpara> + </listitem> + </itemizedlist> + </simplesect> - <sect1 id="security.magicquotes.disabling"> + <simplesect id="security.magicquotes.disabling"> <title>Disabling Magic Quotes</title> <para> - Optimally, Magic Quotes should be disabled server side. + The <link linkend="ini.magic_quotes_gpc">magic_quotes_gpc</link> + directive may only be disabled at the system level, and not at + runtime. In otherwords, use of <function>ini_set</function> is not + an option. </para> <para> <example> <title>Disabling magic quotes server side</title> <para> - Set the value of magic_quotes_gpc and magic_quotes_runtime to Off in the - php.ini. + An example that sets the value of these directives to + <literal>Off</literal> in &php.ini;. For additional details, read the + manual section titled <link linkend="configuration.changes">How to + change configuration settings</link>. </para> <screen> <![CDATA[ @@ -92,21 +170,22 @@ ]]> </screen> <para> - If you do not have access to the server config, you can put this - line in a ".htaccess" file. This will disable magic_quotes. + If access to the server configuration is unavilable, use of + <filename>.htaccess</filename> is also an option. For example: </para> <screen> <![CDATA[ -php_value magic_quotes_gpc Off +php_flag magic_quotes_gpc Off ]]> </screen> </example> </para> <para> - In the interests of writing portable code (code that works - in any environment), or, if you do not have access to change - php.ini, you may wish to disable the effects of magic quotes - on a per-script basis. + In the interest of writing portable code (code that works in any + environment), like if setting at the server level is not possible, + here's an example to disable <link linkend="ini.magic-quotes-gpc"> + magic_quotes_gpc</link> at runtime. This method is inefficient so + it's preferred to instead set the appropriate directives elsewhere. </para> <para> <example> @@ -133,8 +212,7 @@ </programlisting> </example> </para> - - </sect1> + </simplesect> </chapter>
« previous php.doc (#969363865) next »