|
1 | 1 | <?xml version="1.0" encoding="utf-8"?>
|
2 |
| -<!-- EN-Revision: ab6785b01ce1006e3a9761988575289f40c9b678 Maintainer: shein Status: ready --> |
| 2 | +<!-- EN-Revision: f0ed705e1ac34fed4c92979f63bee74c382f991b Maintainer: shein Status: ready --> |
3 | 3 | <!-- Reviewed: no -->
|
4 | 4 | <chapter xml:id="security.variables" xmlns="http://docbook.org/ns/docbook">
|
5 |
| - <title>Данные, введённые пользователем</title> |
| 5 | + <title>Данные пользовательского ввода</title> |
6 | 6 | <para>
|
7 |
| - Наиболее опасные уязвимости во многих <acronym>PHP</acronym>-скриптах |
8 |
| - возникают не столько из-за самого языка, сколько из-за кода, |
9 |
| - написанного без учёта соответствующих требований безопасности. |
10 |
| - Как следствие, вы всегда должны выделять время на исследование |
| 7 | + Наиболее опасные уязвимости в <acronym>PHP</acronym>-скриптах |
| 8 | + часто возникают не столько из-за самого языка, сколько из-за кода, |
| 9 | + который написали с нарушением требований безопасности. |
| 10 | + Поэтому лучше потратить время на исследование |
11 | 11 | разрабатываемого участка кода, чтобы оценить потенциальную
|
12 | 12 | угрозу от ввода переменной с нестандартным значением.
|
13 | 13 | <example>
|
14 |
| - <title>Потенциально опасное использование переменных</title> |
| 14 | + <title>Потенциально опасная обработка переменных</title> |
15 | 15 | <programlisting role="php">
|
16 | 16 | <![CDATA[
|
17 | 17 | <?php
|
18 |
| -// удалить файлы из домашней директории пользователя... |
19 |
| -// а может, из ещё какой-нибудь? |
20 |
| -unlink ($evil_var); |
21 | 18 |
|
22 |
| -// записать в лог-файл выполняемое действие... |
23 |
| -// а может быть в /etc/passwd? |
24 |
| -fwrite ($fp, $evil_var); |
| 19 | +// Удалить файлы из домашней директории пользователя... |
| 20 | +// а может, и ещё из какой-то? |
| 21 | +unlink($evil_var); |
25 | 22 |
|
26 |
| -// выполнение тривиальных действий... или rm -rf *? |
27 |
| -system ($evil_var); |
28 |
| -exec ($evil_var); |
| 23 | +// Записать в лог-файл выполняемое действие... |
| 24 | +// а может, в файл /etc/passwd? |
| 25 | +fwrite($fp, $evil_var); |
| 26 | +
|
| 27 | +// Выполнение тривиальных действий... или команды rm -rf *? |
| 28 | +system($evil_var); |
| 29 | +exec($evil_var); |
29 | 30 |
|
30 | 31 | ?>
|
31 | 32 | ]]>
|
32 | 33 | </programlisting>
|
33 | 34 | </example>
|
34 | 35 | </para>
|
35 | 36 | <para>
|
36 |
| - Вы должны тщательно проверять ваш код и быть абсолютно уверены в том, |
37 |
| - что все данные, передаваемые веб-браузером, проверяются надлежащим образом. |
38 |
| - Попробуйте ответить для себя на следующие вопросы: |
| 37 | + Требуется тщательно проверять код и быть на 100 % уверенным в правильной |
| 38 | + проверке данных, которые передаёт браузер. |
| 39 | + Ответьте на следующие вопросы: |
39 | 40 | <itemizedlist>
|
40 | 41 | <listitem>
|
41 | 42 | <simpara>
|
42 |
| - Будет ли данный скрипт воздействовать исключительно на предполагаемые |
43 |
| - данные? |
| 43 | + Влияет ли скрипт только на предполагаемые данные? |
44 | 44 | </simpara>
|
45 | 45 | </listitem>
|
46 | 46 | <listitem>
|
47 | 47 | <simpara>
|
48 |
| - Могут ли быть обработаны некорректные или нестандартные данные? |
| 48 | + Обрабатываются ли некорректные или нестандартные данные? |
49 | 49 | </simpara>
|
50 | 50 | </listitem>
|
51 | 51 | <listitem>
|
52 | 52 | <simpara>
|
53 |
| - Возможно ли использование скрипта непредусмотренным способом? |
| 53 | + Получится ли использовать скрипт способом, который не предусмотрели? |
54 | 54 | </simpara>
|
55 | 55 | </listitem>
|
56 | 56 | <listitem>
|
57 | 57 | <simpara>
|
58 |
| - Возможно ли его использование в сочетании с другими скриптами |
| 58 | + Возможно ли использовать скрипт в сочетании с другими скриптами |
59 | 59 | в негативных целях?
|
60 | 60 | </simpara>
|
61 | 61 | </listitem>
|
62 | 62 | <listitem>
|
63 | 63 | <simpara>
|
64 |
| - Будет ли каждая транзакция корректно логирована? |
| 64 | + Правильно ли логируется каждая транзакция? |
65 | 65 | </simpara>
|
66 | 66 | </listitem>
|
67 | 67 | </itemizedlist>
|
68 | 68 | </para>
|
69 | 69 | <para>
|
70 |
| - Ответив на эти вопросы во время написания скрипта, а не после, вы, |
71 |
| - возможно, предотвратите последующую доработку скрипта в целях повышения |
72 |
| - его безопасности. Начиная разработку с этих вопросов, вы не гарантируете |
73 |
| - полную безопасность вашей системы, но сможете значительно повысить её. |
| 70 | + Лучше задуматься о безопасности при разработке скрипта, |
| 71 | + а не дорабатывать небезопасный код, когда потребуется исправлять последствия уязвимостей. |
| 72 | + Такой подход не гарантирует безопасность системы, |
| 73 | + но помогает значительно снизить количество уязвимостей. |
| 74 | + </para> |
| 75 | + <para> |
| 76 | + Безопасность повышают путём отключения настроек, которые делают разработку удобной, но скрывают |
| 77 | + источник, достоверность или целостность данных. Уязвимости к атакам наподобие инъекций |
| 78 | + или жонглирования данными возникают, когда переменные создаются неявно или когда входные данные |
| 79 | + не проверяются. |
| 80 | + </para> |
| 81 | + <para> |
| 82 | + Директива <literal>register_globals</literal> |
| 83 | + и директивы механизма <literal>magic_quotes</literal>, которые удалили в PHP 5.4.0, когда-то способствовали |
| 84 | + этим рискам, поскольку автоматически создавали переменные из пользовательского ввода |
| 85 | + и экранировали данные непоследовательно. Хотя директивы удалили из PHP, аналогичные риски сохраняются, |
| 86 | + когда входные данные обрабатывают неправильно. |
74 | 87 | </para>
|
75 | 88 | <para>
|
76 |
| - Вы также можете рассмотреть отключение таких конфигурационных опций, как |
77 |
| - register_globals, magic_quotes и некоторых других, которые могут приводить |
78 |
| - к сомнениям относительно происхождения или значения получаемых переменных. |
79 |
| - Использование при написании <acronym>PHP</acronym>-кода режима |
80 |
| - error_reporting(E_ALL) может помочь предупредить вас об |
81 |
| - использовании переменных до инициализации или проверки |
82 |
| - (что предотвратит работу с данными, отличными от ожидаемых). |
| 89 | + Вызов <link linkend="function.error-reporting">error_reporting(E_ALL)</link> включает режим сообщения об ошибках всех уровней |
| 90 | + и помогает определять неинициализированные переменные и проверять входные данные. Инструкция |
| 91 | + <link linkend="language.types.declarations.strict">declare(strict_types=1)</link> включает режим строгой типизации, |
| 92 | + который появился в PHP 7 и который повышает безопасность за счёт строгой проверки типов, |
| 93 | + предотвращает непреднамеренное преобразование типов и повышает общую безопасность. |
83 | 94 | </para>
|
84 | 95 | </chapter>
|
85 | 96 | <!-- Keep this comment at the end of the file
|
|
0 commit comments