add csrf protection, check if target is equal source folder

This commit is contained in:
Uwe Steinmann 2021-01-25 09:07:12 +01:00
parent 64152e0d0b
commit c5694c21b4
4 changed files with 52 additions and 32 deletions

View File

@ -20,6 +20,7 @@
include("../inc/inc.Settings.php"); include("../inc/inc.Settings.php");
include("../inc/inc.LogInit.php"); include("../inc/inc.LogInit.php");
include("../inc/inc.Utils.php");
include("../inc/inc.Language.php"); include("../inc/inc.Language.php");
include("../inc/inc.Init.php"); include("../inc/inc.Init.php");
include("../inc/inc.Extension.php"); include("../inc/inc.Extension.php");
@ -27,6 +28,11 @@ include("../inc/inc.DBInit.php");
include("../inc/inc.ClassUI.php"); include("../inc/inc.ClassUI.php");
include("../inc/inc.Authentication.php"); include("../inc/inc.Authentication.php");
/* Check if the form data comes from a trusted request */
if(!checkFormKey('movedocument', 'GET')) {
UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_request_token"))),getMLText("invalid_request_token"));
}
if (!isset($_GET["documentid"]) || !is_numeric($_GET["documentid"]) || intval($_GET["documentid"])<1) { if (!isset($_GET["documentid"]) || !is_numeric($_GET["documentid"]) || intval($_GET["documentid"])<1) {
UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id"));
} }
@ -62,15 +68,18 @@ if($document->isLocked()) {
} }
} }
if ($targetid == $oldFolder->getID()) {
UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("target_equals_source_folder"));
}
/* Check if name already exists in the folder */ /* Check if name already exists in the folder */
if(!$settings->_enableDuplicateDocNames) { if(!$settings->_enableDuplicateDocNames) {
if($targetFolder->hasDocumentByName($document->getName())) { if($targetFolder->hasDocumentByName($document->getName())) {
UI::exitError(getMLText("folder_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("document_duplicate_name")); UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("document_duplicate_name"));
} }
} }
if ($targetid != $oldFolder->getID()) { if ($document->setFolder($targetFolder)) {
if ($document->setFolder($targetFolder)) {
// Send notification to subscribers. // Send notification to subscribers.
if($notifier) { if($notifier) {
$nl1 = $oldFolder->getNotifyList(); $nl1 = $oldFolder->getNotifyList();
@ -99,9 +108,8 @@ if ($targetid != $oldFolder->getID()) {
// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params); // $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params);
} }
} else { } else {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured"));
}
} }
add_log_line(); add_log_line();

View File

@ -20,6 +20,7 @@
include("../inc/inc.Settings.php"); include("../inc/inc.Settings.php");
include("../inc/inc.LogInit.php"); include("../inc/inc.LogInit.php");
include("../inc/inc.Utils.php");
include("../inc/inc.Language.php"); include("../inc/inc.Language.php");
include("../inc/inc.Init.php"); include("../inc/inc.Init.php");
include("../inc/inc.Extension.php"); include("../inc/inc.Extension.php");
@ -27,6 +28,11 @@ include("../inc/inc.DBInit.php");
include("../inc/inc.ClassUI.php"); include("../inc/inc.ClassUI.php");
include("../inc/inc.Authentication.php"); include("../inc/inc.Authentication.php");
/* Check if the form data comes from a trusted request */
if(!checkFormKey('movefolder', 'GET')) {
UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token"));
}
if (!isset($_GET["folderid"]) || !is_numeric($_GET["folderid"]) || intval($_GET["folderid"])<1) { if (!isset($_GET["folderid"]) || !is_numeric($_GET["folderid"]) || intval($_GET["folderid"])<1) {
UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id"));
} }
@ -52,6 +58,11 @@ if (!is_object($targetFolder)) {
UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id"));
} }
$oldFolder = $folder->getParent();
if ($targetid == $oldFolder->getID()) {
UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("target_equals_source_folder"));
}
if($folder->isSubFolder($targetFolder)) { if($folder->isSubFolder($targetFolder)) {
UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("invalid_target_folder")); UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("invalid_target_folder"));
} }
@ -67,7 +78,6 @@ if(!$settings->_enableDuplicateSubFolderNames) {
} }
} }
$oldFolder = $folder->getParent();
if ($folder->setParent($targetFolder)) { if ($folder->setParent($targetFolder)) {
// Send notification to subscribers. // Send notification to subscribers.
if($notifier) { if($notifier) {

View File

@ -52,6 +52,7 @@ class SeedDMS_View_MoveDocument extends SeedDMS_Bootstrap_Style {
$this->contentContainerStart('warning'); $this->contentContainerStart('warning');
?> ?>
<form class="form-horizontal" action="../op/op.MoveDocument.php" name="form1"> <form class="form-horizontal" action="../op/op.MoveDocument.php" name="form1">
<?php echo createHiddenFieldWithKey('movedocument'); ?>
<input type="hidden" name="documentid" value="<?php print $document->getID();?>"> <input type="hidden" name="documentid" value="<?php print $document->getID();?>">
<?php <?php
$this->formField(getMLText("choose_target_folder"), $this->getFolderChooserHtml("form1", M_READWRITE, -1, $target)); $this->formField(getMLText("choose_target_folder"), $this->getFolderChooserHtml("form1", M_READWRITE, -1, $target));

View File

@ -52,6 +52,7 @@ class SeedDMS_View_MoveFolder extends SeedDMS_Bootstrap_Style {
?> ?>
<form class="form-horizontal" action="../op/op.MoveFolder.php" name="form1"> <form class="form-horizontal" action="../op/op.MoveFolder.php" name="form1">
<?php echo createHiddenFieldWithKey('movefolder'); ?>
<input type="hidden" name="folderid" value="<?php print $folder->getID();?>"> <input type="hidden" name="folderid" value="<?php print $folder->getID();?>">
<input type="hidden" name="showtree" value="<?php echo showtree();?>"> <input type="hidden" name="showtree" value="<?php echo showtree();?>">
<?php <?php