Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dirk Dankhoff
ISPConfig 3
Commits
5af0cfd9
Commit
5af0cfd9
authored
Jun 03, 2015
by
Till Brehm
Browse files
Extended the CSRF check.
parent
3f19613b
Changes
15
Hide whitespace changes
Inline
Side-by-side
interface/lib/classes/auth.inc.php
View file @
5af0cfd9
...
...
@@ -201,6 +201,56 @@ class auth {
$salt
.
=
"$"
;
return
crypt
(
$cleartext_password
,
$salt
);
}
public
function
csrf_token_get
(
$form_name
)
{
/* CSRF PROTECTION */
// generate csrf protection id and key
$_csrf_id
=
uniqid
(
$form_name
.
'_'
);
// form id
$_csrf_key
=
sha1
(
uniqid
(
microtime
(
true
),
true
));
// the key
if
(
!
isset
(
$_SESSION
[
'_csrf'
]))
$_SESSION
[
'_csrf'
]
=
array
();
if
(
!
isset
(
$_SESSION
[
'_csrf_timeout'
]))
$_SESSION
[
'_csrf_timeout'
]
=
array
();
$_SESSION
[
'_csrf'
][
$_csrf_id
]
=
$_csrf_key
;
$_SESSION
[
'_csrf_timeout'
][
$_csrf_id
]
=
time
()
+
3600
;
// timeout hash in 1 hour
return
array
(
'csrf_id'
=>
$_csrf_id
,
'csrf_key'
=>
$_csrf_key
);
}
public
function
csrf_token_check
()
{
global
$app
;
if
(
isset
(
$_POST
)
&&
is_array
(
$_POST
))
{
$_csrf_valid
=
false
;
if
(
isset
(
$_POST
[
'_csrf_id'
])
&&
isset
(
$_POST
[
'_csrf_key'
]))
{
$_csrf_id
=
trim
(
$_POST
[
'_csrf_id'
]);
$_csrf_key
=
trim
(
$_POST
[
'_csrf_key'
]);
if
(
isset
(
$_SESSION
[
'_csrf'
])
&&
isset
(
$_SESSION
[
'_csrf'
][
$_csrf_id
])
&&
isset
(
$_SESSION
[
'_csrf_timeout'
])
&&
isset
(
$_SESSION
[
'_csrf_timeout'
][
$_csrf_id
]))
{
if
(
$_SESSION
[
'_csrf'
][
$_csrf_id
]
===
$_csrf_key
&&
$_SESSION
[
'_csrf_timeout'
]
>=
time
())
$_csrf_valid
=
true
;
}
}
if
(
$_csrf_valid
!==
true
)
{
$app
->
log
(
'CSRF attempt blocked. Referer: '
.
(
isset
(
$_SERVER
[
'HTTP_REFERER'
])
?
$_SERVER
[
'HTTP_REFERER'
]
:
'unknown'
),
LOGLEVEL_WARN
);
$app
->
error
(
$app
->
lng
(
'err_csrf_attempt_blocked'
));
}
$_SESSION
[
'_csrf'
][
$_csrf_id
]
=
null
;
$_SESSION
[
'_csrf_timeout'
][
$_csrf_id
]
=
null
;
unset
(
$_SESSION
[
'_csrf'
][
$_csrf_id
]);
unset
(
$_SESSION
[
'_csrf_timeout'
][
$_csrf_id
]);
if
(
isset
(
$_SESSION
[
'_csrf_timeout'
])
&&
is_array
(
$_SESSION
[
'_csrf_timeout'
]))
{
$to_unset
=
array
();
foreach
(
$_SESSION
[
'_csrf_timeout'
]
as
$_csrf_id
=>
$timeout
)
{
if
(
$timeout
<
time
())
$to_unset
[]
=
$_csrf_id
;
}
foreach
(
$to_unset
as
$_csrf_id
)
{
$_SESSION
[
'_csrf'
][
$_csrf_id
]
=
null
;
$_SESSION
[
'_csrf_timeout'
][
$_csrf_id
]
=
null
;
unset
(
$_SESSION
[
'_csrf'
][
$_csrf_id
]);
unset
(
$_SESSION
[
'_csrf_timeout'
][
$_csrf_id
]);
}
unset
(
$to_unset
);
}
}
}
}
...
...
interface/lib/classes/tform.inc.php
View file @
5af0cfd9
...
...
@@ -386,12 +386,17 @@ class tform {
/* CSRF PROTECTION */
// generate csrf protection id and key
$_csrf_id
=
uniqid
(
$this
->
formDef
[
'name'
]
.
'_'
);
/*
$_csrf_id = uniqid($this->formDef['name'] . '_');
$_csrf_value = sha1(uniqid(microtime(true), true));
if(!isset($_SESSION['_csrf'])) $_SESSION['_csrf'] = array();
if(!isset($_SESSION['_csrf_timeout'])) $_SESSION['_csrf_timeout'] = array();
$_SESSION['_csrf'][$_csrf_id] = $_csrf_value;
$_SESSION['_csrf_timeout'][$_csrf_id] = time() + 3600; // timeout hash in 1 hour
*/
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
$this
->
formDef
[
'name'
]);
$_csrf_id
=
$csrf_token
[
'csrf_id'
];
$_csrf_value
=
$csrf_token
[
'csrf_key'
];
$this
->
formDef
[
'tabs'
][
$tab
][
'fields'
][
'_csrf_id'
]
=
array
(
'datatype'
=>
'VARCHAR'
,
'formtype'
=>
'TEXT'
,
...
...
@@ -669,6 +674,7 @@ class tform {
//$this->errorMessage = '';
/* CSRF PROTECTION */
if
(
isset
(
$_POST
)
&&
is_array
(
$_POST
))
{
$_csrf_valid
=
false
;
if
(
isset
(
$_POST
[
'_csrf_id'
])
&&
isset
(
$_POST
[
'_csrf_key'
]))
{
...
...
interface/web/admin/language_add.php
View file @
5af0cfd9
...
...
@@ -65,6 +65,10 @@ $app->tpl->setVar('language_option', $language_option);
$app
->
tpl
->
setVar
(
'error'
,
$error
);
if
(
isset
(
$_POST
[
'lng_new'
])
&&
strlen
(
$_POST
[
'lng_new'
])
==
2
&&
$error
==
''
)
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
$lng_new
=
$_POST
[
'lng_new'
];
if
(
!
preg_match
(
"/^[a-z]
{
2
}
$/i"
,
$lng_new
))
die
(
'unallowed characters in language name.'
);
...
...
@@ -94,6 +98,11 @@ if(isset($_POST['lng_new']) && strlen($_POST['lng_new']) == 2 && $error == '') {
$app
->
tpl
->
setVar
(
'msg'
,
$msg
);
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'language_add'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
//* load language file
$lng_file
=
'lib/lang/'
.
$_SESSION
[
's'
][
'language'
]
.
'_language_add.lng'
;
include
$lng_file
;
...
...
interface/web/admin/language_complete.php
View file @
5af0cfd9
...
...
@@ -67,6 +67,9 @@ $app->tpl->setVar('error', $error);
// Export the language file
if
(
isset
(
$_POST
[
'lng_select'
])
&&
$error
==
''
)
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
// complete the global langauge file
merge_langfile
(
ISPC_LIB_PATH
.
"/lang/"
.
$selected_language
.
".lng"
,
ISPC_LIB_PATH
.
"/lang/en.lng"
);
...
...
@@ -157,6 +160,11 @@ function merge_langfile($langfile, $masterfile) {
$app
->
tpl
->
setVar
(
'msg'
,
$msg
);
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'language_merge'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
//* load language file
$lng_file
=
'lib/lang/'
.
$_SESSION
[
's'
][
'language'
]
.
'_language_complete.lng'
;
include
$lng_file
;
...
...
interface/web/admin/language_edit.php
View file @
5af0cfd9
...
...
@@ -55,6 +55,10 @@ $msg = '';
//* Save data
if
(
isset
(
$_POST
[
'records'
])
&&
is_array
(
$_POST
[
'records'
]))
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
$file_content
=
"<?php
\n
"
;
foreach
(
$_POST
[
'records'
]
as
$key
=>
$val
)
{
$val
=
stripslashes
(
$val
);
...
...
@@ -93,6 +97,11 @@ if(isset($wb) && is_array($wb)) {
unset
(
$wb
);
}
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'language_edit'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
//* load language file
$lng_file
=
'lib/lang/'
.
$_SESSION
[
's'
][
'language'
]
.
'_language_edit.lng'
;
...
...
interface/web/admin/language_import.php
View file @
5af0cfd9
...
...
@@ -129,6 +129,10 @@ $error = '';
// Export the language file
if
(
isset
(
$_FILES
[
'file'
][
'name'
])
&&
is_uploaded_file
(
$_FILES
[
'file'
][
'tmp_name'
]))
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
$lines
=
file
(
$_FILES
[
'file'
][
'tmp_name'
]);
// initial check
$parts
=
explode
(
'|'
,
$lines
[
0
]);
...
...
@@ -183,6 +187,11 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
$app
->
tpl
->
setVar
(
'msg'
,
$msg
);
$app
->
tpl
->
setVar
(
'error'
,
$error
);
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'language_import'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
//* load language file
$lng_file
=
'lib/lang/'
.
$_SESSION
[
's'
][
'language'
]
.
'_language_import.lng'
;
include
$lng_file
;
...
...
interface/web/admin/remote_action_ispcupdate.php
View file @
5af0cfd9
...
...
@@ -66,6 +66,10 @@ $msg = '';
//* Note: Disabled post action
if
(
1
==
0
&&
isset
(
$_POST
[
'server_select'
]))
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
$server
=
$_POST
[
'server_select'
];
$servers
=
array
();
if
(
$server
==
'*'
)
{
...
...
@@ -95,6 +99,11 @@ if (1 == 0 && isset($_POST['server_select'])) {
$app
->
tpl
->
setVar
(
'msg'
,
$msg
);
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'ispupdate'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
$app
->
tpl
->
setVar
(
$wb
);
$app
->
tpl_defaults
();
...
...
interface/web/admin/remote_action_osupdate.php
View file @
5af0cfd9
...
...
@@ -62,6 +62,10 @@ $msg = '';
* If the user wants to do the action, write this to our db
*/
if
(
isset
(
$_POST
[
'server_select'
]))
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
$server
=
$_POST
[
'server_select'
];
$servers
=
array
();
if
(
$server
==
'*'
)
{
...
...
@@ -91,6 +95,11 @@ if (isset($_POST['server_select'])) {
$app
->
tpl
->
setVar
(
'msg'
,
$msg
);
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'osupdate'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
$app
->
tpl
->
setVar
(
$wb
);
$app
->
tpl_defaults
();
...
...
interface/web/client/client_message.php
View file @
5af0cfd9
...
...
@@ -51,7 +51,10 @@ $error = '';
//* Save data
if
(
isset
(
$_POST
)
&&
count
(
$_POST
)
>
1
)
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
//* Check values
if
(
!
preg_match
(
"/^\w+[\w\.\-\+]*\w
{
0,}@\w+[\w.-]*\w+\.[a-zA-Z0-9\-]{2,30
}
$/i"
,
$_POST
[
'sender'
]))
$error
.
=
$wb
[
'sender_invalid_error'
]
.
'<br />'
;
if
(
empty
(
$_POST
[
'subject'
]))
$error
.
=
$wb
[
'subject_invalid_error'
]
.
'<br />'
;
...
...
@@ -161,6 +164,11 @@ if(!empty($field_names) && is_array($field_names)){
}
$app
->
tpl
->
setVar
(
'message_variables'
,
trim
(
$message_variables
));
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'client_message'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
$app
->
tpl
->
setVar
(
'okmsg'
,
$msg
);
$app
->
tpl
->
setVar
(
'error'
,
$error
);
...
...
interface/web/themes/default/templates/form.tpl.htm
View file @
5af0cfd9
<tmpl_dyninclude
name=
"content_tpl"
>
\ No newline at end of file
<tmpl_dyninclude
name=
"content_tpl"
>
<input
type=
"hidden"
name=
"_csrf_id"
value=
"{tmpl_var name='_csrf_id'}"
/>
<input
type=
"hidden"
name=
"_csrf_key"
value=
"{tmpl_var name='_csrf_key'}"
/>
\ No newline at end of file
interface/web/tools/dns_import_tupa.php
View file @
5af0cfd9
...
...
@@ -45,6 +45,9 @@ $error = '';
// Resyncing dns zones
if
(
isset
(
$_POST
[
'start'
])
&&
$_POST
[
'start'
]
==
1
)
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
//* Set variable sin template
$app
->
tpl
->
setVar
(
'dbhost'
,
$_POST
[
'dbhost'
]);
...
...
@@ -151,6 +154,10 @@ if(isset($_POST['start']) && $_POST['start'] == 1) {
$app
->
tpl
->
setVar
(
'msg'
,
$msg
);
$app
->
tpl
->
setVar
(
'error'
,
$error
);
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'dns_import'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
$app
->
tpl_defaults
();
$app
->
tpl
->
pparse
();
...
...
interface/web/tools/import_ispconfig.php
View file @
5af0cfd9
...
...
@@ -49,6 +49,10 @@ include $lng_file;
$app
->
tpl
->
setVar
(
$wb
);
if
(
isset
(
$_POST
[
'connected'
]))
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
$connected
=
$app
->
functions
->
intval
(
$_POST
[
'connected'
]);
if
(
$connected
==
0
)
{
...
...
@@ -133,6 +137,11 @@ $app->tpl->setVar('remote_session_id', $remote_session_id);
$app
->
tpl
->
setVar
(
'msg'
,
$msg
);
$app
->
tpl
->
setVar
(
'error'
,
$error
);
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'ispconfig_import'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
$app
->
tpl_defaults
();
$app
->
tpl
->
pparse
();
...
...
interface/web/tools/import_plesk.php
View file @
5af0cfd9
...
...
@@ -144,6 +144,9 @@ $error = '';
// Start migrating plesk data
if
(
isset
(
$_POST
[
'start'
])
&&
$_POST
[
'start'
]
==
1
)
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
//* Set variable sin template
$app
->
tpl
->
setVar
(
'dbhost'
,
$_POST
[
'dbhost'
]);
$app
->
tpl
->
setVar
(
'dbname'
,
$_POST
[
'dbname'
]);
...
...
@@ -1209,6 +1212,10 @@ if(isset($_POST['start']) && $_POST['start'] == 1) {
$app
->
tpl
->
setVar
(
'msg'
,
$msg
);
$app
->
tpl
->
setVar
(
'error'
,
$error
);
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'plesk_import'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
$app
->
tpl_defaults
();
$app
->
tpl
->
pparse
();
...
...
interface/web/tools/resync.php
View file @
5af0cfd9
...
...
@@ -48,6 +48,11 @@ $lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_resync.lng';
include
$lng_file
;
$app
->
tpl
->
setVar
(
$wb
);
if
(
isset
(
$_POST
)
&&
count
(
$_POST
)
>
1
)
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
}
//* Resyncing websites
if
(
isset
(
$_POST
[
'resync_sites'
])
&&
$_POST
[
'resync_sites'
]
==
1
)
{
$db_table
=
'web_domain'
;
...
...
@@ -217,6 +222,11 @@ if(isset($_POST['resync_client']) && $_POST['resync_client'] == 1) {
$app
->
tpl
->
setVar
(
'msg'
,
$msg
);
$app
->
tpl
->
setVar
(
'error'
,
$error
);
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'tools_resync'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
$app
->
tpl_defaults
();
$app
->
tpl
->
pparse
();
...
...
interface/web/vm/openvz_action.php
View file @
5af0cfd9
...
...
@@ -17,6 +17,11 @@ $notify_msg = '';
if
(
$vm_id
==
0
)
die
(
'Invalid VM ID'
);
if
(
isset
(
$_POST
)
&&
count
(
$_POST
)
>
1
)
{
//* CSRF Check
$app
->
auth
->
csrf_token_check
();
}
$vm
=
$app
->
db
->
queryOneRecord
(
"SELECT server_id, veid FROM openvz_vm WHERE vm_id =
$vm_id
"
);
$veid
=
$app
->
functions
->
intval
(
$vm
[
'veid'
]);
$server_id
=
$app
->
functions
->
intval
(
$vm
[
'server_id'
]);
...
...
@@ -141,6 +146,11 @@ if($action == 'show') {
$app
->
tpl
->
setVar
(
$options
);
$app
->
tpl
->
setVar
(
'error'
,
$error_msg
);
//* SET csrf token
$csrf_token
=
$app
->
auth
->
csrf_token_get
(
'openvz_action'
);
$app
->
tpl
->
setVar
(
'_csrf_id'
,
$csrf_token
[
'csrf_id'
]);
$app
->
tpl
->
setVar
(
'_csrf_key'
,
$csrf_token
[
'csrf_key'
]);
$app
->
tpl_defaults
();
$app
->
tpl
->
pparse
();
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment