diff --git a/docs/guide-ru/security-best-practices.md b/docs/guide-ru/security-best-practices.md
index 0f95ab6bec..ceab4a89b8 100644
--- a/docs/guide-ru/security-best-practices.md
+++ b/docs/guide-ru/security-best-practices.md
@@ -6,7 +6,7 @@
Основные принципы
-----------------
-Есть два основных принципа безопасности, независимо от того какое приложение разрабатывается:
+Есть два основных принципа безопасности, независимо от того, какое приложение разрабатывается:
1. Фильтрация ввода.
2. Экранирование вывода.
@@ -14,10 +14,10 @@
### Фильтрация ввода
-Фильтрация ввода означает, что входные данные никогда не должны считаться безопасными и вы всегда должны проверять
+Фильтрация ввода означает, что входные данные никогда не должны считаться безопасными и вы всегда должны проверять,
являются ли полученные данные допустимыми. Например, если мы знаем, что сортировка может быть осуществлена только
по трём полям `title`, `created_at` и `status`, и поле может передаваться через ввод пользователем, лучше проверить
-значение там где мы его получили:
+значение там, где мы его получили:
```php
$sortBy = $_GET['sort'];
@@ -26,27 +26,27 @@ if (!in_array($sortBy, ['title', 'created_at', 'status'])) {
}
```
-В Yii, вы скорее всего будете использовать [валидацию форм](input-validation.md), чтоб делать такие проверки.
+В Yii, вы, скорее всего, будете использовать [валидацию форм](input-validation.md), чтоб делать такие проверки.
### Экранирование вывода
Экранирование вывода означает, что данные в зависимости от контекста должны экранироваться, например в контексте
HTML вы должны экранировать `<`, `>` и похожие специальные символы. В контексте JavaScript или SQL будет другой набор
-символов. Так как ручное экранирование черевато ошибками Yii предоставляет различные утилиты для экранирования в
+символов. Так как ручное экранирование черевато ошибками, Yii предоставляет различные утилиты для экранирования в
различных контекстах.
Как избежать SQL-иньекций
-------------------------
-SQL-иньекции происходят когда текст запроса формируется склеивание неэкранированных строк, как показано ниже:
+SQL-иньекции происходят, когда текст запроса формируется склеиванием неэкранированных строк, как показано ниже:
```php
$username = $_GET['username'];
$sql = "SELECT * FROM user WHERE username = '$username'";
```
-Вместо того, чтобы подставлять корректное имя пользователя злоумышленик может передать вам в приложение что-то вроде
+Вместо того, чтобы подставлять корректное имя пользователя, злоумышленник может передать вам в приложение что-то вроде
`'; DROP TABLE user; --`.
В результате SQL будет следующий:
@@ -54,16 +54,16 @@ $sql = "SELECT * FROM user WHERE username = '$username'";
SELECT * FROM user WHERE username = ''; DROP TABLE user; --'
```
-Это валидный запрос, который будет искать пользователей с пустым именем, а затем удалит таблицу `user`, скорее всего
-сломается приложение и будут потеряны данные (вы ведь делаете регулярное резервное копирование?).
+Это валидный запрос, который сначала будет искать пользователей с пустым именем, а затем удалит таблицу `user`.
+Скорее всего будет сломано приложение и будут потеряны данные (вы ведь делаете регулярное резервное копирование?).
Большинство запросов к базе данных в Yii происходит через [Active Record](db-active-record.md), который правильно
использует подготовленные запросы PDO внутри. При использовании подготовленных запросов невозможно манипулировать
-запросом как это показано ниже.
+запросом как это показано выше.
Тем не менее, иногда нужны [сырые запросы](db-dao.md) или [построитель запросов](db-query-builder.md). В этом случае
-вы должны использовать безопасные способы передачи данных. Если данные используются значения столбцов предпочтительнее
-использовать подготовленные запросы:
+вы должны использовать безопасные способы передачи данных. Если данные используются для сравнения со значением
+столбцов предпочтительнее использовать подготовленные запросы:
```php
// query builder
@@ -80,8 +80,8 @@ $userIDs = $connection
->queryColumn();
```
-Если данные используются в качестве имён столбцов или таблиц, то лучший путь это разрешить только предопределённый набор
-значений:
+Если данные используются в качестве имён столбцов или таблиц, то лучший путь - это разрешить только предопределённый
+набор значений:
```php
function actionList($orderBy = null)
@@ -108,24 +108,25 @@ $rowCount = $connection->createCommand($sql)->queryScalar();
Как избежать XSS
----------------
-XSS или крос-сайтинговый скриптинг становится возможен когда не экранированный выходной HTML попадает в браузер.
-Например, если пользователь может ввести свой имя и вместо `Alexander` он вводит ``, то
-все страницы которые его выводят без экранирования будут выполнять JavaScript `alert('Hello!');` и в результате
-будет выводится окно сообщения в браузере. В зависимости от вебсайта вместо невинных скриптов с сообщениями могут быть
-отправлены сообщения используя ваше имя или даже выполнять банковские операции.
+XSS или крос-сайтинговый скриптинг становится возможен, когда не экранированный выходной HTML попадает в браузер.
+Например, если пользователь должен ввести свой имя, но вместо `Alexander` он вводит ``, то
+все страницы, которые его выводят без экранирования, будут выполнять JavaScript `alert('Hello!');`, и в результате
+будет выводится окно сообщения в браузере. В зависимости от сайта, вместо невинных скриптов с выводом всплывающего
+hello, злоумышленниками могут быть отправлены скрипты, похищающие личные данные пользователей сайта,
+либо выполняющие операции от их имени.
-В Yii избежать XSS легко. В основном есть два варианта:
+В Yii избежать XSS легко. На месте вывода текста необходими выбрать один из двух вариантов:
1. Вы хотите вывести данные в виде обычного текста.
2. Вы хотите вывести данные в виде HTML.
-Если вам нужно вывести простой текст, то екранировать лучше следующим образом:
+Если вам нужно вывести простой текст, то экранировать лучше следующим образом:
```php
= \yii\helpers\Html::encode($username) ?>
```
-Если нужно вывести HTML вам лучше воспользоваться HtmlPurifier:
+Если нужно вывести HTML, вам лучше воспользоваться HtmlPurifier:
```php
= \yii\helpers\HtmlPurifier::process($description) ?>
@@ -136,43 +137,43 @@ XSS или крос-сайтинговый скриптинг становитс
Как избежать CSRF
-----------------
-CSRF это аббревиатура для межсайтинговой подмены запросов. Идея заключается в том, что многие приложения предполагают
-что запросы приходящие от браузера отправляются самим пользователем. Это может быть неправдой.
+CSRF - это аббревиатура для межсайтинговой подмены запросов. Идея заключается в том, что многие приложения предполагают,
+что запросы, приходящие от браузера, отправляются самим пользователем. Это может быть неправдой.
-Например, сайт `an.example.com` имеет URL `/logout`, который используя простой GET, разлогинивает пользователя. Пока
-это запрос выполняется самим пользователем всё в порядке, но в один прекрасный день злоумышленники размещают код
+Например, сайт `an.example.com` имеет URL `/logout`, который, используя простой GET, разлогинивает пользователя. Пока
+это запрос выполняется самим пользователем - всё в порядке, но в один прекрасный день злоумышленники размещают код
`
` на форуме с большой посещаемостью. Браузер не делает никаких отличий
между запросом изображения и запросом страницы, так что когда пользователь откроет страницу с таким тегом `img`, он
разлогинится с сайта `an.example.com`.
-Вот основная идея. Можно сказать, что в разлогировании пользователя нет ничего серъёзного, но отправить POST не намного
+Вот основная идея. Можно сказать, что в разлогировании пользователя нет ничего серьёзного, но отправить POST не намного
сложнее.
-Для того чтоб избежать CSRF вы должны всегда:
+Для того, чтоб избежать CSRF вы должны всегда:
1. Следуйте спецификациям HTTP, например запрос GET не должен менять состояние приложения.
-2. Держите защиту CSRF в Yii включонной.
+2. Держите защиту CSRF в Yii включенной.
Как избежать нежелательного доступа к файлам
--------------------------------------------
-По умолчанию webroot сервера указывает на каталог `web` где лежит `index.php`. В случае виртуального хостинга
-это может быть недостижимо, в конечном итоге весь код, конфиги и логи могут оказаться в webroot сервера.
+По умолчанию, webroot сервера указывает на каталог `web`, где лежит `index.php`. В случае использования виртуального
+хостинга, это может быть недостижимо, в конечном итоге весь код, конфиги и логи могут оказаться в webroot сервера.
-Если это так, то нужно запретить доступ ко всему кроме директории `web`. Если на вашем хостинге такое невозможно,
+Если это так, то нужно запретить доступ ко всему, кроме директории `web`. Если на вашем хостинге такое невозможно,
рассмотрите возможность смены хостинга.
Как избежать отладочной информации и утилит в продуктиве
--------------------------------------------------------
-В режиме отладки Yii отображает довольно подробные ошибки, которые полезны во время разработки. Дело в том, что
+В режиме отладки, Yii отображает довольно подробные ошибки, которые полезны во время разработки. Дело в том, что
подробные ошибки удобны для нападающего, так как могут раскрыть структуру базы данных, параметров конфигурации и части
вашего кода. Никогда не запускайте продуктивное приложение с `YII_DEBUG` установленным в `true` в вашем `index.php`.
Вы никогда не должны включать Gii на продуктиве. Он может быть использован для получения информации о структуре
-базы данных, кода и может быть просто переписан код с помощью генератора Gii.
+базы данных, кода и может позволить заменить файлы, генерируемые Gii автоматически.
-Также следует избегат включения на продуктиве панели отладки, если только это деийствительно не необходимо.
-Она раскрывает всё приложение и детали конфигурации. Если вам это абсолютно необходимо, проверьте дважды что доступ
-ограничен только вашими IP-адресами.
+Также следует избегать включения на продуктиве панели отладки, если только в этом нет острой необходимости.
+Она раскрывает всё приложение и детали конфигурации. Если вам все таки нужно запустить панель отладки на продуктиве,
+проверьте дважды что доступ ограничен только вашими IP-адресами.