Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   о перфекционизме и проститутках (https://forum.antichat.xyz/showthread.php?t=76751)

Дикс 10.07.2008 23:00

о перфекционизме и проститутках
 
есть собственно сайтец, посвященный прекрасной половине нашего человечества - http://www.sexnsk.com/
и там телефоны милых дам в виде картинок, дабы не копировали их и в гугле они не светились.

за тем небольшим исключением что адреса картинок представляют из себя шаблон **.php??tel=8913-***

соответственно родилось желание эти номерки потырить.

что и сделал следующий код:
PHP код:

<?php
$content 
'';
$nums = array();

$page fopen('http://www.sexnsk.com/''r');

while(!
feof($page))
  
$content .= fread($page4096);

preg_match_all("/891[0-9-]+/"$content$nums);

foreach(
$nums[0] as $num)
    echo 
$num '<br />';

Зачем я это вообще написал?
Хочется узнать - можно ли как-то оптимизировать/сократить данный код? (ну кроме обфускатора конечно гг)

Jer1cho 10.07.2008 23:27

Совсем немного упростить если:
PHP код:

<?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/>';
}
?>


+toxa+ 10.07.2008 23:35

Убрать
PHP код:

$content '';
$nums = array(); 

заменить
PHP код:

$page fopen('http://www.sexnsk.com/''r');

while(!
feof($page))
  
$content .= fread($page4096); 

на
PHP код:

$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

А я вот еще короче могу))))

PHP код:

<?
preg_match_all
("#tel=(.*)></td>#"file_get_contents('http://www.sexnsk.com/index.php'), $nums); 
print_r($nums);
?>

:D

ShAnKaR 11.07.2008 00:33

а еще проще, в одну строчку:
PHP код:

<?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
;)

Helios 11.07.2008 03:25

Цитата:

Сообщение от ShAnKaR
а еще проще, в одну строчку:
PHP код:

<?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 (">

Дикс 11.07.2008 08:28

ахаха, ну вы молодцы парни. вот уж не ожидал :)

я тоже сначала использовал вот такую регулярку:
preg_match_all("/?tel=(.*)>/"
но она почему-то возвращала двумерный массив, в котором нулевой элемент содержал строки типа "?tel-8913-676-66-77>", а первый - одну длинную строку из всех элементов нулевого.

я так и не понял, почему (.*) не выцепило телефон из общего шаблона.

ща попробовал. интересно получается:
"#tel=(.*)></td>#e" - выцепляет телефоны, а
"#tel=(.*)>#e" - выцепляет телефоны с символом > и они получаются в одну строку, хотя я немного изменил второй операнд:
'print("$1<br >")'

Дикс 11.07.2008 08:52

думаю, безопасный финальный код должен быть таким:
PHP код:

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

Цитата:

Сообщение от Helios
ага, а такая вот ссылка заставит твой винт пожужжать:
Код:

**.php??tel=8913-";system("rm - rf /"); print (">

ничего не произойдет. твой код не выйдет за приделы "

ShAnKaR 11.07.2008 18:11

Цитата:

Сообщение от Helios
ага, а такая вот ссылка заставит твой винт пожужжать:
Код:

**.php??tel=8913-";system("rm - rf /"); print (">

ты прав что это не безопастно, надо так:
PHP код:

preg_replace("#tel=(.*)></td>#e","print('$1\\n')",file_get_contents('http://www.sexnsk.com/index.php')); 

в кавычках фишка, всем видно думаю.

Helios 11.07.2008 18:56

Отнюдь не в кавычках тут дело. Строка, идущая вторым параметром, после подстановки туда значения из регекспа по сути передается как аргумент функции eval. Поэтому никакие кавычки тут не спасут. Выход куда проще: нужно просто подправить саму регулярку, чтобы ничего лишнего туда не попало:
Код:

было:
(.*)

стало:
([0-9\-]*)


Дикс 11.07.2008 19:28

ага.
может кто ещё подобный скриптец на форум подкинет?

ShAnKaR 11.07.2008 22:16

Цитата:

Сообщение от Helios
Отнюдь не в кавычках тут дело. Строка, идущая вторым параметром, после подстановки туда значения из регекспа по сути передается как аргумент функции eval. Поэтому никакие кавычки тут не спасут. Выход куда проще: нужно просто подправить саму регулярку, чтобы ничего лишнего туда не попало:
Код:

было:
(.*)

стало:
([0-9\-]*)


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

genom-- 11.07.2008 23:17

интересно зачем ему база с номерами проституток? 0_0

+toxa+ 11.07.2008 23:32

спам по смс ^^
тематический

5triker 11.07.2008 23:45

званить и апщаца имхо

Helios 12.07.2008 01:47

Кажется ты не совсем понял мою мысль. Смотрим в ман:
Цитата:

The e modifier makes preg_replace() treat the replacement parameter as PHP code after the appropriate references substitution is done.
Отсюда видим, что второй параметр выполняется как код после замены переменных. Отсюда следует, что никаким способом невозможно изменить второй параметр так, чтобы невозможен был инжект (вариант удалить замену в принципе - не рассматриваем=)).

А уже следуя из этого приходим к тому, что нужно следить за регулярным выражением, убирая лишнее еще там. Ну а предложенное тобой (.*) пропускает все что угодно.

Этим то и грешили многие движки, да и грешат до сих пор.
ЗЫ: и похекать мы сможем только единицы, т.к. девелоперы за регулярками обычно следят

Sharky 12.07.2008 01:55

Цитата:

Сообщение от D=P=CH= MOD=
Код:

http://forum.sexnsk.com/forumbackup-06.05.2008-ff546.sql
;)

жжошь ... лови плюсы =)

ShAnKaR 12.07.2008 02:12

Цитата:

Сообщение от Helios
Кажется ты не совсем понял мою мысль. Смотрим в ман:

Отсюда видим, что второй параметр выполняется как код после замены переменных. Отсюда следует, что никаким способом невозможно изменить второй параметр так, чтобы невозможен был инжект (вариант удалить замену в принципе - не рассматриваем=)).

А уже следуя из этого приходим к тому, что нужно следить за регулярным выражением, убирая лишнее еще там. Ну а предложенное тобой (.*) пропускает все что угодно.

Этим то и грешили многие движки, да и грешат до сих пор.
ЗЫ: и похекать мы сможем только единицы, т.к. девелоперы за регулярками обычно следят

давай конкретно - ты сказал что код уязвим - дай пример, иначе только пустые слова.
Цитата:

Поэтому никакие кавычки тут не спасут.


Время: 19:06