Перейти к содержанию

Рекомендуемые сообщения

Хотелось бы рассказать о решении нескольких неприятных моментов.

 

1. Вместо route=blablabla попробуйте route[]=blablabla

2. Вместо path=blablabla попробуйте path[]=blablabla

3. http://demo.myopencart.ru/index.php?route=common/home/__construct

4. В строке поиска передаем массив

5. Формы авторизации обратной связи и подобные подвержены этой проблеме

 

 

Решение:

В system/library/request.php добавить метод
 

   /**
    * This function performs validation of the input parametrs
    * If somebody wants to use Array instead of string param,
    * this function will prevent php warnings
    * by imploding the input array to the string
    * @param String $key, $value
    * @return true
    */
 
private function getValidValue ( $key, $value = '' )
 {


   $strKeysArray = array ( 'selected', 'option', 'order_product', 'order_total' );


   if ( '/admin/index.php' == $_SERVER['PHP_SELF'] )
   {


    $adminCheckKeys = array ( 'route', 'username', 'password', 'email' );
   if ( in_array ( $key, $adminCheckKeys ) && ! empty ( $value ) && is_array ( $value ) )
    return $this->multi_implode ( $value );


   } else {


   if ( ! in_array ( $key, $strKeysArray ) && ! empty ( $value ) && ! preg_match ( '#\d+#', $key ) && is_array ( $value ) )
    return $this->multi_implode ( $value );      


   }


   return $value;


 }




 private function multi_implode( $sep = '', $array = array() )
 {


is_array ( $sep ) && $array = $sep;
is_array ( $sep ) && $sep = '';


   $_array = array();
   
   foreach( $array as $val )
   {


        $_array[] = is_array( $val ) ? $this->multi_implode($sep, $val) : $val;


   }
   
   return implode( $sep, $_array );
 }
 

Найти:

$data[$this->clean($key)] = $this->clean($value);

Выше вставить:

is_array ( $value ) && $value = $this->getValidValue ( $this->clean($key), $value );

--------------------------------

 

В /system/engine/action.php найти:

 

if ($method) {
$this->method = $method;
} else {
$this->method = 'index';}

Выше вставить:

'__construct' == $method && $method = null;

 

 

 

 

Пришлось делать правки в ядре, но увы.

 

 

Пример #1:

 

err1.jpg

 

 

Пример #2:

 

 

err2.jpg

 

 

Пример #3:

 

err3.jpg

 

 

Пример #4 ( пытаемся в куку писать мусор, при помощи валют ):

 

err4.jpg

 

 

Пример #5 ( немного массива вместо файла ):

 

 

err5.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Вместо route=blablabla попробуйте route[]=blablabla

2. Вместо path=blablabla попробуйте path[]=blablabla

Попробовал.

1. 404

2. home page

Какие угрозы безопасности это несёт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну добавил скобки эти - Запрашиваемая станица не найдена.
Где криминал то ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насчет актуальных дырок - заливка файлов через "route=product/product/upload". Не требует никаких прав. Постоянно нахожу залитые шеллы в директории "downloads" на своих демо-сайтах. А отключить руки не доходят т.к. это относительно безопасно, хотя все решается достаточно просто.

 

Наблюдается аж вплоть до 1.5.6.4. Таким образом можно насолить владельцу магазина заливая гигабайты файлов на хостинг. Приведу код формы, через которую идет заливка файлов:

<html>
	<body>
		<form action="http://1541.ocstore.im/index.php?route=product/product/upload" method="post" enctype="multipart/form-data">
			<input type="file" name="file">
			<input type="submit" value="Upload">
		</form>
	</body>
</html>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал.1. 4042. home pageКакие угрозы безопасности это несёт?

Вывод путей на сторону юзера ( в определенных версиях ) к корню, при error_reporting. Можно посмотреть в логи сервера. А так никаких - просто совет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переработал метод, добавил скрины. Кому надо - забирайте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поставил фиксы, при редактировании заказа в админке при нажатии кнопки обновления итого вылазит енто

Для удобства написал, что у меня в тех строках

7-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
2014-07-22 0:28:00 - PHP Notice:  Array to string conversion in /home/f/censored/censored.ru/public_html/system/library/request.php on line 45
45я строка request.php - return implode ( $value );  


2014-07-22 0:28:00 - PHP Warning:  session_start(): Cannot send session cache limiter - headers already sent (output started at /home/f/censored/censored.ru/public_html/index.php:449) in /home/f/censored/censored.ru/public_html/system/library/session.php on line 11
11 строка session.php - session_start();
449 строка index.php - echo '<b>' . $error . '</b>: ' . $errstr . ' in <b>' . $errfile . '</b> on line <b>' . $errline . '</b>';


2014-07-22 0:28:00 - PHP Warning:  Invalid argument supplied for foreach() in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-catalog_controller_checkout_manual.php on line 57
57я строка кэшированного файла - foreach ($this->request->post['order_product'] as $order_product) {
Если закомментить добавленную строку is_array в request.php, то все работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробуйте снова. Методы были обновлены.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я по ходу чего-то не догоняю. Сравнил сейчас старый код для request.php и сегодняшний, что в первом посте - они одинаковые же. Или обновку от куда-то качать нужно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок. Я посмотрю. Админку код почти и не трогает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я по ходу чего-то не догоняю. Сравнил сейчас старый код для request.php и сегодняшний, что в первом посте - они одинаковые же. Или обновку от куда-то качать нужно?

У меня этих ошибок нет, просьба связаться со мной в icq 27272727 или skype: elhan.isaev для выяснения причин. Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил исключений в метод, прошу отписаться по багам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да ладно, не критично. Теперь нет ошибок про нажимании той кнопки, но естественно появились другие, при попытке сохранить заказ. При сохранении пропадает весь товар из заказа. Попробую ка я на дефолтной темке на локалке. У меня есть подозрения на несколько модулей, но от них я отказываться не могу, ибо уплочено, да и альтернативы нет.

 

 

2014-07-23 20:45:10 - PHP Warning:  Invalid argument supplied for foreach() in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-admin_controller_sale_order.php on line 1309
vq2-admin_controller_sale_order.php on line 1309 - foreach ($this->request->post['order_product'] as $order_product) {
 
2014-07-23 20:45:10 - PHP Warning:  Invalid argument supplied for foreach() in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-admin_controller_sale_order.php on line 101
vq2-admin_controller_sale_order.php - foreach ($this->request->post['order_total'] as $i=>$order_total) {
 
2014-07-23 20:45:10 - PHP Warning:  Invalid argument supplied for foreach() in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-admin_model_sale_order.php on line 211
vq2-admin_model_sale_order.php - foreach ($data['order_product'] as $order_product) {
 
2014-07-23 20:45:10 - PHP Warning:  Invalid argument supplied for foreach() in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-admin_model_sale_order.php on line 251
vq2-admin_model_sale_order.php - foreach ($data['order_total'] as $order_total) {
 
2014-07-23 20:45:10 - PHP Notice:  Undefined variable: order_total in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-admin_model_sale_order.php on line 255
vq2-admin_model_sale_order.php - $total += $order_total['value'];
 
2014-07-23 20:45:10 - PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/f/censored/censored.ru/public_html/admin/index.php:86) in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-system_engine_controller.php on line 28
vq2-system_engine_controller.php - header('Status: ' . $status);
 
2014-07-23 20:45:10 - PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/f/censored/censored.ru/public_html/admin/index.php:86) in /home/f/censored/censored.ru/public_html/vqmod/vqcache/vq2-system_engine_controller.php on line 29
vq2-system_engine_controller.php - header('Location: ' . str_replace(array('&', "\n", "\r"), array('&', '', ''), $url));
Потестил на чистой сборке с вкмодом. Та же беда. Нужно просто зайти в редактирование заказа и ничего не меняв его сохранить. Поимеем ошибки и удаление заказанного товара.

 

2014-07-23 21:21:22 - PHP Warning:  Invalid argument supplied for foreach() in Y:\home\test8.ru\office\admin\controller\sale\order.php on line 1244
foreach ($this->request->post['order_product'] as $order_product) {

2014-07-23 21:21:22 - PHP Warning:  Invalid argument supplied for foreach() in Y:\home\test8.ru\office\admin\model\sale\order.php on line 190
foreach ($data['order_product'] as $order_product) {


2014-07-23 21:21:22 - PHP Warning:  Invalid argument supplied for foreach() in Y:\home\test8.ru\office\admin\model\sale\order.php on line 225
foreach ($data['order_total'] as $order_total) {


2014-07-23 21:21:22 - PHP Notice:  Undefined variable: order_total in Y:\home\test8.ru\office\admin\model\sale\order.php on line 229
$total += $order_total['value'];


2014-07-23 21:21:22 - PHP Warning:  Cannot modify header information - headers already sent by (output started at Y:\home\test8.ru\office\admin\index.php:86) in Y:\home\test8.ru\office\vqmod\vqcache\vq2-system_engine_controller.php on line 28
2014-07-23 21:21:22 - PHP Warning:  Cannot modify header information - headers already sent by (output started at Y:\home\test8.ru\office\admin\index.php:86) in Y:\home\test8.ru\office\vqmod\vqcache\vq2-system_engine_controller.php on line 29
header('Status: ' . $status);
header('Location: ' . str_replace(array('&', "\n", "\r"), array('&', '', ''), $url));
Методом исключения остается vqmod чтоле? При чистой установке он вносит такие изменения

<file path="system/" name="startup.php,engine/*.php,library/*.php">
		<operation error="skip">
			<search position="replace" regex="true"><![CDATA[~(require|include)(_once)?\(([^)]+)~]]></search>
			<add><![CDATA[$1$2(VQMod::modCheck($3)]]></add>
		</operation>
	</file>
З.Ы. Самое главное забыл написать. Тестилось все на ocStore 1.5.5.1.2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если посмотреть в обновленные методы, то order_total и order_product добавлены в исключения:

 

$strKeysArray = array ( 'selected', 'option', 'order_product', 'order_total' );

 

 

Попробуй новые методы, и отпишись.

 

Благодарю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Самое забавное то, что я еще вчера это пробовал (если только опять там в первом посте что-то не подправлено). Сегодня потестю вообще на наичистейшей установке без вкмода. Если и после этого вылезет, то я умываю руки :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ребят, для того чтобы не показывать ошибки

 

Необходимо:

Зайти в Админку -> Система -> Настройки -> Изменить -> Сервер ->  Показывать ошибки:  НЕТ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ребят, для того чтобы не показывать ошибки

 

Необходимо:

Зайти в Админку -> Система -> Настройки -> Изменить -> Сервер ->  Показывать ошибки:  НЕТ

 

И как это нам поможет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Логи резиновые)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ставим, галочку в админке не писать ошибки. (Думаю специально не будут создавать ошибки). Конечно, понимаю, ошибки нужно исправить.

Парни, объясните чем грозит вывод этих ошибок, желательно в примере.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ставим, галочку в админке не писать ошибки. (Думаю специально не будут создавать ошибки). Конечно, понимаю, ошибки нужно исправить.

Парни, объясните чем грозит вывод этих ошибок, желательно в примере.

 

Есть ресурсы где подробно описано, здесь это не совсем уместно публиковать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.