Перевёл ещё один раздел (Волшебные кавычи)

[email protected] (Andrey) Wed, 25 Apr 2007 22:09:17 +0800
Newsgroups php.doc.license
Message-ID <op.trcexrfina2e2f@pegas>
ц╓ц▐ц┌ц▓ц▐ц┤ц▐ ц≈ц▓ц┘ц█ц┘ц▌ц┴ ц⌠ц∙ц■ц▐ц▀. ц╔ц⌠ц▄ц┴ ц┬ц▐ц■ц┴ц■ц┘ ц≈ц▀ц▄ц─ц·ц┴ц■ц≤ ц┘ц┤ц▐ ц≈ ц▐ц├ц┴ц┐ц┴ц│ц▄ц≤ц▌ц∙ц─  
ц└ц▐ц▀ц∙ц█ц┘ц▌ц■ц│ц┐ц┴ц─, ц░ц▐ц√ц│ц▄ц∙ц┼ц⌠ц■ц│.

-- 
цЁ ц∙ц≈ц│ц√ц┘ц▌ц┴ц┘ц█, ц║ц▌ц└ц▓ц┘ц┼
(unnamed) (text/plain, 8 KB)
ÂÎËØÅÁÍÛÅ ÊÀÂÛ×ÊÈ

Ñ î ä å ð æ à í è å:

<a href="http://www.php.net/manual/ru/security.magicquotes.php#security.magicquotes.what">×òî òàêîå Âîëøåáíûéå êàâû÷êè</a>
<a href="http://www.php.net/manual/ru/security.magicquotes.why.php">Êîãäà ñòîèò èñïîëüçîâàòü Âîëøåáíûéå êàâû÷êè</a>
<a href="http://www.php.net/manual/ru/security.magicquotes.whynot.php">Ïî÷åìó íå ñòîèò èñïîëüçîâàòü Âîëøåáíûéå êàâû÷êè</a>
<a href="http://www.php.net/manual/ru/security.magicquotes.disabling.php">Îòêëþ÷åíèå Âîëøåáíûõ êàâû÷åã</a>


Âîëøåáíûéå êàâû÷êè - ýòî ïðîöåññ, àâòîìàòè÷åñêè äîáàâëÿþùèé escape-ïîñëåäîâàòåëüíîñòè âî âõîäÿùèå äàííûå â PHP ñêðèïòå. Æåëàòåëüíî ïðîãðàììèðîâàòü ñ âûêëþ÷åííîé îïöèåé âîëøåáíûõ êàâû÷åê è âìåñòî ýòîãî äîáàâëÿòü escape-ïîñëåäîâàòåëüíîñòè âî âðåìÿ âûïîëíåíèÿ ñêðèïòà ïî íåîáõîäèìîñòè.


×ÒÎ ÒÀÊÎÅ ÂÎËØÅÁÍÛÅ ÊÀÂÛ×ÊÈ

Ýòî êîãäà âñå ' (àïîñòðîôû, îäèíàðíûå êàâû÷êè), " (äâîéíûå êàâû÷êè), \ (îáðàòíûå ñëåøè) è NULL-ñèìâîëû àâòîìàòè÷åñêè ïðåâðàùàþòñÿ â ñîîòâåòñòâóþùèå èì escape-ïîñëåäîâàòåëüíîñòè (ýêðàíèðîâàíû). Òî æå ñàìîå äåëàåò ôóíêöèÿ <a href="http://www.php.net/manual/ru/function.addslashes.php">addslashes().</a>

Ñóùíåñòâóåò òðè äèðåêòèâû, îòíîñÿùèõñÿ ê âîëøåáíûì êàâû÷êàì:

* <a href="http://www.php.net/manual/ru/ref.info.php#ini.magic-quotes-gpc">magic_quotes_gpc</a>

Çàòðàãèâàåò äàííûå HTTP-çàïðîñà (GET, POST and COOKIE). Íå ìîæåò áûòü èçìåíåíà âî âðåìÿ âûïîëíåíèÿ ñêðèïòà, ïî óìîë÷àíèþ èìååò çíà÷åíèå "âêëþ÷åíî".

Ñìîòðèòå òàêæå <a href="http://www.php.net/manual/ru/function.get-magic-quotes-gpc.php">get_magic_quotes_gpc()</a>.

* <a href="http://www.php.net/manual/ru/ref.info.php#ini.magic-quotes-runtime">magic_quotes_runtime</a>

Åñëè âêëþ÷åíû, òî â äàííûõ, âîçâðàùàåìûõ áîëüøèíñòâîì ôóíêöèé, áåðóùèõ äàííûå "èçâíå": âêëþ÷àÿ áàçû äàííûõ è òåêñòîâûå ôàéëû, ñïå÷èàëüíûå ñèìâîëû áóäóò ýêðàíèðîâàíû. Ýòà îïöèÿ ìîæåò áûòü óñòàíîâëåíà âî âðåìÿ âûïîëíåíèÿ ñêðèïòà è ïî óìîë÷àíèþ îòêëþ÷åíà.

Ñìîòðèòå òàêæå <a href="http://www.php.net/manual/ru/function.set-magic-quotes-runtime.php">set_magic_quotes_runtime()</a> è <a href="http://www.php.net/manual/ru/function.get-magic-quotes-runtime.php">get_magic_quotes_runtime()</a>.

* <a href="http://www.php.net/manual/ru/ref.sybase.php#ini.magic-quotes-sybase">magic_quotes_sybase</a>

Îäèíàðíàÿ êàâû÷êà ýêðàíèðóåòñÿ íå îáðàòíûì ñëåøåì (\'), à îäèíàðíîé æå êàâû÷êîé (''). Áóäó÷è âêëþ÷åííîé, ýòà îïöèÿ ïîëíîñòüþ ïåðåîïðåäåëÿåò îïöèþ <a href="http://www.php.net/manual/ru/ref.info.php#ini.magic-quotes-gpc">magic_quotes_gpc</a>. Åñëè âêëþ÷åíû îáå ýòè îïöèè, îäèíàðíûå êàâû÷êè áóäóò ýêðàíèðîâàíû îäèíðíûìè êàâû÷êàìè, à äâîéíûå êàâû÷êè, îáðàòíûå ñëåøè è NULL-ñèìâîëû îñòàíóòñÿ íåòðîíóòûìè è íåýêðàíèðîâàíûìè.

Ñì. òàêæå <a href="http://www.php.net/manual/ru/function.ini-get.php">ini_get()</a> äëÿ ïîëó÷åíèÿ çíà÷åíèÿ ýòîé îïöèè.
  
  
  
ÏÎ×ÅÌÓ ÑÒÎÈÒ ÈÑÏÎËÜÇÎÂÀÒÜ ÂÎËØÅÁÍÛÅ ÊÀÂÛ×ÊÈ

* Ïîëåçíî äëÿ íîâè÷êîâ

Âîëøåáíûå êàâû÷êè ðåàëèçîâàíû â PHP äëÿ òîãî, ÷òîáû ïîìî÷ü íîâè÷êàì ïèñàòü áîëåå áåçîïàñíûé êîä. Õîòÿ ïðè ýòîì <a href="http://www.php.net/manual/ru/security.database.sql-injection.php">SQL-èíúåêöèè</a> âñ¸ åù¸ îñòàþòñÿ âîçìîæíûìè, ðèñê óìåíüøàåòñÿ.

* Óäîáíî

Ïðè äîáàâëåíèè äàííûõ â áàçó äàííûõ, âîëøåáíûå êàâû÷êè, ïî ñóùåñòâó, çàïóñêàþò ôóíêöèþ <a href="http://www.php.net/manual/ru/function.addslashes.php">addslashes()</a> íà âñåõ GET, POST è COOKIE-äàííûõ è äåëàåò ýòî àâòîìàòè÷åñêè.



ÏÎ×ÅÌÓ ÍÅ ÑÒÎÈÒ ÈÑÏÎËÜÇÎÂÀÒÜ ÂÎËØÅÁÍÛÅ ÊÀÂÛ×ÊÈ

* Ñîâìåñòèìîñòü

Âêëþ÷åíèå è âûêëþ÷åíèå âîëøåáíûõ êàâû÷åê âëèÿåò íà ñîâìåñòèìîñòü ñêðèïòîâ ñ ðàáî÷èì PHP-îêðóæåíèåì. Èñïîëüçóéòå <a href="http://www.php.net/manual/ru/function.get-magic-quotes-gpc.php">get_magic_quotes_gpc()</a> ÷òîáû ïðîâåðèòü ýòó îïöèþ è ïèñàòü êîä àäåêâàòíî.

* Ïðîèçâîäèòåëüíîñòü

Íå êàæäûé ôðàãìåíò äàííûõ ïîìåùàåòñÿ â áàçó äàííûõ, ïîýòîìó ýêðàíèðîâàíèå âñåõ äàííûõ óìåíüøàåò ïðîèçâîäèòåëüíîñòü. Ïðîñòîé âûçîâ ôóíêöèé ýêðàíèðîâàíèÿ (íàïðèìåð, <a href="http://www.php.net/manual/ru/function.addslashes.php">addslashes()</a>) âî âðåìÿ âûïîëíåíèÿ ñêðèïòà â ýòîì ñìûñëå áîëå ýôôåêòèâíî.

Íåñìîòðÿ íà òî, ÷òî â <type>php.ini-dist</type> ýòà îïöèÿ âêëþ÷åíà, ðåêîìåíäóåòñÿ å¸ îòêëþ÷àòü â ôàéëàõ php.ini. Ýòà ðåêîìåíäàöèÿ äà¸òñÿ, ãëàâíûì îáðàçîì, ïî ïðè÷èíàì ïðîèçâîäèòåëüíîñòè.

* Íåóäîáñòâî

Ïîñêîëüêó íå âñå äàííûå íóæäàþòñÿ â ýêðàíèðîâàíèè, ÷àñòî ðàçäðàæàåò ïîÿâëåíèå ýêðàíèðîâàííûõ äàííûõ òàì, ãäå èõ íå äîëæíî áûòü. Íàïðèìåð, ïðè îòïðàâêå ïèñüìà èç html-ôîðìû âèäèøü â í¸ì êó÷ó \' . Äëÿ èñïðàâëåíèÿ ýòîãî òðåáóåòñÿ ÷åðåçìåðíîå èñïîëüçîâàíèå ôóíêöèè <a href="http://www.php.net/manual/ru/function.stripslashes.php">stripslashes()</a>.



ÎÒÊËÞ×ÅÍÈÅ ÂÎËØÅÁÍÛÕ ÊÀÂÛ×ÅÊ

Îïöèÿ <a href="http://www.php.net/manual/ru/ref.info.php#ini.magic-quotes-gpc">magic_quotes_gpc</a> ìîæåò áûòü îòêëþ÷åíà òîëüêî íà óðîâíå ñèñòåìû, íî íå âî âðåìÿ âûïîëíåíèÿ. Èíûìè ñëîâàìè, èñïîëüçîâàíèå ôóíêöèè <a href="http://www.php.net/manual/ru/function.ini-set.php"></a>ini_set()</a> íå áóäåò ýôôåêòèâíûì.

Ïðèìåð 31-1. Îòêëþ÷åíèå âîëøåáíûõ êàâû÷åê íà ñòîðîíå ñåðâåðà

Ïðèìåð, óñòàíîâëåíèÿ çíà÷åíèÿ ýòèõ îïöèé â ñîñòîÿíèå "âûêëþ÷åíî" â ôàéëå php.ini. Çà äîïîëíèòåëüíûìè ñâåäåíèÿìè ÷èòàéòå ñåêöèþ <a href="http://www.php.net/manual/ru/configuration.changes.php">How to change configuration settings</a> ðóêîâîäñòâà.
....

Åñëè äîñòóï ê êîíôèãóðàöèè ñåðâåðà îòñóòñòâóåò, èñïîëüçîâàíèå ôàéëà .htaccess òàêæå ÿâëÿåòñÿ ýôôåêòèâíûì. Ïðèìåð:
....

Ïðèìåð 31-2. Îòêëþ÷åíèå âîëøåáíûõ êàâû÷åê âî âðåìÿ âûïîëíåíèÿ ñêðèïòà
....