Navigation Menu

Skip to content

Commit

Permalink
added sanitizeUserString and sanitizeEmail functions
Browse files Browse the repository at this point in the history
added sanitize to uploaded image names
added sanitize to tabs, categories, users and bookmarks
removed svg files from approved image lists
  • Loading branch information
causefx committed Apr 11, 2022
1 parent 8cacc07 commit a09d834
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 5 deletions.
72 changes: 69 additions & 3 deletions api/classes/organizr.class.php
Expand Up @@ -1895,7 +1895,7 @@ public function uploadImage()
$tempFile = $_FILES['file']['tmp_name'];
$targetPath = $this->root . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'userTabs' . DIRECTORY_SEPARATOR;
$this->makeDir($targetPath);
$targetFile = $targetPath . $_FILES['file']['name'];
$targetFile = $targetPath . $this->sanitizeUserString($_FILES['file']['name']);
$this->setAPIResponse(null, pathinfo($_FILES['file']['name'], PATHINFO_BASENAME) . ' has been uploaded', null);
return move_uploaded_file($tempFile, $targetFile);
}
Expand Down Expand Up @@ -4873,7 +4873,7 @@ public function addTab($array)
$array['type'] = ($array['type']) ?? 1;
$array['order'] = ($array['order']) ?? $this->getNextTabOrder() + 1;
if (array_key_exists('name', $array)) {
$array['name'] = htmlspecialchars($array['name']);
$array['name'] = $this->sanitizeUserString($array['name']);
if ($this->isTabNameTaken($array['name'])) {
$this->setAPIResponse('error', 'Tab name: ' . $array['name'] . ' is already taken', 409);
return false;
Expand Down Expand Up @@ -4923,7 +4923,7 @@ public function updateTab($id, $array)
return false;
}
if (array_key_exists('name', $array)) {
$array['name'] = htmlspecialchars($array['name']);
$array['name'] = $this->sanitizeUserString($array['name']);
if ($this->isTabNameTaken($array['name'], $id)) {
$this->setAPIResponse('error', 'Tab name: ' . $array['name'] . ' is already taken', 409);
return false;
Expand Down Expand Up @@ -4995,6 +4995,7 @@ public function addCategory($array)
$array['order'] = ($array['order']) ?? $this->getNextCategoryOrder() + 1;
$array['category_id'] = ($array['category_id']) ?? $this->getNextCategoryId() + 1;
if (array_key_exists('category', $array)) {
$array['category'] = $this->sanitizeUserString($array['category']);
if ($this->isCategoryNameTaken($array['category'])) {
$this->setAPIResponse('error', 'Category name: ' . $array['category'] . ' is already taken', 409);
return false;
Expand All @@ -5005,6 +5006,9 @@ public function addCategory($array)
}
if (!array_key_exists('image', $array)) {
$this->setAPIResponse('error', 'Category image was not supplied', 422);
return false;
} else {
$array['image'] = $this->sanitizeUserString($array['image']);
}
$response = [
array(
Expand Down Expand Up @@ -5039,11 +5043,15 @@ public function updateCategory($id, $array)
return false;
}
if (array_key_exists('category', $array)) {
$array['category'] = $this->sanitizeUserString($array['category']);
if ($this->isCategoryNameTaken($array['category'], $id)) {
$this->setAPIResponse('error', 'Category name: ' . $array['category'] . ' is already taken', 409);
return false;
}
}
if (array_key_exists('image', $array)) {
$array['image'] = $this->sanitizeUserString($array['image']);
}
if (array_key_exists('default', $array)) {
if ($array['default']) {
$this->clearCategoryDefault();
Expand Down Expand Up @@ -6184,6 +6192,21 @@ public function allEmbyUsers($newOnly = false)
return false;
}

public function validateEmail($email)
{
return filter_var(trim($email), FILTER_VALIDATE_EMAIL);
}

public function sanitizeEmail($email)
{
return filter_var(trim($email), FILTER_SANITIZE_EMAIL);
}

public function sanitizeUserString($string)
{
return htmlspecialchars(trim($string));
}

public function updateUser($id, $array)
{
if (!$id) {
Expand Down Expand Up @@ -6211,6 +6234,7 @@ public function updateUser($id, $array)
$this->setAPIResponse('error', 'Username was set but empty', 409);
return false;
}
$array['username'] = $this->sanitizeUserString($array['username']);
if ($this->usernameTaken($array['username'], $array['username'], $id)) {
$this->setAPIResponse('error', 'Username: ' . $array['username'] . ' is already taken', 409);
return false;
Expand All @@ -6221,6 +6245,12 @@ public function updateUser($id, $array)
$this->setAPIResponse('error', 'Email was set but empty', 409);
return false;
}
if ($this->validateEmail($array['email'])) {
$array['email'] = $this->sanitizeEmail($array['email']);
} else {
$this->setResponse(409, 'Email is not a valid email', ['email' => $array['email']]);
return false;
}
if ($this->usernameTaken($array['email'], $array['email'], $id)) {
$this->setAPIResponse('error', 'Email: ' . $array['email'] . ' is already taken', 409);
return false;
Expand Down Expand Up @@ -6260,6 +6290,9 @@ public function updateUser($id, $array)
}
$array['password'] = password_hash($array['password'], PASSWORD_BCRYPT);
}
if (array_key_exists('image', $array)) {
$array['image'] = $this->sanitizeUserString($array['image']);
}
if (array_key_exists('register_date', $array)) {
$this->setAPIResponse('error', 'Cannot update register date', 409);
return false;
Expand Down Expand Up @@ -6317,10 +6350,30 @@ public function addUser($array)
$this->setAPIResponse('error', 'Username was not supplied', 409);
return false;
}
if ($username == '') {
$this->setResponse(409, 'Username was set but empty');
return false;
} else {
$username = $this->sanitizeUserString($username);
}
if (!$password) {
$this->setAPIResponse('error', 'Password was not supplied', 409);
return false;
}
if (!$email) {
$this->setAPIResponse('error', 'Email was set not supplied', 409);
return false;
}
if ($email == '') {
$this->setAPIResponse('error', 'Email was set but empty', 409);
return false;
}
if ($this->validateEmail($email)) {
$email = $this->sanitizeEmail($email);
} else {
$this->setResponse(409, 'Email is not a valid email', ['email' => $email]);
return false;
}
$this->setLoggerChannel('User Management');
if ($this->createUser($username, $password, $email)) {
$this->logger->info('Account created for [' . $username . ']');
Expand All @@ -6340,10 +6393,21 @@ public function createUser($username, $password, $email = null)
$this->setAPIResponse('error', 'Username was set but empty', 409);
return false;
}
$username = $this->sanitizeUserString($username);
if (!$password) {
$this->setAPIResponse('error', 'Password was set but empty', 409);
return false;
}
if ($email == '') {
$this->setAPIResponse('error', 'Email was set but empty', 409);
return false;
}
if ($this->validateEmail($email)) {
$email = $this->sanitizeEmail($email);
} else {
$this->setResponse(409, 'Email is not a valid email', ['email' => $email]);
return false;
}
if ($this->usernameTaken($username, $email)) {
$this->setAPIResponse('error', 'Username: ' . $username . ' or Email: ' . $email . ' is already taken', 409);
return false;
Expand Down Expand Up @@ -6397,6 +6461,7 @@ public function updateGroup($id, $array)
$this->setAPIResponse('error', 'Group was set but empty', 409);
return false;
}
$array['group'] = $this->sanitizeUserString($array['group']);
if ($this->isGroupNameTaken($array['group'], $id)) {
$this->setAPIResponse('error', 'Group name: ' . $array['group'] . ' is already taken', 409);
return false;
Expand Down Expand Up @@ -6476,6 +6541,7 @@ public function addGroup($array)
$array['default'] = ($array['default']) ?? 0;
$array['group_id'] = $this->getNextGroupOrder() + 1;
if (array_key_exists('group', $array)) {
$array['group'] = $this->sanitizeUserString($array['group']);
if ($this->isGroupNameTaken($array['group'])) {
$this->setAPIResponse('error', 'Group name: ' . $array['group'] . ' is already taken', 409);
return false;
Expand Down
2 changes: 1 addition & 1 deletion api/functions/log-functions.php
Expand Up @@ -212,7 +212,7 @@ public function setLoggerChannel($channel = 'Organizr', $username = null)
if ($this->hasDB()) {
$setLogger = false;
if ($username) {
$username = htmlspecialchars($username);
$username = $this->sanitizeUserString($username);
}
if ($this->logger) {
if ($channel) {
Expand Down
1 change: 0 additions & 1 deletion api/functions/organizr-functions.php
Expand Up @@ -216,7 +216,6 @@ public function approvedFileExtension($filename, $type = 'image')
case 'png':
case 'jpeg':
case 'jpg':
case 'svg':
return true;
default:
return false;
Expand Down
13 changes: 13 additions & 0 deletions api/plugins/bookmark/plugin.php
Expand Up @@ -570,6 +570,7 @@ public function _addTab($array)
$array['enabled'] = ($array['enabled']) ?? 0;
$array['order'] = ($array['order']) ?? $this->_getNextBookmarkTabOrder() + 1;
if (array_key_exists('name', $array)) {
$array['name'] = $this->sanitizeUserString($array['name']);
if ($this->_isBookmarkTabNameTaken($array['name'])) {
$this->setAPIResponse('error', 'Tab name: ' . $array['name'] . ' is already taken', 409);
return false;
Expand All @@ -585,8 +586,11 @@ public function _addTab($array)
if (!array_key_exists('image', $array)) {
$this->setAPIResponse('error', 'Tab image was not supplied', 422);
return false;
} else {
$array['image'] = $this->sanitizeUserString($array['image']);
}
if (array_key_exists('background_color', $array)) {
$array['background_color'] = $this->sanitizeUserString($array['background_color']);
if (!$this->_checkColorHexCode($array['background_color'])) {
$this->setAPIResponse('error', 'Tab background color is invalid', 422);
return false;
Expand All @@ -596,6 +600,7 @@ public function _addTab($array)
return false;
}
if (array_key_exists('text_color', $array)) {
$array['text_color'] = $this->sanitizeUserString($array['text_color']);
if (!$this->_checkColorHexCode($array['text_color'])) {
$this->setAPIResponse('error', 'Tab text color is invalid', 422);
return false;
Expand Down Expand Up @@ -636,23 +641,29 @@ public function _updateTab($id, $array)
return false;
}
if (array_key_exists('name', $array)) {
$array['name'] = $this->sanitizeUserString($array['name']);
if ($this->_isBookmarkTabNameTaken($array['name'], $id)) {
$this->setAPIResponse('error', 'Tab name: ' . $array['name'] . ' is already taken', 409);
return false;
}
}
if (array_key_exists('background_color', $array)) {
$array['background_color'] = $this->sanitizeUserString($array['background_color']);
if (!$this->_checkColorHexCode($array['background_color'])) {
$this->setAPIResponse('error', 'Tab background color is invalid', 422);
return false;
}
}
if (array_key_exists('text_color', $array)) {
$array['text_color'] = $this->sanitizeUserString($array['text_color']);
if (!$this->_checkColorHexCode($array['text_color'])) {
$this->setAPIResponse('error', 'Tab text color is invalid', 422);
return false;
}
}
if (array_key_exists('image', $array)) {
$array['image'] = $this->sanitizeUserString($array['image']);
}
$response = [
array(
'function' => 'query',
Expand Down Expand Up @@ -871,6 +882,7 @@ public function _addCategory($array)
$array['order'] = ($array['order']) ?? $this->_getNextBookmarkCategoryOrder() + 1;
$array['category_id'] = ($array['category_id']) ?? $this->_getNextBookmarkCategoryId() + 1;
if (array_key_exists('category', $array)) {
$array['category'] = $this->sanitizeUserString($array['category']);
if ($this->_isBookmarkCategoryNameTaken($array['category'])) {
$this->setAPIResponse('error', 'Category name: ' . $array['category'] . ' is already taken', 409);
return false;
Expand Down Expand Up @@ -913,6 +925,7 @@ public function _updateCategory($id, $array)
return false;
}
if (array_key_exists('category', $array)) {
$array['category'] = $this->sanitizeUserString($array['category']);
if ($this->_isBookmarkCategoryNameTaken($array['category'], $id)) {
$this->setAPIResponse('error', 'Category name: ' . $array['category'] . ' is already taken', 409);
return false;
Expand Down

0 comments on commit a09d834

Please sign in to comment.