Skip to content

Commit 7b63254

Browse files
docs: translate experimental_taintUniqueValue.md to Русский
1 parent 2958f53 commit 7b63254

1 file changed

Lines changed: 45 additions & 45 deletions

File tree

src/content/reference/react/experimental_taintUniqueValue.md

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,113 +5,113 @@ version: experimental
55

66
<Experimental>
77

8-
**This API is experimental and is not available in a stable version of React yet.**
8+
**Этот API является экспериментальным и пока недоступен в стабильной версии React.**
99

10-
You can try it by upgrading React packages to the most recent experimental version:
10+
Вы можете попробовать его, обновив пакеты React до последней экспериментальной версии:
1111

1212
- `react@experimental`
1313
- `react-dom@experimental`
1414
- `eslint-plugin-react-hooks@experimental`
1515

16-
Experimental versions of React may contain bugs. Don't use them in production.
16+
Экспериментальные версии React могут содержать ошибки. Не используйте их в продакшене.
1717

18-
This API is only available inside [React Server Components](/reference/rsc/use-client).
18+
Этот API доступен только внутри [React Server Components](/reference/rsc/use-client).
1919

2020
</Experimental>
2121

2222

2323
<Intro>
2424

25-
`taintUniqueValue` lets you prevent unique values from being passed to Client Components like passwords, keys, or tokens.
25+
`taintUniqueValue` позволяет предотвратить передачу уникальных значений, таких как пароли, ключи или токены, в компоненты клиента.
2626

2727
```js
2828
taintUniqueValue(errMessage, lifetime, value)
2929
```
3030

31-
To prevent passing an object containing sensitive data, see [`taintObjectReference`](/reference/react/experimental_taintObjectReference).
31+
Чтобы предотвратить передачу объекта, содержащего конфиденциальные данные, см. [`taintObjectReference`](/reference/react/experimental_taintObjectReference).
3232

3333
</Intro>
3434

3535
<InlineToc />
3636

3737
---
3838

39-
## Reference {/*reference*/}
39+
## Справочник {/*reference*/}
4040

4141
### `taintUniqueValue(message, lifetime, value)` {/*taintuniquevalue*/}
4242

43-
Call `taintUniqueValue` with a password, token, key or hash to register it with React as something that should not be allowed to be passed to the Client as is:
43+
Вызовите `taintUniqueValue` с паролем, токеном, ключом или хешем, чтобы зарегистрировать его в React как нечто, что не должно быть передано клиенту в исходном виде:
4444

4545
```js
4646
import {experimental_taintUniqueValue} from 'react';
4747

4848
experimental_taintUniqueValue(
49-
'Do not pass secret keys to the client.',
49+
'Не передавайте секретные ключи клиенту.',
5050
process,
5151
process.env.SECRET_KEY
5252
);
5353
```
5454

55-
[See more examples below.](#usage)
55+
[См. больше примеров ниже.](#usage)
5656

57-
#### Parameters {/*parameters*/}
57+
#### Параметры {/*parameters*/}
5858

59-
* `message`: The message you want to display if `value` is passed to a Client Component. This message will be displayed as a part of the Error that will be thrown if `value` is passed to a Client Component.
59+
* `message`: Сообщение, которое вы хотите отобразить, если `value` будет передано в компонент клиента. Это сообщение будет отображено как часть ошибки, которая будет выброшена, если `value` будет передано в компонент клиента.
6060

61-
* `lifetime`: Any object that indicates how long `value` should be tainted. `value` will be blocked from being sent to any Client Component while this object still exists. For example, passing `globalThis` blocks the value for the lifetime of an app. `lifetime` is typically an object whose properties contains `value`.
61+
* `lifetime`: Любой объект, указывающий, как долго `value` будет помечено как "tainted" (скомпрометированное). `value` будет заблокировано от отправки в любой компонент клиента, пока этот объект существует. Например, передача `globalThis` блокирует значение на время жизни приложения. `lifetime` обычно является объектом, свойства которого содержат `value`.
6262

63-
* `value`: A string, bigint or TypedArray. `value` must be a unique sequence of characters or bytes with high entropy such as a cryptographic token, private key, hash, or a long password. `value` will be blocked from being sent to any Client Component.
63+
* `value`: Строка, bigint или TypedArray. `value` должно быть уникальной последовательностью символов или байтов с высокой энтропией, такой как криптографический токен, закрытый ключ, хеш или длинный пароль. `value` будет заблокировано от отправки в любой компонент клиента.
6464

65-
#### Returns {/*returns*/}
65+
#### Возвращает {/*returns*/}
6666

67-
`experimental_taintUniqueValue` returns `undefined`.
67+
`experimental_taintUniqueValue` возвращает `undefined`.
6868

69-
#### Caveats {/*caveats*/}
69+
#### Оговорки {/*caveats*/}
7070

71-
* Deriving new values from tainted values can compromise tainting protection. New values created by uppercasing tainted values, concatenating tainted string values into a larger string, converting tainted values to base64, substringing tainted values, and other similar transformations are not tainted unless you explicitly call `taintUniqueValue` on these newly created values.
72-
* Do not use `taintUniqueValue` to protect low-entropy values such as PIN codes or phone numbers. If any value in a request is controlled by an attacker, they could infer which value is tainted by enumerating all possible values of the secret.
71+
* Получение новых значений из "tainted" значений может скомпрометировать защиту "tainting". Новые значения, созданные путем преобразования "tainted" значений в верхний регистр, объединения "tainted" строковых значений в более крупную строку, преобразования "tainted" значений в base64, извлечения подстроки из "tainted" значений и других подобных преобразований, не будут "tainted", если вы явно не вызовете `taintUniqueValue` для этих вновь созданных значений.
72+
* Не используйте `taintUniqueValue` для защиты значений с низкой энтропией, таких как PIN-коды или номера телефонов. Если любое значение в запросе контролируется злоумышленником, он может вывести, какое значение "tainted", перечисляя все возможные значения секрета.
7373

7474
---
7575

76-
## Usage {/*usage*/}
76+
## Использование {/*usage*/}
7777

78-
### Prevent a token from being passed to Client Components {/*prevent-a-token-from-being-passed-to-client-components*/}
78+
### Предотвращение передачи токена в компоненты клиента {/*prevent-a-token-from-being-passed-to-client-components*/}
7979

80-
To ensure that sensitive information such as passwords, session tokens, or other unique values do not inadvertently get passed to Client Components, the `taintUniqueValue` function provides a layer of protection. When a value is tainted, any attempt to pass it to a Client Component will result in an error.
80+
Чтобы гарантировать, что конфиденциальная информация, такая как пароли, токены сеанса или другие уникальные значения, случайно не передается в компоненты клиента, функция `taintUniqueValue` обеспечивает уровень защиты. Когда значение помечено как "tainted", любая попытка передать его в компонент клиента приведет к ошибке.
8181

82-
The `lifetime` argument defines the duration for which the value remains tainted. For values that should remain tainted indefinitely, objects like [`globalThis`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis) or `process` can serve as the `lifetime` argument. These objects have a lifespan that spans the entire duration of your app's execution.
82+
Аргумент `lifetime` определяет продолжительность, в течение которой значение остается "tainted". Для значений, которые должны оставаться "tainted" бессрочно, в качестве аргумента `lifetime` могут выступать такие объекты, как [`globalThis`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis) или `process`. Эти объекты имеют жизненный цикл, охватывающий все время выполнения вашего приложения.
8383

8484
```js
8585
import {experimental_taintUniqueValue} from 'react';
8686

8787
experimental_taintUniqueValue(
88-
'Do not pass a user password to the client.',
88+
'Не передавайте пароль пользователя клиенту.',
8989
globalThis,
9090
process.env.SECRET_KEY
9191
);
9292
```
9393

94-
If the tainted value's lifespan is tied to a object, the `lifetime` should be the object that encapsulates the value. This ensures the tainted value remains protected for the lifetime of the encapsulating object.
94+
Если жизненный цикл "tainted" значения связан с объектом, `lifetime` должен быть объектом, который инкапсулирует это значение. Это гарантирует, что "tainted" значение останется защищенным в течение всего жизненного цикла инкапсулирующего объекта.
9595

9696
```js
9797
import {experimental_taintUniqueValue} from 'react';
9898

9999
export async function getUser(id) {
100100
const user = await db`SELECT * FROM users WHERE id = ${id}`;
101101
experimental_taintUniqueValue(
102-
'Do not pass a user session token to the client.',
102+
'Не передавайте токен сеанса пользователя клиенту.',
103103
user,
104104
user.session.token
105105
);
106106
return user;
107107
}
108108
```
109109

110-
In this example, the `user` object serves as the `lifetime` argument. If this object gets stored in a global cache or is accessible by another request, the session token remains tainted.
110+
В этом примере объект `user` выступает в качестве аргумента `lifetime`. Если этот объект будет сохранен в глобальном кеше или будет доступен другому запросу, токен сеанса останется "tainted".
111111

112112
<Pitfall>
113113

114-
**Do not rely solely on tainting for security.** Tainting a value doesn't block every possible derived value. For example, creating a new value by upper casing a tainted string will not taint the new value.
114+
**Не полагайтесь исключительно на "tainting" для безопасности.** Пометка значения как "tainted" не блокирует все возможные производные значения. Например, создание нового значения путем преобразования "tainted" строки в верхний регистр не сделает новое значение "tainted".
115115

116116

117117
```js
@@ -120,31 +120,31 @@ import {experimental_taintUniqueValue} from 'react';
120120
const password = 'correct horse battery staple';
121121

122122
experimental_taintUniqueValue(
123-
'Do not pass the password to the client.',
123+
'Не передавайте пароль клиенту.',
124124
globalThis,
125125
password
126126
);
127127

128-
const uppercasePassword = password.toUpperCase() // `uppercasePassword` is not tainted
128+
const uppercasePassword = password.toUpperCase() // `uppercasePassword` не помечен как "tainted"
129129
```
130130

131-
In this example, the constant `password` is tainted. Then `password` is used to create a new value `uppercasePassword` by calling the `toUpperCase` method on `password`. The newly created `uppercasePassword` is not tainted.
131+
В этом примере константа `password` помечена как "tainted". Затем `password` используется для создания нового значения `uppercasePassword` путем вызова метода `toUpperCase` для `password`. Вновь созданное значение `uppercasePassword` не помечено как "tainted".
132132

133-
Other similar ways of deriving new values from tainted values like concatenating it into a larger string, converting it to base64, or returning a substring create untained values.
133+
Другие аналогичные способы получения новых значений из "tainted" значений, такие как объединение их в более крупную строку, преобразование в base64 или возврат подстроки, создают не "tainted" значения.
134134

135-
Tainting only protects against simple mistakes like explicitly passing secret values to the client. Mistakes in calling the `taintUniqueValue` like using a global store outside of React, without the corresponding lifetime object, can cause the tainted value to become untainted. Tainting is a layer of protection; a secure app will have multiple layers of protection, well designed APIs, and isolation patterns.
135+
"Tainting" защищает только от простых ошибок, таких как явная передача секретных значений клиенту. Ошибки при вызове `taintUniqueValue`, такие как использование глобального хранилища вне React, без соответствующего объекта жизненного цикла, могут привести к тому, что "tainted" значение станет не "tainted". "Tainting" — это уровень защиты; безопасное приложение будет иметь несколько уровней защиты, хорошо спроектированные API и шаблоны изоляции.
136136

137137
</Pitfall>
138138

139139
<DeepDive>
140140

141-
#### Using `server-only` and `taintUniqueValue` to prevent leaking secrets {/*using-server-only-and-taintuniquevalue-to-prevent-leaking-secrets*/}
141+
#### Использование `server-only` и `taintUniqueValue` для предотвращения утечки секретов {/*using-server-only-and-taintuniquevalue-to-prevent-leaking-secrets*/}
142142

143-
If you're running a Server Components environment that has access to private keys or passwords such as database passwords, you have to be careful not to pass that to a Client Component.
143+
Если вы используете среду Server Components, имеющую доступ к закрытым ключам или паролям, таким как пароли баз данных, вы должны быть осторожны, чтобы не передавать их в Client Component.
144144

145145
```js
146146
export async function Dashboard(props) {
147-
// DO NOT DO THIS
147+
// НЕ ДЕЛАЙТЕ ЭТОГО
148148
return <Overview password={process.env.API_PASSWORD} />;
149149
}
150150
```
@@ -163,11 +163,11 @@ export async function Overview({ password }) {
163163
}
164164
```
165165

166-
This example would leak the secret API token to the client. If this API token can be used to access data this particular user shouldn't have access to, it could lead to a data breach.
166+
Этот пример приведет к утечке секретного API-токена клиенту. Если этот API-токен может быть использован для доступа к данным, к которым данный пользователь не должен иметь доступа, это может привести к утечке данных.
167167

168-
[comment]: <> (TODO: Link to `server-only` docs once they are written)
168+
[comment]: <> (TODO: Добавить ссылку на документацию `server-only`, как только она будет написана)
169169

170-
Ideally, secrets like this are abstracted into a single helper file that can only be imported by trusted data utilities on the server. The helper can even be tagged with [`server-only`](https://www.npmjs.com/package/server-only) to ensure that this file isn't imported on the client.
170+
В идеале, такие секреты должны быть абстрагированы в отдельный вспомогательный файл, который может быть импортирован только доверенными утилитами данных на сервере. Вспомогательный файл может быть даже помечен как [`server-only`](https://www.npmjs.com/package/server-only), чтобы гарантировать, что этот файл не будет импортирован на клиенте.
171171

172172
```js
173173
import "server-only";
@@ -178,23 +178,23 @@ export function fetchAPI(url) {
178178
}
179179
```
180180

181-
Sometimes mistakes happen during refactoring and not all of your colleagues might know about this.
182-
To protect against this mistakes happening down the line we can "taint" the actual password:
181+
Иногда при рефакторинге случаются ошибки, и не все ваши коллеги могут знать об этом.
182+
Чтобы защититься от таких ошибок в будущем, мы можем "пометить" фактический пароль:
183183

184184
```js
185185
import "server-only";
186186
import {experimental_taintUniqueValue} from 'react';
187187

188188
experimental_taintUniqueValue(
189-
'Do not pass the API token password to the client. ' +
190-
'Instead do all fetches on the server.'
189+
'Не передавайте пароль API-токена клиенту. ' +
190+
'Вместо этого выполняйте все запросы на сервере.'
191191
process,
192192
process.env.API_PASSWORD
193193
);
194194
```
195195

196-
Now whenever anyone tries to pass this password to a Client Component, or send the password to a Client Component with a Server Function, an error will be thrown with message you defined when you called `taintUniqueValue`.
196+
Теперь, когда кто-либо попытается передать этот пароль в Client Component или отправить пароль в Client Component с помощью Server Function, будет выброшена ошибка с сообщением, которое вы определили при вызове `taintUniqueValue`.
197197

198198
</DeepDive>
199199

200-
---
200+
---

0 commit comments

Comments
 (0)