Skip to content

Commit c60430c

Browse files
committed
04.2
1 parent 0e05226 commit c60430c

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

ru/04.2.md

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,22 @@
22

33
Одним из наиболее важных правил веб-разработки является то, что нельзя доверять никаким данным, поступившим из пользовательских форм. Вы должны проверять все входящие данные перед тем, как их использовать. Множество веб-сайтов было затронуто этой очень серьезной проблемой.
44

5-
Существует два наиболее часто используемых способа проверить данные. Один - это проверка средствами Javascript на стороне браузера, а второй - проверка на стороне сервера. В этом разделе мы поговорим о проверке данных средствмаи сервера.
5+
Существует два наиболее часто используемых способа проверить данные. Один - это проверка средствами Javascript на стороне браузера, а второй - проверка на стороне сервера. В этом разделе мы поговорим о проверке данных средствами сервера.
66

77

88
## Поля, обязательные к заполнению
99

10-
Иногода требуется, чтобы пользователь заполнил определенные поля, но они этого не делают; например, в предыдущем разделе, когда нам тербовалось имя пользователя. Мы можем использовать функцию `len`, чтобы получить длину строки в поле, чтобы быть уверенными, что пользователь заполнил его:
10+
Иногда требуется, чтобы пользователь заполнил определенные поля, но он этого не делает; например, в предыдущем разделе, когда нам требовалось имя пользователя. Чтобы получить длину строки в поле и быть уверенными, что пользователь заполнил его, мы можем использовать функцию `len`:
1111

1212
if len(r.Form["username"][0])==0{
1313
// код, выполняемый, если поле оказалось пустым
1414
}
1515

16-
`r.Form` обрабатывает незаполненные поля различными способами в зависимтсти от их типа. Для пустых текстовых полей, текстовых областей и загружаемых файлов она возвращает пустую строку; для радиокнопок и чекбоксов просто не создаются соответствующие значения. Вместо этого при попытке доступа к ним Вы получите ошибку. Поэтому для получения значений безопаснее использовать `r.Form.Get()`, так как эта команда всегда возвращает пустые значения. С другой стороны, `r.Form.Get()` может получить только одно значение за один вызов, поэтому длят того, чтобы получиьт карту значений, нужно использовать `r.Form`.
16+
`r.Form` обрабатывает незаполненные поля различными способами в зависимости от их типа. Для пустых текстовых полей, текстовых областей и загружаемых файлов она возвращает пустую строку; для радиокнопок и чекбоксов просто не создаются соответствующие значения. Вместо этого при попытке доступа к ним Вы получите ошибку. Поэтому для получения значений безопаснее использовать `r.Form.Get()`, так как эта команда всегда возвращает пустые значения. С другой стороны, `r.Form.Get()` может получить только одно значение за один вызов, поэтому для того, чтобы получить карту значений, нужно использовать `r.Form`.
1717

1818
## Числа
1919

20-
Sometimes you only need numbers for the field value. For example, let's say that you require the age of a user in integer form only, i.e 50 or 10, instead of "old enough" or "young man". If we require a positive number, we can convert the value to the `int` type first, then process it.
21-
Иногда в значениями поля могут быть толко числа. Например, Вам нужно получить возраст пользователя в целочисленном виде, т.е. 50 или 10, вместо "довольно взрослый" или "молодой человек". Если нам нужно положительное число, мы можем сначала конвертировать значение поля в тип `int`, а затем уже работать с ним:
20+
Иногда значениями поля могут быть только числа. Например, Вам нужно получить возраст пользователя в целочисленном виде, т.е. 50 или 10, вместо "довольно взрослый" или "молодой человек". Если нам нужно положительное число, мы можем сначала конвертировать значение поля в тип `int`, а затем уже работать с ним:
2221

2322
getint,err:=strconv.Atoi(r.Form.Get("age"))
2423
if err!=nil{
@@ -36,7 +35,7 @@ Sometimes you only need numbers for the field value. For example, let's say that
3635
return false
3736
}
3837

39-
Вообще регулярные выражения неэффективны в плане производительности, но простые регулярные выражения довольно быстры. Если Вы с ними знакомы, то их использование может быть довольно-таки удобным способом проверить данные. Имейте в виду, что Go использует [RE2](http://code.google.com/p/re2/wiki/Syntax), что означает, что при работе с регулярными выражениями в Go поддерживаются все символы UTF-8.
38+
Хотя регулярные выражения неэффективны в плане производительности, простые регулярные выражения довольно быстры. Если Вы с ними знакомы, то их использование может быть довольно-таки удобным способом проверить данные. Имейте в виду, что Go использует [RE2](http://code.google.com/p/re2/wiki/Syntax), что означает, что при работе с регулярными выражениями в Go поддерживаются все символы UTF-8.
4039

4140
## Китайские символы
4241

@@ -48,13 +47,12 @@ Sometimes you only need numbers for the field value. For example, let's say that
4847

4948
## Английские буквы
5049

51-
Sometimes we need users to input only English letters. For example, we require someone's English name, like astaxie instead of asta谢. We can easily use regular expressions to perform our verification.
52-
Иногда нужно, чтобы пользователь вводил только английские буквы. Например, нам нужно, чтобы пользователь вводил свое имя по-английски, например, astaxie, а не asta谢. Чтобы легко осуществить такую проверку, можно воспользоваться регулярными выражениями:
50+
Иногда нужно, чтобы пользователь вводил только английские буквы. Предположим, нам нужно, чтобы пользователь вводил свое имя по-английски, например, astaxie, а не asta谢. Чтобы легко осуществить такую проверку, можно воспользоваться регулярными выражениями:
5351

5452
if m, _ := regexp.MatchString("^[a-zA-Z]+$", r.Form.Get("engname")); !m {
5553
return false
5654
}
57-
(*** Прим. переводчика на русский язык - для русского языка регулярка будет выглядеть как "[А-аЯ-яЁё]+$" ***)
55+
( ***Прим. переводчика на русский язык - для русского языка регулярка в данном случае будет выглядеть как "[А-аЯ-яЁё]+$"*** )
5856

5957
## Адрес E-mail
6058

@@ -68,7 +66,6 @@ Sometimes we need users to input only English letters. For example, we require s
6866

6967
## Выпадающий список
7068

71-
Let's say we require an item from our drop down list, but instead we get a value fabricated by hackers. How do we prevent this from happening?
7269
Допустим, нам нужно получить значение из выпадающего списка, но вместо этого мы получаем значение, сфабрикованное хакерами. Как предотвратить такой случай?
7370

7471
Предположим, у нас есть следующий `<select>`:
@@ -79,7 +76,7 @@ Let's say we require an item from our drop down list, but instead we get a value
7976
<option value="banana">Банан</option>
8077
</select>
8178

82-
Для очистки вводимых данных можно использовать слдедующую стратегию:
79+
Для очистки вводимых данных можно использовать следующую стратегию:
8380

8481
slice:=[]string{"apple","pear","banana"}
8582

@@ -94,7 +91,7 @@ Let's say we require an item from our drop down list, but instead we get a value
9491

9592
## Радиокнопки
9693

97-
Если нам нужно узнать пол пользователя, мы можем вопсользоваться радиокнопками, которые будут возвращать 1 для мужчины и 2 для женщины. Однако, какой-нибудь маленький ребенок, прочитав свою первую книгу по HTTP, захочет послать Вам 3. Будет ли готова Ваша программа обработать это исключение? Как Вы увидите, для того, чтобы узнать, послано ли нам значение из нужного диапазона, мы используем тот же метод, что и для выпадающих списков:
94+
Если нам нужно узнать пол пользователя, мы можем воспользоваться радиокнопками, которые будут возвращать "1" для мужчины и "2" для женщины. Однако, какой-нибудь маленький ребенок, прочитав свою первую книгу по HTTP, захочет послать Вам "3". Будет ли готова Ваша программа обработать это исключение? Как Вы увидите, для того, чтобы узнать, послано ли нам значение из нужного диапазона, мы используем тот же метод, что и для выпадающих списков:
9895

9996
<input type="radio" name="gender" value="1">Мужчина
10097
<input type="radio" name="gender" value="2">Женщина

0 commit comments

Comments
 (0)