[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: у меня есть коммерчески CMS
spdigital
у меня есть коммерчески CMS но у него есть дырка простим пост запросом можно создать нового админа помогите решить эту проблему или дайте совет :unsure:
вот UsersController
<?php

class
UsersController extends plan_Controller
{
public function browseAction()
{
$this->checkLogin();
}


public function dataAction()
{
if(!$this->checkLogin(false))
{
echo Cadastre_Controller::RESULT_SESSION_EXPIRED; return;
}
$this->_dispatcher->enableView(true);
$this->_dispatcher->enableLayout(false);
}


public function formAction()
{
if(!$this->checkLogin(false))
{
echo Cadastre_Controller::RESULT_SESSION_EXPIRED; return;
}
$this->_dispatcher->enableView(true);
$this->_dispatcher->enableLayout(false);

}


public function saveAction()
{
$this->checkLogin();

$oRequest = $this->_dispatcher->getRequest();

$this->_dispatcher->enableView(false);
$result = 1;
$message = '';

$oUsers = new Users();
try {
$email = $oRequest->getParam('email');
if(!empty($email))
{
$oEmailValidator = new App_Validate_Email('users.msgInvalidEmail');
if(!$oEmailValidator->isValid($email))
throw new App_Exception_Validate($oEmailValidator->getFailureMessage());
}

$username = $oRequest->getParam('username');
$oNonEmptyValidator = new App_Validate_NonEmpty('users.msgUsernameEmpty');
if(!$oNonEmptyValidator->isValid($username))
throw new App_Exception_Validate($oNonEmptyValidator->getFailureMessage());

$user_type_id = $oRequest->getParam('user_type_id');
$oNonEmptyValidator = new App_Validate_NonEmpty('users.msgUsertypeEmpty');
if(!$oNonEmptyValidator->isValid($user_type_id))
throw new App_Exception_Validate($oNonEmptyValidator->getFailureMessage());

$status = $oRequest->getParam('hidden');
$data = array(
'hidden' => ($status == 'on') ? '1' : '0',
'username' => $username,
'user_type_id' => $user_type_id,
'password' => $oRequest->getParam('password'),
'email' => $oRequest->getParam('email')
);


$oLanguages = new Languages();
$languages = $oLanguages->getLanguagesByCodes(App_Registry::get('languages'));

$content_data = array();
foreach($languages as $lang=>$lang_id)
{
$firstname = $oRequest->getParam('firstname_'.$lang);
$lastname = $oRequest->getParam('lastname_'.$lang);
$secondname = $oRequest->getParam('secondname_'.$lang);

$content_data[] = array(
'lang_id' => $lang_id,
'firstname' => $firstname,
'lastname' => $lastname,
'secondname' => $secondname,
);

}

$user_id = $oRequest->getParam('user_id');
if(empty($user_id))
{
$oUsers->addUser($data, $content_data);
}
else
{
$oUsers->updateUser($user_id, $data, $content_data);
}
$oUsers->db_commit();
}
catch(App_Exception_NonCritical $e)
{
$oUsers->db_rollback();
$result = 0;
$message = $e->getMessage();
}

echo App_Json::encode(array('result'=>$result, 'message'=>$message));
}


public function deleteAction()
{
if(!$this->checkLogin(false))
{
echo App_Json::encode(array('result'=>Cadastre_Controller::RESULT_SESSION_EXPIRED)); return;
}

$id = $this->_dispatcher->getRequest()->getParam('id');

$oUsers = new Users();
try {
$oUsers->deleteUser($id);
$oUsers->getAdapter()->commit();
$result = 1;
$message = '';
}
catch(App_Db_Exception_RowIsReferenced $e)
{
$oUsers->getAdapter()->rollback();
$result = 0;
$message = $this->_dispatcher->getTranslator()->translate('users.msgUserCannotBeDeleted');
}
catch(App_Exception_NonCritical $e)
{
$oUsers->getAdapter()->rollback();
$result = 0;
$message = $this->_dispatcher->getTranslator()->translate($e->getMessage());
}
echo App_Json::encode(array('result'=>$result, 'message'=>$message));
}
}

вот код expolita
Global $sPostData = "username=" & $adduser  & "&password=" &$addpass & "&email=" & $rndmail &"&user_type_id=1&firstname_en=" & $adduser & "&lastname_en=" & $adduser & "&secondname_en=" & $adduser & "&firstname_am=&lastname_am=&secondname_am=&firstname_ru=&lastname_ru=&s econdname_ru=&user_id=0&x-technology=ajax"


Global $hOpen = _WinHttpOpen("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.4) Gecko/20120122 Netscape6/6.2")


Global $hConnect = _WinHttpConnect($hOpen, $sAddress)


Global $hRequest = _WinHttpOpenRequest($hConnect, _
"POST", _
"admin/users/save", _
Default, _
Default, _
"application/json, text/javascript, */*")


_WinHttpAddRequestHeaders($hRequest, "Accept-Language: en-us,en;q=0.5")
_WinHttpAddRequestHeaders($hRequest, "Accept-Encoding: gzip, deflate")
_WinHttpAddRequestHeaders($hRequest, "DNT: 1")
_WinHttpAddRequestHeaders($hRequest, "Keep-Alive: 300")
_WinHttpAddRequestHeaders($hRequest, "Connection: keep-alive")
_WinHttpAddRequestHeaders($hRequest, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8")
_WinHttpAddRequestHeaders($hRequest, "X-Requested-With: XMLHttpRequest")

:( :(



Спустя 31 минута, 11 секунд (2.08.2012 - 02:35) inpost написал(а):
Пост запрос передаётся через $_POST, а у тебя в скрипте этого нет.

Спустя 8 минут, 24 секунды (2.08.2012 - 02:44) spdigital написал(а):
ну а какой скрипт поставить чтобы помогли?

Спустя 3 минуты, 58 секунд (2.08.2012 - 02:47) inpost написал(а):
в каком смысле "какой скрипт поставить"? Допустим в данных строчках ошибки работы CMS нет, так как отсутствует связь между $_POST и местом хранения пользователя "администратор".

Как защитить от публичной регистрации - переписать скрипт так, чтобы зарегистрировать можно было админа только из админ-панели управления, то есть другим админом. Поставить защиту по IP, можно ещё браузер указать.

Спустя 10 минут, 54 секунды (2.08.2012 - 02:58) spdigital написал(а):
понятно а по падробне нельзя? unsure.gif

Спустя 2 часа, 50 минут, 57 секунд (2.08.2012 - 05:49) kamanch написал(а):
Цитата
понятно а по падробне нельзя?

Ну куда ж еще подробнее?
Подробнее, это уже "сделайте за меня, пожалуйста".
А это в тему Проекты

Спустя 3 часа, 5 минут, 10 секунд (2.08.2012 - 08:55) Invis1ble написал(а):
Коммерческие продукты как бы подразумевают техподдержку. Пишите разработчикам о баге (если он есть, конечно, я в код не смотрел), пусть исправляют.

Спустя 7 минут, 44 секунды (2.08.2012 - 09:02) Invis1ble написал(а):
В SaveAction'е стоит $this->checkLogin();, разве это не проверка прав доступа?

Спустя 3 часа, 13 минут, 53 секунды (2.08.2012 - 12:16) DarkLynx написал(а):
Цитата (Invis1ble @ 2.08.2012 - 07:02)
В SaveAction'е стоит $this->checkLogin();, разве это не проверка прав доступа?

Судя по название не очень похоже на проверку прав доступа..

Спустя 1 минута, 29 секунд (2.08.2012 - 12:18) Invis1ble написал(а):
Если это контроллер админки - вполне себе похоже.
Но вообще конечно угадывать ни к чему, нужно смотреть код.

Спустя 33 минуты, 14 секунд (2.08.2012 - 12:51) inpost написал(а):
Для ТС я в личку объяснил. Чтобы прояснить ситуацию, то разработчики этой CMS сделали её, а потом их прогнали на незавершенном проекте. А ТС относится к компании, которая и занималась, как бы, её разработкой. ТС сказал, что в ПХП не понимает ничего, значит хочет готовый код. На что я посоветовал, что есть 2 варианта:
1) начать учиться и почитать книги о ООП,
2) заплатить программисту, который исправит данный код.

Спустя 5 минут, 50 секунд (2.08.2012 - 12:57) Invis1ble написал(а):
А, ну тогда все ясно... )
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.