-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenv.go
88 lines (82 loc) · 1.8 KB
/
env.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package suexec
import (
"os"
"strings"
)
const AP_SAFE_PATH = "PATH=/usr/local/bin:/usr/bin:/bin"
var safe_env_lst = []string{
/* variable name starts with */
"HTTP_",
"SSL_",
/* variable name is */
"AUTH_TYPE=",
"CONTENT_LENGTH=",
"CONTENT_TYPE=",
"CONTEXT_DOCUMENT_ROOT=",
"CONTEXT_PREFIX=",
"DATE_GMT=",
"DATE_LOCAL=",
"DOCUMENT_NAME=",
"DOCUMENT_PATH_INFO=",
"DOCUMENT_ROOT=",
"DOCUMENT_URI=",
"GATEWAY_INTERFACE=",
"HTTPS=",
"LAST_MODIFIED=",
"PATH_INFO=",
"PATH_TRANSLATED=",
"QUERY_STRING=",
"QUERY_STRING_UNESCAPED=",
"REMOTE_ADDR=",
"REMOTE_HOST=",
"REMOTE_IDENT=",
"REMOTE_PORT=",
"REMOTE_USER=",
"REDIRECT_ERROR_NOTES=",
"REDIRECT_HANDLER=",
"REDIRECT_QUERY_STRING=",
"REDIRECT_REMOTE_USER=",
"REDIRECT_SCRIPT_FILENAME=",
"REDIRECT_STATUS=",
"REDIRECT_URL=",
"REQUEST_METHOD=",
"REQUEST_URI=",
"REQUEST_SCHEME=",
"SCRIPT_FILENAME=",
"SCRIPT_NAME=",
"SCRIPT_URI=",
"SCRIPT_URL=",
"SERVER_ADMIN=",
"SERVER_NAME=",
"SERVER_ADDR=",
"SERVER_PORT=",
"SERVER_PROTOCOL=",
"SERVER_SIGNATURE=",
"SERVER_SOFTWARE=",
"UNIQUE_ID=",
"USER_NAME=",
"TZ=",
}
func CleanEnv() []string {
environ := os.Environ()
os.Clearenv()
return cleanupEnv(environ, safe_env_lst)
}
/* While cleaning the environment, the environment should be clean.
* (e.g. malloc() may get the name of a file for writing debugging info.
* Bad news if MALLOC_DEBUG_FILE is set to /etc/passwd. Sprintf() may be
* susceptible to bad locale settings....)
* (from PR 2790)
*/
func cleanupEnv(environ []string, safe_env_lst []string) []string {
cleanenv := []string{}
for cidx := range environ {
for idx := range safe_env_lst {
if strings.HasPrefix(environ[cidx], safe_env_lst[idx]) {
cleanenv = append(cleanenv, environ[cidx])
}
}
}
cleanenv = append(cleanenv, AP_SAFE_PATH)
return cleanenv
}