Просмотр полной версии : о перфекционизме и проститутках
есть собственно сайтец, посвященный прекрасной половине нашего человечества - http://www.sexnsk.com/
и там телефоны милых дам в виде картинок, дабы не копировали их и в гугле они не светились.
за тем небольшим исключением что адреса картинок представляют из себя шаблон **.php??tel=8913-***
соответственно родилось желание эти номерки потырить.
что и сделал следующий код:
<?php
$content = '';
$nums = array();
$page = fopen('http://www.sexnsk.com/', 'r');
while(!feof($page))
$content .= fread($page, 4096);
preg_match_all("/891[0-9-]+/", $content, $nums);
foreach($nums[0] as $num)
echo $num . '<br />';
Зачем я это вообще написал?
Хочется узнать - можно ли как-то оптимизировать/сократить данный код? (ну кроме обфускатора конечно гг)
Совсем немного упростить если:
<?php
$data = file_get_contents('http://www.sexnsk.com/index.php');
preg_match_all("#tel=(.*)></td>#", $data, $nums);
foreach($nums[1] as $num){
echo $num.'<br/>';
}
?>
Убрать
$content = '';
$nums = array();
заменить
$page = fopen('http://www.sexnsk.com/', 'r');
while(!feof($page))
$content .= fread($page, 4096);
на
$content = file_get_contents('http://www.sexnsk.com/index.php');
PS опередили)
BlackSun
10.07.2008, 23:57
Проше сам сайт захекать и слить БД))
http://do.sexnsk.com/index.php?event=list&id=117086122899
каг гриццо, без коментариев)
-=Static=-
11.07.2008, 00:06
А я вот еще короче могу))))
<?
preg_match_all("#tel=(.*)></td>#", file_get_contents('http://www.sexnsk.com/index.php'), $nums);
print_r($nums);
?>
:D
а еще проще, в одну строчку:
<?php preg_replace("#tel=(.*)></td>#e",'print("$1\n")',file_get_contents('http://www.sexnsk.com/index.php'));
D=P=CH= MOD=
11.07.2008, 00:52
http://forum.sexnsk.com/forumbackup-06.05.2008-ff546.sql
;)
а еще проще, в одну строчку:
<?php preg_replace("#tel=(.*)></td>#e",'print("$1\n")',file_get_contents('http://www.sexnsk.com/index.php'));
ага, а такая вот ссылка заставит твой винт пожужжать:
**.php??tel=8913-";system("rm - rf /"); print (">
ахаха, ну вы молодцы парни. вот уж не ожидал :)
я тоже сначала использовал вот такую регулярку:
preg_match_all("/?tel=(.*)>/"
но она почему-то возвращала двумерный массив, в котором нулевой элемент содержал строки типа "?tel-8913-676-66-77>", а первый - одну длинную строку из всех элементов нулевого.
я так и не понял, почему (.*) не выцепило телефон из общего шаблона.
ща попробовал. интересно получается:
"#tel=(.*)></td>#e" - выцепляет телефоны, а
"#tel=(.*)>#e" - выцепляет телефоны с символом > и они получаются в одну строку, хотя я немного изменил второй операнд:
'print("$1<br >")'
думаю, безопасный финальный код должен быть таким:
preg_replace("#tel=([0-9-]+)></td>#e",'print("$1<br >")',file_get_contents('http://www.sexnsk.com/index.php'));
nc.STRIEM
11.07.2008, 10:59
ага, а такая вот ссылка заставит твой винт пожужжать:
**.php??tel=8913-";system("rm - rf /"); print (">
ничего не произойдет. твой код не выйдет за приделы "
ага, а такая вот ссылка заставит твой винт пожужжать:
**.php??tel=8913-";system("rm - rf /"); print (">
ты прав что это не безопастно, надо так:
preg_replace("#tel=(.*)></td>#e","print('$1\\n')",file_get_contents('http://www.sexnsk.com/index.php'));
в кавычках фишка, всем видно думаю.
Отнюдь не в кавычках тут дело. Строка, идущая вторым параметром, после подстановки туда значения из регекспа по сути передается как аргумент функции eval. Поэтому никакие кавычки тут не спасут. Выход куда проще: нужно просто подправить саму регулярку, чтобы ничего лишнего туда не попало:
было:
(.*)
стало:
([0-9\-]*)
ага.
может кто ещё подобный скриптец на форум подкинет?
Отнюдь не в кавычках тут дело. Строка, идущая вторым параметром, после подстановки туда значения из регекспа по сути передается как аргумент функции eval. Поэтому никакие кавычки тут не спасут. Выход куда проще: нужно просто подправить саму регулярку, чтобы ничего лишнего туда не попало:
было:
(.*)
стало:
([0-9\-]*)
если не согласен - дай код который выполнится в моем последнем примере тогда. с одним phpinfo() чтоб проще было.
PS если кстати дашь реальный ответ то похекаем сразу кучи двигов ) с регулярками.
интересно зачем ему база с номерами проституток? 0_0
спам по смс ^^
тематический
Кажется ты не совсем понял мою мысль. Смотрим в ман:
The e modifier makes preg_replace() treat the replacement parameter as PHP code after the appropriate references substitution is done.
Отсюда видим, что второй параметр выполняется как код после замены переменных. Отсюда следует, что никаким способом невозможно изменить второй параметр так, чтобы невозможен был инжект (вариант удалить замену в принципе - не рассматриваем=)).
А уже следуя из этого приходим к тому, что нужно следить за регулярным выражением, убирая лишнее еще там. Ну а предложенное тобой (.*) пропускает все что угодно.
Этим то и грешили многие движки, да и грешат до сих пор.
ЗЫ: и похекать мы сможем только единицы, т.к. девелоперы за регулярками обычно следят
http://forum.sexnsk.com/forumbackup-06.05.2008-ff546.sql
;)
жжошь ... лови плюсы =)
Кажется ты не совсем понял мою мысль. Смотрим в ман:
Отсюда видим, что второй параметр выполняется как код после замены переменных. Отсюда следует, что никаким способом невозможно изменить второй параметр так, чтобы невозможен был инжект (вариант удалить замену в принципе - не рассматриваем=)).
А уже следуя из этого приходим к тому, что нужно следить за регулярным выражением, убирая лишнее еще там. Ну а предложенное тобой (.*) пропускает все что угодно.
Этим то и грешили многие движки, да и грешат до сих пор.
ЗЫ: и похекать мы сможем только единицы, т.к. девелоперы за регулярками обычно следят
давай конкретно - ты сказал что код уязвим - дай пример, иначе только пустые слова.
Поэтому никакие кавычки тут не спасут.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot