LINUX.ORG.RU
Ответ на: комментарий от obinos

В том-то и дело, что allow_url_fopen отключен, а exec пожалуйста... И так на всех 4 серверах где отключен allow_url_fopen...

Suntechnic ★★★★★
() автор топика

Чтоб тебе весёлый файл не заенжектили.

baverman ★★★
()
Ответ на: комментарий от Suntechnic

В том-то и дело, что allow_url_fopen отключен, а exec пожалуйста...

Например, если админ заботится не о безопасности, а о нагрузке сервера. fopen не имеют настраиваемого таймаута и не отваливаются по времени ограничения работы скрипта. Так что при глюках/зависах удалённого сервера могут оставлять висящим процесс очень надолго. Серия таких процессов — и готово, ресурсы сервера кончились.

use curl, там можно таймаут короткий ставить.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Хорошо, давай я кусок побольше запощу...

if (!extension_loaded('curl')) {
		if (!dl('curl.so')) {
			$useCurl = false;
		} else {
			$useCurl = true;
		}
	} else {
		$useCurl = true;
	}
	
	
	if ($useCurl) {
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $moduleSunDev);
		curl_setopt($ch, CURLOPT_HEADER, false);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8);
		curl_setopt($ch, CURLOPT_USERAGENT, 'SUN.DEV.loader '.SUN_DEV_LOADER_VERSION);
		$cent = @curl_exec($ch);
		curl_close($ch);
	} else {
		if (ini_get(allow_url_fopen)) {
			$cent = file_get_contents($moduleSunDev);
		} else {
			ini_set(allow_url_fopen, "1");
			if (!ini_get(allow_url_fopen)) {
				exec("wget -O - '$moduleSunDev'", $arrWget);
				$cent = implode("\n", $arrWget)."\n";
			}
		}
	}
Так понятнее?

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic
       -T seconds
       --timeout=seconds
           Set the network timeout to seconds seconds.  This is equivalent to specifying --dns-timeout, --connect-timeout, and --read-timeout, all at the same time.

           When interacting with the network, Wget can check for timeout and abort the operation if it takes too long.  This prevents anomalies like hanging reads and infinite connects.  The only timeout enabled by default is a 900-second read timeout.  Setting a
           timeout to 0 disables it altogether.  Unless you know what you are doing, it is best not to change the default timeout settings.

           All timeout-related options accept decimal values, as well as subsecond values.  For example, 0.1 seconds is a legal (though unwise) choice of timeout.  Subsecond timeouts are useful for checking server response times or for testing network latency.

       --dns-timeout=seconds
           Set the DNS lookup timeout to seconds seconds.  DNS lookups that don't complete within the specified time will fail.  By default, there is no timeout on DNS lookups, other than that implemented by system libraries.

       --connect-timeout=seconds
           Set the connect timeout to seconds seconds.  TCP connections that take longer to establish will be aborted.  By default, there is no connect timeout, other than that implemented by system libraries.

       --read-timeout=seconds
           Set the read (and write) timeout to seconds seconds.  The "time" of this timeout refers to idle time: if, at any point in the download, no data is received for more than the specified number of seconds, reading fails and the download is restarted.  This
           option does not directly affect the duration of the entire download.

           Of course, the remote server may choose to terminate the connection sooner than this option requires.  The default read timeout is 900 seconds.
melkor217 ★★★★★
()
Ответ на: комментарий от melkor217

Спасибо. Что-то у меня длительное отсутствие сна начинает влиять на соображалку...

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

В принципе для меня это не сильно страшно, так как это загрузка модуля отладки которая начинается только если я залогинен на сервере (свой отдельный логин от CMS), поэтому если что упадет, то упадет только у меня. Для юзеров до этого место просто никогда не дойдет.

А удаленка нужна что бы не копировать код между дюженой сайтов при добавлении новой фичи. Вот и решил сделать удаленным инклюдом это...

Но спасибо что обратил внимание на этот момент. Я о нем не думал до этого.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от r_asian

А какая разница если extension_loaded('curl') глаголит false?

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

А удаленка нужна что бы не копировать код между дюженой сайтов при добавлении новой фичи.

Так никто не делает, ибо это несекурно и вообще нельзя. Общие фичи нужно распространять библиотеками (или в терминах git'а например подмодулями).

anonymous
()
Ответ на: комментарий от anonymous

Не пояснишь почему несекурно и вообще нельзя? Мне кажется это удобным.

Насчет несекурности:

Есть авторизация в самом блоке загрузки. И своя параллельная сессия привязанная еще и к IP. Да, пароль и куки сессии в открытом виде в самом модуле загрузки. Но если кто-то в состоянии прочесть файл с загрузчиком, что ему мешает сделать это с остальными файлами в том числе и с тем, что содержит доступы к базе - они еще и в одной папки в битрикс, а эта хрень пока работает только с битрикс - для остальных CMS еще интерфейс не прикручен? Кроме того ему придестя ломануть мой комп что бы зайти под моим IP или как-то IP подменить (разве такое возможно?).

Сам модуль достаточно надежен (потому что предельно прост) и вызвать сбои врядли может. Удаленный модуль который им загружается может конечно содержать ошибки и вызвать сбой на боевом сервере, но он грузится только если пройдена авторизация в модуле загрузки, так что это будет видно только мне.

В случае если не грузится удаленный модуль, то на все функции внешнего интерфеса ставятся заглушки так, что даже если я забуду удалить где-то отладочную функцию, то просто будет вызвана пустая заглушка.

Где несекурность? Как это может повредить работе сайта?

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Поясню так же для чего это надо.

Приходится работать с множеством сайтов, сделанных не мной. Я вообще нихрена о них не знаю. Контора наша берет только на обслуживание сайты и доделки. Причем такие, мне кажется от которых все другие уже отказались. Я плачу ночами видя этот код. Конечно нужны инструменты помогающие быстрее вникнуть в извращенную логику разрабов. При этом сайты боевые, поэтому работаю постоянно. Останавливать их нельзя. Снять копию? Хорошее предложение. А в это время 3-4 контентщика со стороны заказчика и один с нашей вносят туда кучу изменение. Поэтому переносить сайт надо только файлами и желательно теми что я поменял. У меня в день 5-10 задач каждая из которых требует изменения 2-5 файлов на разных сайтах. Git? Очень хорошо. Есть сайты на которых мы делаем короткие разовые работы. Работаем всего пару дней... Вобщем неоправданная трата времени выйдет. Вот отсюда идея и возникла. Пилю.

Suntechnic ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.