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: ru/04.2.md
+9-12Lines changed: 9 additions & 12 deletions
Original file line number
Diff line number
Diff line change
@@ -2,23 +2,22 @@
2
2
3
3
Одним из наиболее важных правил веб-разработки является то, что нельзя доверять никаким данным, поступившим из пользовательских форм. Вы должны проверять все входящие данные перед тем, как их использовать. Множество веб-сайтов было затронуто этой очень серьезной проблемой.
4
4
5
-
Существует два наиболее часто используемых способа проверить данные. Один - это проверка средствами Javascript на стороне браузера, а второй - проверка на стороне сервера. В этом разделе мы поговорим о проверке данных средствмаи сервера.
5
+
Существует два наиболее часто используемых способа проверить данные. Один - это проверка средствами Javascript на стороне браузера, а второй - проверка на стороне сервера. В этом разделе мы поговорим о проверке данных средствами сервера.
6
6
7
7
8
8
## Поля, обязательные к заполнению
9
9
10
-
Иногода требуется, чтобы пользователь заполнил определенные поля, но они этого не делают; например, в предыдущем разделе, когда нам тербовалось имя пользователя. Мы можем использовать функцию `len`, чтобы получить длину строки в поле, чтобы быть уверенными, что пользователь заполнил его:
10
+
Иногда требуется, чтобы пользователь заполнил определенные поля, но он этого не делает; например, в предыдущем разделе, когда нам требовалось имя пользователя. Чтобы получить длину строки в поле и быть уверенными, что пользователь заполнил его, мы можем использовать функцию `len`:
11
11
12
12
if len(r.Form["username"][0])==0{
13
13
// код, выполняемый, если поле оказалось пустым
14
14
}
15
15
16
-
`r.Form` обрабатывает незаполненные поля различными способами в зависимтсти от их типа. Для пустых текстовых полей, текстовых областей и загружаемых файлов она возвращает пустую строку; для радиокнопок и чекбоксов просто не создаются соответствующие значения. Вместо этого при попытке доступа к ним Вы получите ошибку. Поэтому для получения значений безопаснее использовать `r.Form.Get()`, так как эта команда всегда возвращает пустые значения. С другой стороны, `r.Form.Get()` может получить только одно значение за один вызов, поэтому длят того, чтобы получиьт карту значений, нужно использовать `r.Form`.
16
+
`r.Form` обрабатывает незаполненные поля различными способами в зависимости от их типа. Для пустых текстовых полей, текстовых областей и загружаемых файлов она возвращает пустую строку; для радиокнопок и чекбоксов просто не создаются соответствующие значения. Вместо этого при попытке доступа к ним Вы получите ошибку. Поэтому для получения значений безопаснее использовать `r.Form.Get()`, так как эта команда всегда возвращает пустые значения. С другой стороны, `r.Form.Get()` может получить только одно значение за один вызов, поэтому для того, чтобы получить карту значений, нужно использовать `r.Form`.
17
17
18
18
## Числа
19
19
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`, а затем уже работать с ним:
22
21
23
22
getint,err:=strconv.Atoi(r.Form.Get("age"))
24
23
if err!=nil{
@@ -36,7 +35,7 @@ Sometimes you only need numbers for the field value. For example, let's say that
36
35
return false
37
36
}
38
37
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.
40
39
41
40
## Китайские символы
42
41
@@ -48,13 +47,12 @@ Sometimes you only need numbers for the field value. For example, let's say that
48
47
49
48
## Английские буквы
50
49
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谢. Чтобы легко осуществить такую проверку, можно воспользоваться регулярными выражениями:
53
51
54
52
if m, _ := regexp.MatchString("^[a-zA-Z]+$", r.Form.Get("engname")); !m {
55
53
return false
56
54
}
57
-
(***Прим. переводчика на русский язык - для русского языка регулярка будет выглядеть как "[А-аЯ-яЁё]+$"***)
55
+
(***Прим. переводчика на русский язык - для русского языка регулярка в данном случае будет выглядеть как "[А-аЯ-яЁё]+$"***)
58
56
59
57
## Адрес E-mail
60
58
@@ -68,7 +66,6 @@ Sometimes we need users to input only English letters. For example, we require s
68
66
69
67
## Выпадающий список
70
68
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?
72
69
Допустим, нам нужно получить значение из выпадающего списка, но вместо этого мы получаем значение, сфабрикованное хакерами. Как предотвратить такой случай?
73
70
74
71
Предположим, у нас есть следующий `<select>`:
@@ -79,7 +76,7 @@ Let's say we require an item from our drop down list, but instead we get a value
79
76
<option value="banana">Банан</option>
80
77
</select>
81
78
82
-
Для очистки вводимых данных можно использовать слдедующую стратегию:
79
+
Для очистки вводимых данных можно использовать следующую стратегию:
83
80
84
81
slice:=[]string{"apple","pear","banana"}
85
82
@@ -94,7 +91,7 @@ Let's say we require an item from our drop down list, but instead we get a value
94
91
95
92
## Радиокнопки
96
93
97
-
Если нам нужно узнать пол пользователя, мы можем вопсользоваться радиокнопками, которые будут возвращать 1 для мужчины и 2 для женщины. Однако, какой-нибудь маленький ребенок, прочитав свою первую книгу по HTTP, захочет послать Вам 3. Будет ли готова Ваша программа обработать это исключение? Как Вы увидите, для того, чтобы узнать, послано ли нам значение из нужного диапазона, мы используем тот же метод, что и для выпадающих списков:
94
+
Если нам нужно узнать пол пользователя, мы можем воспользоваться радиокнопками, которые будут возвращать "1" для мужчины и "2" для женщины. Однако, какой-нибудь маленький ребенок, прочитав свою первую книгу по HTTP, захочет послать Вам "3". Будет ли готова Ваша программа обработать это исключение? Как Вы увидите, для того, чтобы узнать, послано ли нам значение из нужного диапазона, мы используем тот же метод, что и для выпадающих списков:
0 commit comments