You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: manual/miscells/security/index.md
+9-9Lines changed: 9 additions & 9 deletions
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# PHPC и безопасность
2
2
3
-
Назад: Прочее • К началу: Документация • Далее: PHPC и кодировки MySQL
3
+
Назад: [Прочее](https://easy-phpc.github.com/manual/miscells) • К началу: [Документация](https://easy-phpc.github.io/manual/) • Далее: [PHPC и кодировки MySQL]
4
4
5
5
Содержание
6
6
1. Бэкдоры (Backdoors)
@@ -46,7 +46,7 @@ acceptFloatParameter: функция работает точно так же, к
46
46
acceptStringParameter: функции передается параметр name (название принимаемого параметра). Функция всегда возвращает строку, даже если параметр не был указан вообще (в этом случае возвращается пустая строка). Если вы хотите, чтобы возвращаемое значение было не длиннее определенной величины, просто передайте функции второй параметр limit. Важно помнить, что по умолчанию функция всегда выполняет оптимизацию переданных данных − удаляет все пробелы из начала и конца строки, а также удаляет из строки все повторяющиеся пробелы. Если вы хотите отключить оптимизацию, передайте функции false в качестве третьего параметра optimize.
47
47
Таким образом, для вышеприведенного примера (отображение галереи) достаточно написать:
```"SELECT * FROM users WHERE username='$username'"```
69
69
В PHP Compiler предлагается несколько иной способ экранирования строк в SQL-запросах. Вместо использования кавычек в запросах настоятельно рекомендуется использовать функцию slashes. Данная функция делает то же самое, что и addslashes, но дополнительно к этому добавляет одинарные кавычки в начале и конце строки. Помня это нехитрое правило (никогда не использовать кавычки напрямую), вы всегда будете писать код, устойчивый к SQL-инъекциям.
70
70
71
71
Пример правильного запроса:
72
72
73
-
"SELECT * FROM users WHERE username=".slashes($username)
73
+
```"SELECT * FROM users WHERE username=".slashes($username)```
74
74
7. Межсайтовый скриптинг
75
75
76
76
Межсайтовый (или кросс-сайтовый) скриптинг − довольно хитрая уязвимость, которая в принципе опасна только для сложных динамических сайтов с поддержкой аккаунтов пользователей. В результате этой уязвимости злоумышленник может получить список cookies, который хранится на вашем компьютере (причем даже не все cookies, а лишь те, которые относятся к уязвимому сайту). На форуме, например, это может привести к краже вашего пароля. Все, что необходимо сделать злоумышленнику − это внедрить в текст страницы определенный HTML-код (обычно написанный на Javascript).
77
77
78
78
Для того, чтобы помешать этому, следует всегда фильтровать данные, полученные от посетителя, перед тем, как выводить их на страницу. Например, в гостевой книге нельзя просто так взять и вывести комментарий неизвестного гостя − это уязвимость:
79
79
80
-
echo $comment;
80
+
```echo $comment;```
81
81
Вместо этого перед выводом необходимо отфильтровать комментарий:
82
82
83
-
$comment=htmlspecialchars($comment);
84
-
echo $comment;
83
+
```$comment=htmlspecialchars($comment);
84
+
echo $comment;```
85
85
Для защиты от данной уязвимости весь вывод данных в PHPC фильтруется автоматически. Каждый раз, когда вы пишете в тексте шаблона вывод переменной при помощи тега <var:...>, эта переменная фильтруется перед выводом. Кроме того, при выводе форматированного текста, когда указанные посетителем данные могут попасть в значения параметров HTML-тегов, к этим данным применяется еще более строгая проверка.
86
86
87
87
Вообще межсайтовый скриптинг − это такая уязвимость, от которой сложнее всего защитить проект. Я должен признаться, что не уверен в стопроцентной устойчивости движка к ней. Тем не менее, начиная с версии 2.4.1, система стала неуязвимой ко всем методам межсайтового скриптинга, которые были мне известны.
@@ -90,7 +90,7 @@ echo $comment;
90
90
91
91
Защита админпанели от несанкционированного доступа − последний вопрос, который хотелось бы рассмотреть здесь. Как и в остальной части движка, скрипты в каталоге admin делятся на основные и вспомогательные. Ко вспомогательным относятся файлы controls.php и function.php, к основным − все остальное. Для того, чтобы предотвратить доступ злоумышленника к панели, каждый скрипт в самом начале обязательно должен подключать файл global.php:
92
92
93
-
require "global.php";
93
+
```require "global.php";```
94
94
Файл global.php создает все необходимые переменные и классы, а также проверяет авторизацию. Если кто-то попытается запросить защищенный файл, не авторизовавшись, работа скрипта будет немедленно прекращена. После авторизации зашифрованный пароль администратора записывается во временный cookie под именем phpcpassword. Чтобы выйти из админпанели и удалить этот cookie с компьютера, достаточно закрыть браузер.
95
95
96
-
Назад: Прочее • К началу: Документация • Далее: PHPC и кодировки MySQL
96
+
Назад: [Прочее](https://easy-phpc.github.com/manual/miscells) • К началу: [Документация](https://easy-phpc.github.io/manual/) • Далее: [PHPC и кодировки MySQL]
0 commit comments