cvs: phpdoc-ru /reference/mysql/functions mysql-real-escape-string.xml
| From: | Antony Dovgal | Date: | Thu, 08 Sep 2005 17:04:41 +0000 |
| Subject: | cvs: phpdoc-ru /reference/mysql/functions mysql-real-escape-string.xml | ||
| Groups: | php.doc.ru | ||
| Request: | Send a blank email to doc-ru+get-693@lists.php.net to get a copy of this message | ||
tony2001 Thu Sep 8 13:04:41 2005 EDT
Modified files:
/phpdoc-ru/reference/mysql/functions mysql-real-escape-string.xml
Log:
commit updated translation by Romik
http://cvs.php.net/diff.php/phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml?r1=1.3&r2=1.4&ty=u Index: phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml diff -u phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml:1.3 phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml:1.4 --- phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml:1.3 Sun Mar 6 11:44:27 2005 +++ phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml Thu Sep 8 13:04:40 2005 @@ -1,81 +1,236 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- $Revision: 1.3 $ --> -<!-- EN-Revision: 1.5 Maintainer: lovchy Status: ready --> -<!-- splitted from ./en/functions/mysql.xml, last change in rev 1.100 --> - <refentry id="function.mysql-real-escape-string"> - <refnamediv> - <refname>mysql_real_escape_string</refname> - <refpurpose> - ÐкÑаниÑÑÐµÑ ÑпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² ÑÑÑоке, иÑполÑзÑемой в SQL-запÑоÑе, пÑÐ¸Ð½Ð¼Ð¸Ð¼Ð°Ñ Ð²Ð¾ внимание кодиÑÐ¾Ð²ÐºÑ ÑоединениÑ. - </refpurpose> - </refnamediv> - <refsect1> - <title>ÐпиÑание</title> - <methodsynopsis> - <type>string</type><methodname>mysql_real_escape_string</methodname> - <methodparam><type>string</type><parameter>unescaped_string</parameter></methodparam> - <methodparam choice="opt"><type>resource</type><parameter>link_identifier</parameter></methodparam> - </methodsynopsis> - <para> - ФÑнкÑÐ¸Ñ ÑкÑаниÑÑÐµÑ ÑпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑÑÑоки - <parameter>unescaped_string</parameter>, пÑÐ¸Ð½Ð¸Ð¼Ð°Ñ Ð²Ð¾ внимание кодиÑÐ¾Ð²ÐºÑ - ÑоединениÑ, Ñаким обÑазом, ÑÑо ÑезÑлÑÑÐ°Ñ Ð¼Ð¾Ð¶Ð½Ð¾ безопаÑно - иÑполÑзоваÑÑ Ð² SQL-запÑоÑе в ÑÑнкÑи - <function>mysql_query</function>. - </para> - <note> - <simpara> - <function>mysql_real_escape_string</function> не ÑкÑаниÑÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ - <literal>%</literal> и <literal>_</literal>. - </simpara> - </note> - <para> - <example> - <title>ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ <function>mysql_real_escape_string</function></title> - <programlisting role="php"> -<![CDATA[ -<?php -$item = "Zak's and Derick's Laptop"; -$escaped_item = mysql_real_escape_string($item); -printf ("Escaped string: %s\n", $escaped_item); -?> -]]> - </programlisting> - <para> - ÐÑÑеопиÑаннÑй пÑÐ¸Ð¼ÐµÑ Ð²ÑдаÑÑ ÑледÑÑÑий ÑезÑлÑÑаÑ: - </para> - <screen> -<![CDATA[ -Escaped string: Zak\'s and Derick\'s Laptop -]]> - </screen> - </example> - </para> - <para> - См. Ñакже - <function>mysql_escape_string</function> и - <function>mysql_character_set_name</function>. - </para> - </refsect1> - </refentry> - -<!-- 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 ---> +<?xml version="1.0" encoding="UTF-8"?> +<!-- $Revision: 1.4 $ --> +<refentry id="function.mysql-real-escape-string"> + <refnamediv> + <refname>mysql_real_escape_string</refname> + <refpurpose> + ÐкÑаниÑÑÐµÑ ÑпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² ÑÑÑÐ¾ÐºÐ°Ñ Ð´Ð»Ñ + иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² вÑÑажениÑÑ SQL + </refpurpose> + </refnamediv> + + <refsect1 role="description"> + &reftitle.description; + <methodsynopsis> + <type>string</type><methodname>mysql_real_escape_string</methodname> + <methodparam><type>string</type><parameter>unescaped_string</parameter></methodparam> + <methodparam choice="opt"><type>resource</type><parameter>link_identifier</parameter></methodparam> + </methodsynopsis> + <para> + ÐкÑаниÑÑÐµÑ ÑпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² <parameter>unescaped_string</parameter>, + пÑÐ¸Ð½Ð¸Ð¼Ð°Ñ Ð²Ð¾ внимание кодиÑÐ¾Ð²ÐºÑ ÑоединениÑ, Ñаким обÑазом, ÑÑо ÑезÑлÑÑÐ°Ñ + можно безопаÑно иÑполÑзоваÑÑ Ð² SQL-запÑоÑе в ÑÑнкÑи <function>mysql_query</function>. + ÐÑли вÑÑавлÑÑÑÑÑ Ð±Ð¸Ð½Ð°ÑнÑе даннÑе, Ñо к ним Ñак же Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пÑименÑÑÑ ÑÑÑ ÑÑнкÑиÑ. + </para> + <para> + <function>mysql_real_escape_string</function> вÑзÑÐ²Ð°ÐµÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑеÑнÑÑ ÑÑнкÑÐ¼Ñ MySQL + mysql_real_escape_string, коÑоÑÐ°Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ Ð¾Ð±ÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ Ðº ÑледÑÑÑим Ñимволам: + <literal>\x00</literal>, <literal>\n</literal>, + <literal>\r</literal>, <literal>\</literal>, <literal>'</literal>, + <literal>"</literal> and <literal>\x1a</literal>. + </para> + <para> + ÐÑа ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° вÑегда (за неÑколÑкими иÑклÑÑениÑми) иÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ñого, + ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÐ·Ð¾Ð¿Ð°ÑиÑÑ Ð´Ð°Ð½Ð½Ñе, вÑÑавлÑемÑе в запÑÐ¾Ñ Ð¿ÐµÑед оÑпÑавкой его в MySQL. + </para> + </refsect1> + + <refsect1 role="parameters"> + &reftitle.parameters; + <para> + <variablelist> + <varlistentry> + <term><parameter>unescaped_string</parameter></term> + <listitem> + <para> + СÑÑока, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ ÑкÑаниÑована. + </para> + </listitem> + </varlistentry> + &mysql.linkid.description; + </variablelist> + </para> + </refsect1> + + <refsect1 role="returnvalues"> + &reftitle.returnvalues; + <para> + ÐозвÑаÑÐ°ÐµÑ ÑÑÑокÑ, в коÑоÑой ÑкÑаниÑÐ¾Ð²Ð°Ð½Ñ Ð²Ñе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе ÑимволÑ, + или &false; в ÑлÑÑае оÑибки. + </para> + </refsect1> + + <refsect1 role="examples"> + &reftitle.examples; + <para> + <example> + <title> + ÐÑоÑÑой пÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ + <function>mysql_real_escape_string</function> + </title> + <programlisting role="php"> +<![CDATA[ +<?php +// Connect +$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') + OR die(mysql_error()); + +// Query +$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", + mysql_real_escape_string($user), + mysql_real_escape_string($password)); +?> +]]> + </programlisting> + </example> + </para> + <para> + <example> + <title>ÐÑÐ¸Ð¼ÐµÑ Ð²Ð·Ð»Ð¾Ð¼Ð° Ñ Ð¸ÑполÑзованием SQL Injection</title> + <programlisting role="php"> +<![CDATA[ +<?php +// поÑÑлаем запÑоÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ Ð¸Ð¼Ñ Ð¸ паÑÐ¾Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ +$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'"; +mysql_query($query); + +// ÐÑ Ð½Ðµ никак пÑовеÑили пеÑеменнÑÑ $_POST['password'], +// а она Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑовÑем не Ñо, ÑÑо Ð¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¸. ÐапÑимеÑ: +$_POST['username'] = 'aidan'; +$_POST['password'] = "' OR ''='"; + +// поÑмоÑÑим, какой запÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑпÑавлен в MySQL: +echo $query; +?> +]]> + </programlisting> + <para> + ÐапÑоÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð¾ÑпÑавлен в MySQL: + </para> + <screen> +<![CDATA[ +SELECT * FROM users WHERE name='aidan' AND password='' OR ''='' +]]> + </screen> + <para> + ÐÑо Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ ÐºÐ¾Ð¼Ñ Ñгодно войÑи в ÑиÑÑÐµÐ¼Ñ Ð±ÐµÐ· паÑолÑ. + </para> + </example> + </para> + <para> + <example> + <title>ÐÑÑÑий ваÑÐ¸Ð°Ð½Ñ ÑоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа</title> + <para> + ÐÑименение <function>mysql_real_escape_string</function> к каждой пеÑеменной, + вÑÑавлÑемой в запÑоÑ, пÑедоÑвÑаÑÐ°ÐµÑ SQL Injection. ÐижеÑледÑÑÑий код ÑвлÑеÑÑÑ + наилÑÑÑим ваÑианÑом ÑоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов и не завиÑÐ¸Ñ Ð¾Ñ ÑÑÑановки + <link linkend="security.magicquotes">Magic Quotes</link>. + </para> + <programlisting role="php"> +<![CDATA[ +<?php +// ФÑнкÑÐ¸Ñ ÑкÑаниÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑеменнÑÑ +function quote_smart($value) +{ + // еÑли magic_quotes_gpc вклÑÑена - иÑполÑзÑем stripslashes + if (get_magic_quotes_gpc()) { + $value = stripslashes($value); + } + // ÐÑли пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ - ÑиÑло, Ñо ÑкÑаниÑоваÑÑ ÐµÑ Ð½Ðµ нÑжно + // еÑли Ð½ÐµÑ - Ñо окÑÑжем ÐµÑ ÐºÐ°Ð²ÑÑками, и ÑкÑаниÑÑем + if (!is_numeric($value)) { + $value = "'" . mysql_real_escape_string($value) . "'"; + } + return $value; +} + +// СоединÑемÑÑ +$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') + OR die(mysql_error()); + +// СоÑÑавлÑем безопаÑнÑй запÑÐ¾Ñ +$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s", + quote_smart($_POST['username']), + quote_smart($_POST['password'])); + +mysql_query($query); +?> +]]> + </programlisting> + <para> + ÐапÑоÑ, ÑоÑÑавленнÑй Ñаким обÑазом, бÑÐ´ÐµÑ Ð²Ñполнен без оÑибок, + и взлом Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ SQL Injection окажеÑÑÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶ÐµÐ½. + </para> + </example> + </para> + </refsect1> + + <refsect1 role="notes"> + &reftitle.notes; + <note> + <para> + ФÑнкÑÐ¸Ñ <function>mysql_real_escape_string</function> можно иÑполÑзоваÑÑ + ÑолÑко поÑле Ñого, как ÑÑÑановлено Ñоединение Ñ MySQL. РпÑоÑивном + ÑлÑÑае Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ð¾Ñибка ÑÑÐ¾Ð²Ð½Ñ <literal>E_WARNING</literal>, а ÑÑнкÑÐ¸Ñ + возвÑаÑÐ¸Ñ &false;. ÐÑли <parameter>link_identifier</parameter> не Ñказан, + иÑполÑзÑеÑÑÑ Ð¿Ð¾Ñледнее оÑкÑÑÑое Ñоединение. + </para> + </note> + <note> + <para> + ÐÑли <link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link> вклÑÑенÑ, + Ñо ÑнаÑала даннÑе ÑледÑÐµÑ Ð¾Ð±ÑабоÑаÑÑ ÑÑнкÑией <function>stripslashes</function>. + ÐÑли <function>mysql_real_escape_string</function> пÑименÑеÑÑÑ Ðº даннÑм, + коÑоÑÑе Ñже бÑли пÑоÑлеÑенÑ, Ñо в ÑезÑлÑÑаÑе ÑлеÑи в даннÑÑ Ð±ÑдÑÑ ÑдваиваÑÑÑÑ. + </para> + </note> + <note> + <para> + ÐÑли не полÑзоваÑÑÑÑ ÑÑой ÑÑнкÑией, Ñо запÑÐ¾Ñ ÑÑановиÑÑÑ ÑÑзвимÑм Ð´Ð»Ñ + <link linkend="security.database.sql-injection">взлома Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ SQL Injection</link>. + </para> + </note> + <note> + <simpara> + <function>mysql_real_escape_string</function> не ÑкÑаниÑÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ + <literal>%</literal> и <literal>_</literal>. ÐÑи знаки ÑвлÑÑÑÑÑ Ð¼Ð°Ñками + гÑÑпп Ñимволов в опеÑаÑоÑÐ°Ñ MySQL <literal>LIKE</literal>, + <literal>GRANT</literal> или <literal>REVOKE</literal>. + </simpara> + </note> + </refsect1> + + <refsect1 role="seealso"> + &reftitle.seealso; + <para> + <simplelist> + <member><function>mysql_client_encoding</function></member> + <member><function>addslashes</function></member> + <member><function>stripslashes</function></member> + <member>ÐиÑекÑива <link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link></member> + <member>ÐиÑекÑива <link linkend="ini.magic-quotes-runtime">magic_quotes_runtime</link></member> + </simplelist> + </para> + </refsect1> +</refentry> + +<!-- 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 +-->
http://cvs.php.net/diff.php/phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml?r1=1.3&r2=1.4&ty=u Index: phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml diff -u phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml:1.3 phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml:1.4 --- phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml:1.3 Sun Mar 6 11:44:27 2005 +++ phpdoc-ru/reference/mysql/functions/mysql-real-escape-string.xml Thu Sep 8 13:04:40 2005 @@ -1,81 +1,236 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- $Revision: 1.3 $ --> -<!-- EN-Revision: 1.5 Maintainer: lovchy Status: ready --> -<!-- splitted from ./en/functions/mysql.xml, last change in rev 1.100 --> - <refentry id="function.mysql-real-escape-string"> - <refnamediv> - <refname>mysql_real_escape_string</refname> - <refpurpose> - ÐкÑаниÑÑÐµÑ ÑпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² ÑÑÑоке, иÑполÑзÑемой в SQL-запÑоÑе, пÑÐ¸Ð½Ð¼Ð¸Ð¼Ð°Ñ Ð²Ð¾ внимание кодиÑÐ¾Ð²ÐºÑ ÑоединениÑ. - </refpurpose> - </refnamediv> - <refsect1> - <title>ÐпиÑание</title> - <methodsynopsis> - <type>string</type><methodname>mysql_real_escape_string</methodname> - <methodparam><type>string</type><parameter>unescaped_string</parameter></methodparam> - <methodparam choice="opt"><type>resource</type><parameter>link_identifier</parameter></methodparam> - </methodsynopsis> - <para> - ФÑнкÑÐ¸Ñ ÑкÑаниÑÑÐµÑ ÑпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑÑÑоки - <parameter>unescaped_string</parameter>, пÑÐ¸Ð½Ð¸Ð¼Ð°Ñ Ð²Ð¾ внимание кодиÑÐ¾Ð²ÐºÑ - ÑоединениÑ, Ñаким обÑазом, ÑÑо ÑезÑлÑÑÐ°Ñ Ð¼Ð¾Ð¶Ð½Ð¾ безопаÑно - иÑполÑзоваÑÑ Ð² SQL-запÑоÑе в ÑÑнкÑи - <function>mysql_query</function>. - </para> - <note> - <simpara> - <function>mysql_real_escape_string</function> не ÑкÑаниÑÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ - <literal>%</literal> и <literal>_</literal>. - </simpara> - </note> - <para> - <example> - <title>ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ <function>mysql_real_escape_string</function></title> - <programlisting role="php"> -<![CDATA[ -<?php -$item = "Zak's and Derick's Laptop"; -$escaped_item = mysql_real_escape_string($item); -printf ("Escaped string: %s\n", $escaped_item); -?> -]]> - </programlisting> - <para> - ÐÑÑеопиÑаннÑй пÑÐ¸Ð¼ÐµÑ Ð²ÑдаÑÑ ÑледÑÑÑий ÑезÑлÑÑаÑ: - </para> - <screen> -<![CDATA[ -Escaped string: Zak\'s and Derick\'s Laptop -]]> - </screen> - </example> - </para> - <para> - См. Ñакже - <function>mysql_escape_string</function> и - <function>mysql_character_set_name</function>. - </para> - </refsect1> - </refentry> - -<!-- 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 ---> +<?xml version="1.0" encoding="UTF-8"?> +<!-- $Revision: 1.4 $ --> +<refentry id="function.mysql-real-escape-string"> + <refnamediv> + <refname>mysql_real_escape_string</refname> + <refpurpose> + ÐкÑаниÑÑÐµÑ ÑпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² ÑÑÑÐ¾ÐºÐ°Ñ Ð´Ð»Ñ + иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² вÑÑажениÑÑ SQL + </refpurpose> + </refnamediv> + + <refsect1 role="description"> + &reftitle.description; + <methodsynopsis> + <type>string</type><methodname>mysql_real_escape_string</methodname> + <methodparam><type>string</type><parameter>unescaped_string</parameter></methodparam> + <methodparam choice="opt"><type>resource</type><parameter>link_identifier</parameter></methodparam> + </methodsynopsis> + <para> + ÐкÑаниÑÑÐµÑ ÑпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² <parameter>unescaped_string</parameter>, + пÑÐ¸Ð½Ð¸Ð¼Ð°Ñ Ð²Ð¾ внимание кодиÑÐ¾Ð²ÐºÑ ÑоединениÑ, Ñаким обÑазом, ÑÑо ÑезÑлÑÑÐ°Ñ + можно безопаÑно иÑполÑзоваÑÑ Ð² SQL-запÑоÑе в ÑÑнкÑи <function>mysql_query</function>. + ÐÑли вÑÑавлÑÑÑÑÑ Ð±Ð¸Ð½Ð°ÑнÑе даннÑе, Ñо к ним Ñак же Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пÑименÑÑÑ ÑÑÑ ÑÑнкÑиÑ. + </para> + <para> + <function>mysql_real_escape_string</function> вÑзÑÐ²Ð°ÐµÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑеÑнÑÑ ÑÑнкÑÐ¼Ñ MySQL + mysql_real_escape_string, коÑоÑÐ°Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ Ð¾Ð±ÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ Ðº ÑледÑÑÑим Ñимволам: + <literal>\x00</literal>, <literal>\n</literal>, + <literal>\r</literal>, <literal>\</literal>, <literal>'</literal>, + <literal>"</literal> and <literal>\x1a</literal>. + </para> + <para> + ÐÑа ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° вÑегда (за неÑколÑкими иÑклÑÑениÑми) иÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ñого, + ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÐ·Ð¾Ð¿Ð°ÑиÑÑ Ð´Ð°Ð½Ð½Ñе, вÑÑавлÑемÑе в запÑÐ¾Ñ Ð¿ÐµÑед оÑпÑавкой его в MySQL. + </para> + </refsect1> + + <refsect1 role="parameters"> + &reftitle.parameters; + <para> + <variablelist> + <varlistentry> + <term><parameter>unescaped_string</parameter></term> + <listitem> + <para> + СÑÑока, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ ÑкÑаниÑована. + </para> + </listitem> + </varlistentry> + &mysql.linkid.description; + </variablelist> + </para> + </refsect1> + + <refsect1 role="returnvalues"> + &reftitle.returnvalues; + <para> + ÐозвÑаÑÐ°ÐµÑ ÑÑÑокÑ, в коÑоÑой ÑкÑаниÑÐ¾Ð²Ð°Ð½Ñ Ð²Ñе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе ÑимволÑ, + или &false; в ÑлÑÑае оÑибки. + </para> + </refsect1> + + <refsect1 role="examples"> + &reftitle.examples; + <para> + <example> + <title> + ÐÑоÑÑой пÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ + <function>mysql_real_escape_string</function> + </title> + <programlisting role="php"> +<![CDATA[ +<?php +// Connect +$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') + OR die(mysql_error()); + +// Query +$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", + mysql_real_escape_string($user), + mysql_real_escape_string($password)); +?> +]]> + </programlisting> + </example> + </para> + <para> + <example> + <title>ÐÑÐ¸Ð¼ÐµÑ Ð²Ð·Ð»Ð¾Ð¼Ð° Ñ Ð¸ÑполÑзованием SQL Injection</title> + <programlisting role="php"> +<![CDATA[ +<?php +// поÑÑлаем запÑоÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ Ð¸Ð¼Ñ Ð¸ паÑÐ¾Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ +$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'"; +mysql_query($query); + +// ÐÑ Ð½Ðµ никак пÑовеÑили пеÑеменнÑÑ $_POST['password'], +// а она Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑовÑем не Ñо, ÑÑо Ð¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¸. ÐапÑимеÑ: +$_POST['username'] = 'aidan'; +$_POST['password'] = "' OR ''='"; + +// поÑмоÑÑим, какой запÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑпÑавлен в MySQL: +echo $query; +?> +]]> + </programlisting> + <para> + ÐапÑоÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð¾ÑпÑавлен в MySQL: + </para> + <screen> +<![CDATA[ +SELECT * FROM users WHERE name='aidan' AND password='' OR ''='' +]]> + </screen> + <para> + ÐÑо Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ ÐºÐ¾Ð¼Ñ Ñгодно войÑи в ÑиÑÑÐµÐ¼Ñ Ð±ÐµÐ· паÑолÑ. + </para> + </example> + </para> + <para> + <example> + <title>ÐÑÑÑий ваÑÐ¸Ð°Ð½Ñ ÑоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа</title> + <para> + ÐÑименение <function>mysql_real_escape_string</function> к каждой пеÑеменной, + вÑÑавлÑемой в запÑоÑ, пÑедоÑвÑаÑÐ°ÐµÑ SQL Injection. ÐижеÑледÑÑÑий код ÑвлÑеÑÑÑ + наилÑÑÑим ваÑианÑом ÑоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов и не завиÑÐ¸Ñ Ð¾Ñ ÑÑÑановки + <link linkend="security.magicquotes">Magic Quotes</link>. + </para> + <programlisting role="php"> +<![CDATA[ +<?php +// ФÑнкÑÐ¸Ñ ÑкÑаниÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑеменнÑÑ +function quote_smart($value) +{ + // еÑли magic_quotes_gpc вклÑÑена - иÑполÑзÑем stripslashes + if (get_magic_quotes_gpc()) { + $value = stripslashes($value); + } + // ÐÑли пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ - ÑиÑло, Ñо ÑкÑаниÑоваÑÑ ÐµÑ Ð½Ðµ нÑжно + // еÑли Ð½ÐµÑ - Ñо окÑÑжем ÐµÑ ÐºÐ°Ð²ÑÑками, и ÑкÑаниÑÑем + if (!is_numeric($value)) { + $value = "'" . mysql_real_escape_string($value) . "'"; + } + return $value; +} + +// СоединÑемÑÑ +$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') + OR die(mysql_error()); + +// СоÑÑавлÑем безопаÑнÑй запÑÐ¾Ñ +$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s", + quote_smart($_POST['username']), + quote_smart($_POST['password'])); + +mysql_query($query); +?> +]]> + </programlisting> + <para> + ÐапÑоÑ, ÑоÑÑавленнÑй Ñаким обÑазом, бÑÐ´ÐµÑ Ð²Ñполнен без оÑибок, + и взлом Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ SQL Injection окажеÑÑÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶ÐµÐ½. + </para> + </example> + </para> + </refsect1> + + <refsect1 role="notes"> + &reftitle.notes; + <note> + <para> + ФÑнкÑÐ¸Ñ <function>mysql_real_escape_string</function> можно иÑполÑзоваÑÑ + ÑолÑко поÑле Ñого, как ÑÑÑановлено Ñоединение Ñ MySQL. РпÑоÑивном + ÑлÑÑае Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ð¾Ñибка ÑÑÐ¾Ð²Ð½Ñ <literal>E_WARNING</literal>, а ÑÑнкÑÐ¸Ñ + возвÑаÑÐ¸Ñ &false;. ÐÑли <parameter>link_identifier</parameter> не Ñказан, + иÑполÑзÑеÑÑÑ Ð¿Ð¾Ñледнее оÑкÑÑÑое Ñоединение. + </para> + </note> + <note> + <para> + ÐÑли <link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link> вклÑÑенÑ, + Ñо ÑнаÑала даннÑе ÑледÑÐµÑ Ð¾Ð±ÑабоÑаÑÑ ÑÑнкÑией <function>stripslashes</function>. + ÐÑли <function>mysql_real_escape_string</function> пÑименÑеÑÑÑ Ðº даннÑм, + коÑоÑÑе Ñже бÑли пÑоÑлеÑенÑ, Ñо в ÑезÑлÑÑаÑе ÑлеÑи в даннÑÑ Ð±ÑдÑÑ ÑдваиваÑÑÑÑ. + </para> + </note> + <note> + <para> + ÐÑли не полÑзоваÑÑÑÑ ÑÑой ÑÑнкÑией, Ñо запÑÐ¾Ñ ÑÑановиÑÑÑ ÑÑзвимÑм Ð´Ð»Ñ + <link linkend="security.database.sql-injection">взлома Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ SQL Injection</link>. + </para> + </note> + <note> + <simpara> + <function>mysql_real_escape_string</function> не ÑкÑаниÑÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ + <literal>%</literal> и <literal>_</literal>. ÐÑи знаки ÑвлÑÑÑÑÑ Ð¼Ð°Ñками + гÑÑпп Ñимволов в опеÑаÑоÑÐ°Ñ MySQL <literal>LIKE</literal>, + <literal>GRANT</literal> или <literal>REVOKE</literal>. + </simpara> + </note> + </refsect1> + + <refsect1 role="seealso"> + &reftitle.seealso; + <para> + <simplelist> + <member><function>mysql_client_encoding</function></member> + <member><function>addslashes</function></member> + <member><function>stripslashes</function></member> + <member>ÐиÑекÑива <link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link></member> + <member>ÐиÑекÑива <link linkend="ini.magic-quotes-runtime">magic_quotes_runtime</link></member> + </simplelist> + </para> + </refsect1> +</refentry> + +<!-- 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 +-->