ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > PHP, PERL, MySQL, JavaScript
   
Результаты опроса: Вам понравилось?
Да, очень 4 36.36%
Нормально 4 36.36%
Нет, это не нужно 3 27.27%
Голосовавшие: 11. Вы ещё не участвовали в этом опросе

 
 
Опции темы Поиск в этой теме Опции просмотра

  #31  
Старый 31.05.2009, 01:14
imajo.ati
Участник форума
Регистрация: 21.02.2008
Сообщений: 255
Провел на форуме:
975514

Репутация: 177
По умолчанию

очень небольшая статья по PHP

некоторое время назад понадобилось из PHP-CLI скрипта
вызвать внешнюю программу, не дожидаясь её выполнения
в операционной системе windows

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

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

и вот сегодня почитав мануал по win оболочке дошел до команды
START, которая как раз делает то, что нужно =)

синтаксис можно посмотреть так: start /?

и, наконец, применение в пэхэпэ скрипте:

PHP код:
system("start php.exe c:\\file.php"); 
- вызывает на исполнение файл c:/file.php интерпретатором пхп ПАРАЛЛЕЛЬНО с
текущим скриптом (т.е. родительский скрипт продолжает выполняться потому что
команда start после запуска указанной программы завершается и следовательно
функция system завершается )
ну конечно при условии что win знает где лежит php.exe




т.к. я раньше не знал этого и думал что это невозможно
(как впрочем мне и сказали тогда на форуме)
решил выложить в помощь людям, которые ещё не знают этого
и которым это может понадобиться

Последний раз редактировалось imajo.ati; 31.05.2009 в 01:20..
 

  #32  
Старый 31.05.2009, 16:03
.:EnoT:.
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме:
4832771

Репутация: 1916


По умолчанию

Парсинг страниц с защитой на JavaScript


[INTRO]
Многие начинающие и не очень начинающие кодеры при написании парсеров/грабберов сталкиваются с проблемой, что вывод
данных на страницу производится яваскриптом, да ещё и с динамическими именами переменных, массивов и т.д.
Собственно решил написать эту статейку.

[Способ решения]
Вот так недавно наткнулся на один код.
На странице выводилась прокся (IP : Port). Но выводилось при помощи JS.
Наша задача - получить адрес и порт прокси при помощи PHP, не прибегая к каким-либо выполнениям на стороне клиента.
Код страницы выглядел примерно вот так:

Код:
<HTML><BODY>
<script>
lXaLNu = new Array(742,62,948,760,41,960,48);
auAQmk = parseInt((((500+lXaLNu[0])*lXaLNu[1]+lXaLNu[2]+lXaLNu[3])*lXaLNu[4]-lXaLNu[5]-lXaLNu[6])*10)/10-3226178;

jmJZrOkTxr = new Array(351,30,25,715,874);
JACwFMTS = parseInt((((109+jmJZrOkTxr[0])*jmJZrOkTxr[1])*jmJZrOkTxr[2]+jmJZrOkTxr[3]+jmJZrOkTxr[4])*10)/10-346439;

pYSHW = new Array(425,482,67,716,370,432);
nlM = parseInt(((843+pYSHW[0]+pYSHW[1])*pYSHW[2]+pYSHW[3]-pYSHW[4]+pYSHW[5])*10)/10-105771;

CIjU = new Array(374,514,208);
NCfWOOCO = parseInt((424+CIjU[0]+CIjU[1]-CIjU[2])*10)/10-894;

ZuIGvQrzIMTS = new Array(112,185,735,61,91);
myiDrcfCi = parseInt(((287+ZuIGvQrzIMTS[0]-ZuIGvQrzIMTS[1]-ZuIGvQrzIMTS[2])*ZuIGvQrzIMTS[3]+ZuIGvQrzIMTS[4])*10)/10+31828;

TMUuMPjfRhm = parseInt(NCfWOOCO)+'.'+parseInt(auAQmk)+'.'+parseInt(myiDrcfCi)+'.'+parseInt(JACwFMTS)+':'+parseInt(nlM);

</script>

Proxy IP:PORT : <script>document.write(TMUuMPjfRhm);</script>
Имена переменных, массивов были динамическими, последовательности и величины математических операций так же были различными при
каждой перезагружке страницы.
Казалось бы сложно, на самом деле нет
Рассмотрим код:
Каждая переменная формирует кусок ip прокси, а одна из них содержит порт. Этот алгоритм не меняется.
Далее переменная TMUuMPjfRhm содержит конечный результат (адрес разделённый точками и через двоеточие порт).
Следовательно нам нужно получить результат этой переменной.
В принципе есть множество способов решения данной проблемы, в целом всё зависит от воображения программиста.
Сейчас мы рассмотрим один из способов - преобразование JS кода в PHP и выполнение.
И так пошагово:
  1. Отпарсить кусок нужного JavaScript
  2. Заменить JS переменные и массивы на PHP
  3. Заменить JS функции на эквивалентные PHP
  4. Выполнить полученный код через eval() и создать переменную, содержащую конечный результат

Всё, что для этого нужно это знание регулярных выражений, ну и синтаксиса PHP (как бы банально это не звучало),
иначе eval() код с ошибками кушать не будет


[Поехали]


1. Парсим код.


Всё, что нам нужно для счастья это код между <script></script>.
PHP код:
preg_match('#<script>(.+)</script>#Uis'$source$out); 
В $out[1] теперь содержится нужный нам код.


2. Парсим имена массивов и переменных


PHP код:
preg_match_all('#([a-z]+)\s=\snew#i'$out[1], $arrs);
preg_match_all('#([a-z]+)\s=\sparse#i'$out[1], $vars); 
Получаем

Код:
Переменные
Array
(
    [0] => auAQmk
    [1] => JACwFMTS
    [2] => nlM
    [3] => NCfWOOCO
    [4] => myiDrcfCi
    [5] => TMUuMPjfRhm
)


Массивы
Array
(
    [0] => lXaLNu
    [1] => jmJZrOkTxr
    [2] => pYSHW
    [3] => CIjU
    [4] => ZuIGvQrzIMTS
)
Теперь преобразуем все переменные в PHP путём добавления знака доллара. Для этого напишем небольшую функцию
обратного вызова, чтобы применить её ко всем элементам массивов $arrs[1] и $vars[1].

PHP код:
function add_dollar($elem) {
    return 
'$' $elem;

Применяем:
PHP код:
$php_arrs array_map('add_dollar'$arrs[1]);
$php_vars array_map('add_dollar'$vars[1]); 
Далее заменяем преобразованные имена в нашем коде
PHP код:
$out[1] = str_replace($arrs[1], $php_arrs$out[1]);
$out[1] = str_replace($vars[1], $php_vars$out[1]); 
Заменили, едем дальше.


3. Меняем JS функции на эквивалентные PHP


Здесь используется всего-лишь одна функция parseInt. Эквиватент ей в PHP - intval() или в данном примере
даже подойдёт abs().
Заменим на intval():
PHP код:
$out[1] = str_replace('parseInt''intval'$out[1]); 
Далее смотрим на массивы, видим new Array(). Но так как в PHP массив не является объектом, а простой функцией array()
заменим это дело, просто убрав new:

PHP код:
$out[1] = str_replace('new '''$out[1]); 
В последней переменной, которая формирует результат мы видим JS-конкатенацию (знак плюса).
Заменяем ёё на PHP-конкатенацию (точка)

PHP код:
$out[1] = str_replace(
    array(
"'+""+'"),
    array(
"' . "" . '"),
    
$out[1]); 

Хитрый финт ушами и у нас уже готовый PHP-код:

PHP код:
$lXaLNu = Array(742,62,948,760,41,960,48);
$auAQmk intval((((500+$lXaLNu[0])*$lXaLNu[1]+$lXaLNu[2]+$lXaLNu[3])*$lXaLNu[4]-$lXaLNu[5]-$lXaLNu[6])*10)/10-3226178;

$jmJZrOkTxr = Array(351,30,25,715,874);
$JACwFMTS intval((((109+$jmJZrOkTxr[0])*$jmJZrOkTxr[1])*$jmJZrOkTxr[2]+$jmJZrOkTxr[3]+$jmJZrOkTxr[4])*10)/10-346439;

$pYSHW = Array(425,482,67,716,370,432);
$nlM intval(((843+$pYSHW[0]+$pYSHW[1])*$pYSHW[2]+$pYSHW[3]-$pYSHW[4]+$pYSHW[5])*10)/10-105771;

$CIjU = Array(374,514,208);
$NCfWOOCO intval((424+$CIjU[0]+$CIjU[1]-$CIjU[2])*10)/10-894;

$ZuIGvQrzIMTS = Array(112,185,735,61,91);
$myiDrcfCi intval(((287+$ZuIGvQrzIMTS[0]-$ZuIGvQrzIMTS[1]-$ZuIGvQrzIMTS[2])*$ZuIGvQrzIMTS[3]+$ZuIGvQrzIMTS[4])*10)/10+31828;

$TMUuMPjfRhm intval($NCfWOOCO) . '.' intval($auAQmk) . '.' intval($myiDrcfCi) . '.' intval($JACwFMTS) . ':' intval($nlM); 
4. Выполняем полученный код


Для начала создадим переменную, которая будет содержать результат. Ведь к переменной $TMUuMPjfRhm мы не можем обращаться постоянно,
так как имя её меняется.
Поэтому, чтоб код был постоянно рабочим при любых изменениях переменных достанем имя последней переменной из массива (того, когда парсили)
имена переменных. И создадим независимую переменную, содержащую результат.

PHP код:
$out[1] .= '$proxy = ' array_pop($php_vars) . ';'
Осталось лишь выполнить наш PHP-код через eval()
PHP код:
eval($out[1]); 
Теперь адрес проксика будет в переменной $proxy
PHP код:
echo $proxy

[Вывод]
Как все знают, идеальной защиты не существует и JS тому не исключение
Был продемонстрирован всего один из тысячи способов получения контента страницы с казалось бы такой крутой защитой.
В общем удачных кодесов

В аттаче весь код этой статьи с комментариями
Вложения
Тип файла: rar js2php.rar (1.2 Кб, 5 просмотров)

Последний раз редактировалось .:EnoT:.; 31.05.2009 в 16:41..
 

  #33  
Старый 31.05.2009, 16:27
Zitt
Познавший АНТИЧАТ
Регистрация: 07.05.2006
Сообщений: 1,031
Провел на форуме:
5885100

Репутация: 773


Отправить сообщение для Zitt с помощью ICQ
По умолчанию

Оч интересно... Спасибо енот..
В карту статей и ниииет)
 

  #34  
Старый 31.05.2009, 16:29
wildshaman
Постоянный
Регистрация: 16.04.2008
Сообщений: 889
Провел на форуме:
12942062

Репутация: 1550


Отправить сообщение для wildshaman с помощью ICQ
По умолчанию

Это было реально охуенно, в статьи)
 

Кэширование Web-страниц
  #35  
Старый 08.06.2009, 05:21
mixkorshun
Познающий
Регистрация: 07.09.2008
Сообщений: 39
Провел на форуме:
78936

Репутация: 20
Post Кэширование Web-страниц

Кэширование Web-страниц

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

Недавно при написании сайта я столкнулся с проблемой кэширования. Долго искал информацию на эту тему, то что нарыл укладывается в один стандартный алгоритм. Примерная его суть:
  1. Получаем URL страницы
  2. Преобразуем в имя файла
  3. Тут варианты: либо все куда то записать(по-типу БД) либо же сохраняем в папку так
  4. Как только обращаются к странице проверяем ее на срок истечения действительности кэша и выводим

Очевидные проблемы:
  1. Скрипт регистрации к примеру выдает специфичные данные для каждого человека(хотя строка может быть и одинаковой), так что кэшировать надо бы выборочно...
  2. Наклевывается вопрос: а если POST или например COOKIE? Тогда URL может быть одинаковым для разных страниц!

Из-за всего этого пришлось изобретать свой велосипед(хотя на новаторство идеи не претендую, вряд-ли кто-то до этого не догадывался):
  1. Используем Базу Данных
    Будем хранить к примеру такую таблицу(для простого случая подходит):
    Цитата:
    ---------------------------
    page | cache_time
    ---------------------------
    По сути кажется что таблица будет весить неимоверно много, но вот тут-то и надо встряхнуть тем серым веществом, которое мы по наивности называем мозгом. Для большинства страниц в базе данных cache_time окажется одинаковым, исключениями будут страницы регистрации, новостные ленты(и то не факт) и.т.п... Зачем хранить там все страницы? В самом скрипте заведем константу, и будем всегда пользоваться ее значением, но перед этим желательно проверять, а нету ли чего-нибудь особенного для этой страницы в базе данных. В итоге 90% страниц будут использовать значение константы, а для 10% можно и пожертвовать драгоценным местом в БД.
  2. Выборочное кэширование
    Первый вопрос: у вас на сайте есть что-то наподобие этого? Если нет - кэшируйте все на здоровье, а если да, то что?

    А ответ прост, нужно всего лишь не кэшировать ту информацию, которая изменятся от пользователя к пользователю. Т.е. вместо всей страницы, мы сохраним в кэш только контент, а генерация остального, очень часто, не столь долгое дело, и заморачиваться со вставкой данных в кэш будет накладней, чем просто генерировать эти элементы страницы каждый раз. Вывод: Иногда удобней кэшировать только часть страницы.
  3. POST и COOKIE
    По сути бесполезность той схемы которую я описал вначале я впервые ощутил столкнувшись с HTTP POST, мое решение не будет изобиловать оригинальностью, но.. По-моему проще всего завести функцию для генерации имени файла в зависимости от уникальных параметров переданных этой функции. Т.е. не будем опираться только на URL, лучше возьмем за основу путь к скрипту и его уникальные параметры.
Вот наверно и все что я хотел написать..
Успехов в ваших разработках! mixk0rshun

P.S.:
Кэширование вряд ли будет иметь много смысла для мелкого сайта, но для крупных разработок оно сильно экономит процессорное время, для маленьких проектов - скорее только затормозит...
И напоследок некоторый совет: проще всего использовать в папке кэша каталоги, т.е:
Страница: http://example.com/forum/index.php?id=3
Кэш: cache/forum/index.php/id=3
 

  #36  
Старый 09.06.2009, 00:56
mixkorshun
Познающий
Регистрация: 07.09.2008
Сообщений: 39
Провел на форуме:
78936

Репутация: 20
По умолчанию

хотелось бы услышать коментарии...
 

  #37  
Старый 09.06.2009, 01:14
FireFenix
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме:
3178262

Репутация: 389
По умолчанию

Цитата:
Сообщение от mixkorshun  
хотелось бы услышать коментарии...
Закешированные страницы в БД, это тоже самое, что юзать железные шаблона html Да и занимать будет целую торбу места. Так что это не оптимально.
Если контент тяжёлый (флешка, видос), то используются предзагрузка.

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

Последний раз редактировалось FireFenix; 09.06.2009 в 01:38..
 

  #38  
Старый 09.06.2009, 04:40
astrologer
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме:
3069349

Репутация: 808


По умолчанию

Цитата:
а если POST или например COOKIE?
А при чём тут cookie?
Цитата:
По сути бесполезность той схемы которую я описал вначале я впервые ощутил столкнувшись с HTTP POST, мое решение не будет изобиловать оригинальностью, но.. По-моему проще всего завести функцию для генерации имени файла в зависимости от уникальных параметров переданных этой функции. Т.е. не будем опираться только на URL, лучше возьмем за основу путь к скрипту и его уникальные параметры.
Проблемы возникают из-за того, что это "клиентский" подход к кешированию. Примерно такое уже реализовано в браузере, остается лишь посылать правильные заголовки.
Метод post же не является ни безопасным, ни идемпотентным.
Кеширование на сервере должно происходить на другом уровне, чтобы сохранять результаты работы шаблонизатора, статистику, частые выборки из бд, и т.д.
Цитата:
В общем я не видел ниодного обычного сайта с кешированием. Если где-то используется - приведи сайт (кроме гугла, ну и темболее он кешурет не для отображения своих страниц ).
Напротив, кеширование используется почти везде, поскольку это простой и удобный способ повысить производительность.
 

  #39  
Старый 09.06.2009, 08:04
FireFenix
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме:
3178262

Репутация: 389
По умолчанию

Цитата:
Сообщение от astrologer  
Напротив, кеширование используется почти везде, поскольку это простой и удобный способ повысить производительность.
Производительность в основном страдает у динамических данных, а не у статических, поэтому кеширование тут не сильо помогает

Последний раз редактировалось FireFenix; 09.06.2009 в 08:07..
 

  #40  
Старый 09.06.2009, 08:51
astrologer
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме:
3069349

Репутация: 808


По умолчанию

Цитата:
Сообщение от FireFenix  
Производительность в основном страдает у динамических данных, а не у статических, поэтому кеширование тут не сильо помогает
Так речь и шла о динамических - mixkorshun приводит в пример форум и почту.
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ