mirror of
https://github.com/php/doc-ru.git
synced 2026-03-23 23:32:16 +01:00
116 lines
5.7 KiB
XML
116 lines
5.7 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: f0ed705e1ac34fed4c92979f63bee74c382f991b Maintainer: shein Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<chapter xml:id="security.variables" xmlns="http://docbook.org/ns/docbook">
|
||
<title>Данные пользовательского ввода</title>
|
||
<para>
|
||
Наиболее опасные уязвимости в <acronym>PHP</acronym>-скриптах
|
||
часто возникают не столько из-за самого языка, сколько из-за кода,
|
||
который написали с нарушением требований безопасности.
|
||
Поэтому лучше потратить время на исследование
|
||
разрабатываемого участка кода, чтобы оценить потенциальную
|
||
угрозу от ввода переменной с нестандартным значением.
|
||
<example>
|
||
<title>Потенциально опасная обработка переменных</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
// Удалить файлы из домашней директории пользователя...
|
||
// а может, и ещё из какой-то?
|
||
unlink($evil_var);
|
||
|
||
// Записать в лог-файл выполняемое действие...
|
||
// а может, в файл /etc/passwd?
|
||
fwrite($fp, $evil_var);
|
||
|
||
// Выполнение тривиальных действий... или команды rm -rf *?
|
||
system($evil_var);
|
||
exec($evil_var);
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
Требуется тщательно проверять код и быть на 100 % уверенным в правильной
|
||
проверке данных, которые передаёт браузер.
|
||
Ответьте на следующие вопросы:
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Влияет ли скрипт только на предполагаемые данные?
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Обрабатываются ли некорректные или нестандартные данные?
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Получится ли использовать скрипт способом, который не предусмотрели?
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Возможно ли использовать скрипт в сочетании с другими скриптами
|
||
в негативных целях?
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Правильно ли логируется каждая транзакция?
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
<para>
|
||
Лучше задуматься о безопасности при разработке скрипта,
|
||
а не дорабатывать небезопасный код, когда потребуется исправлять последствия уязвимостей.
|
||
Такой подход не гарантирует безопасность системы,
|
||
но помогает значительно снизить количество уязвимостей.
|
||
</para>
|
||
<para>
|
||
Безопасность повышают путём отключения настроек, которые делают разработку удобной, но скрывают
|
||
источник, достоверность или целостность данных. Уязвимости к атакам наподобие инъекций
|
||
или жонглирования данными возникают, когда переменные создаются неявно или когда входные данные
|
||
не проверяются.
|
||
</para>
|
||
<para>
|
||
Директива <literal>register_globals</literal>
|
||
и директивы механизма <literal>magic_quotes</literal>, которые удалили в PHP 5.4.0, когда-то способствовали
|
||
этим рискам, поскольку автоматически создавали переменные из пользовательского ввода
|
||
и экранировали данные непоследовательно. Хотя директивы удалили из PHP, аналогичные риски сохраняются,
|
||
когда входные данные обрабатывают неправильно.
|
||
</para>
|
||
<para>
|
||
Вызов <link linkend="function.error-reporting">error_reporting(E_ALL)</link> включает режим сообщения об ошибках всех уровней
|
||
и помогает определять неинициализированные переменные и проверять входные данные. Инструкция
|
||
<link linkend="language.types.declarations.strict">declare(strict_types=1)</link> включает режим строгой типизации,
|
||
который появился в PHP 7 и который повышает безопасность за счёт строгой проверки типов,
|
||
предотвращает непреднамеренное преобразование типов и повышает общую безопасность.
|
||
</para>
|
||
</chapter>
|
||
<!-- 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:"~/.phpdoc/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
|
||
-->
|