"PHP" / Говнокод #14668 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
<?php
define('STOCK_URL', 'http://govnokod.ru/comments');
define('REFERER_URL', 'http://govnokod.ru/');
define('AUTH_COOKIES', 'a:2:{s:9:"PHPSESSID";s:26:"k719c8rqcm85dptista7b7rck7";s:4:"auth";s:32:"0ce5a7d54092aa07e37b88ffbe098135";}');
define('MODERATED_TEXT', '[color=red][i]Слава «Беркуту»![/i][/color]');
define('DEFAULT_UA', 'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.16');
define('POST_HEADERS', "X-Requested-With: XMLHttpRequest\r\nContent-Type: application/x-www-form-urlencoded\r\n");
define('PONY1', "//ol[@class='posts hatom']/li/h2/a");
define('PONY2', "//form/div/input[@name='_csrf_token']");
define('PONY3', "//li[@class='hcomment']/div/a[@class='edit-comment-link']");

function myCookies() {
	$map_cookies = function($k, $v) {return $k . '='. $v;};
	return implode('; ', array_map($map_cookies, array_keys(unserialize(AUTH_COOKIES)), unserialize(AUTH_COOKIES)));
}

function huyarim($url, $referer, $mask, $attr) {
	$context_options = stream_context_create(array('http' => array(
	  'method' => 'GET',
	  'user_agent' => DEFAULT_UA,
	  'header' => 'Referer: '. $referer . "\r\n" . 'Cookie: ' . myCookies()
	)));
	$links = array();
	$file = @file_get_contents($url, false, $context_options);
	if ($file) {
	  $old_libxml_error = libxml_use_internal_errors(true);
	  $dom = new DOMDocument;
 	  $dom->loadHTML($file);
	  libxml_use_internal_errors($old_libxml_error);
 	  $domxpath = new DOMXPath($dom);
 	  $filtered = $domxpath->query($mask);
	  foreach ($filtered as $item) {
		$links[] = $item->getAttribute($attr);
	  }
	}  
	return $links;
}

function getList() {return huyarim(STOCK_URL, REFERER_URL, PONY1, 'href');}
function getCsrf($url) {$tokens = huyarim($url, STOCK_URL, PONY2, 'value'); return $tokens[0];}
function getComments($url) {return huyarim($url, STOCK_URL, PONY3, 'href');}

function doPost($url, $referer, $token) {
	$postdata = http_build_query(array(
	  '_csrf_token' => $token,
	  'text' => MODERATED_TEXT,
	  'commentSubmit' => 'Отправить комментарий [Ctrl+Enter]',
	  'ajax' => 'true'
 	));
	$context_options = stream_context_create(array('http' => array(
	  'protocol_version' => 1.1,
	  'method' => 'POST',
	  'user_agent' => DEFAULT_UA,
	  'header' => POST_HEADERS . 'Referer: '. $referer . "\r\n" . 'Cookie: ' . myCookies(),
	  'content' => $postdata
	)));
	return file_get_contents($url, false, $context_options);
}

$links = getList();
foreach($links as $link) {
	$token = getCsrf($link);
	$comments = getComments($link);
	foreach($comments as $comment) {
		if (false !== doPost($comment, $link, $token)) {
			echo $comment . ' OK' . PHP_EOL;
		}
	}
}

CURL и PECL_HTTP не нужны. Да, и ООП тоже не нужно.

Запостил: inkanus-gray inkanus-gray, (Updated )

Комментарии (65) RSS

  • >
    define('PONY1', "//ol[@class='posts hatom']/li/h2/a");
    define('PONY2', "//form/div/input[@name='_csrf_token']");
    define('PONY3', "//li[@class='hcomment']/div/a[@class='edit-comment-link']");


    Это что, вброс г.. на на вентилятор?
    Ответить
    • С логином может не поместиться в сто строк, поэтому оставим его читателям в качестве домашнего задания.

      Тактико-техническое требование: обеспечить логин через OpenID, потому что пароль владелец аккаунта в любой момент может сменить.
      Ответить
      • >поэтому оставим его читателям в качестве домашнего задания.
        >ко-ко-ко, ниасилил, ко-ко-ко
        Понятно.

        Опенид зарегить тяжелее, чем 100 логинов на гк.
        Ответить
        • Список опенид-провайдеров с регистрацией в один шаг:
          1. Яндекс. Используем айдишник типа kokoko.ya.ru.
          2. Мейлрушечка. Используем айдишник типа kokoko.id.mail.ru (или kokoko.id.inbox.ru, kokoko.id.list.ru, kokoko.id.bk.ru, в зависимости от домена).
          3. Яху. Там айдишник некрасивый и напрямую из адреса ящика не выводится, надо смотреть в своём профиле.
          4. Гугл. Такая же ситуация, как с Яху, но можно создать журнал в Блогспоте и использовать красивый айдишник kokoko.blogspot.com. Более того, на одну гугловскую учётку можно создать кучу блогспотовских журналов.

          Для остальных провайдеров (например, myid.net, myopenid.com, oneid.ru, loginza.ru, livejournal.com, wordpress.com) потребуется предварительно регать е-мейл, но можно попытаться воспользоваться одноразовым мейлом.

          Почему я заговорил про опенид? Благодаря Страйкеру здесь к учётке можно привязывать опенайдишники, а кнопки для отвязывания я не нашёл. Т. е. один раз привязав опенайдишник к захваченной чужой говнокодовской учётке, ты получишь её навсегда. Первый владелец может даже сбрасывать пароль, но ему это не поможет. Отвязать опенайдишник можно только через письмо Страйкеру.
          Ответить
          • Что? У сиреженьки можно регистрировать акки без телефона? Для остальных тот же вопрос.
            Ответить
            • Только что создал без телефона konardin@gmail.com, из него создал http://konardo.blogspot.com/

              Привязать блогспотовский айдишник к ГК сейчас не получилось из-за бага в пыховской библиотеке ('Dumb' signature verification failed), но зато привязал основной гугловский айдишник. Он у меня выглядит так:
              https://www.google.com/accounts/o8/id?id=AItOawkju6u9WPJg9TpeIfxulrf6Rewavjo8qhI
              (вводить при логине надо https://www.google.com/accounts/o8/id).

              Итого: минута на регистрацию, телефон не нужен.

              В Яндексе и в Мэйле ещё быстрее.
              Ответить
              • О, да тут сходка троллей. О...
                Товарищи, есть ли способ создать свой мейл-сервер, чтобы получать ссылки на подтверждение емейл-адресов чтобы регистрировать анкеты на сайтах? Возможно ли сделать это на Delphi/Indy?
                Ответить
                • Способ есть. Главное в DNS создать MX-запись, остальное — пустяки.
                  Ответить
                  • Без подколов, плз.
                    На вкладке компонентов Indy есть компонент - IdSmtpServer.
                    Может, у кого-то есть опыт работы с ним?
                    Ответить
                    • плять, формошлёпщики нихуя не могут без кнопочек на панели дельфинария
                      первая буква в smtp означает Simple
                      это простейший текстовый протокол
                      Ответить
                      • Мы не понимаем с Вами друг друга, дорогой товарищ. Заставить компонент работать нетрудно; вопрос в том, как отправить на него сообщение. Сервер создается, разумеется, в пределах моего компа.
                        Какой должен быть хост? На какой адрес отправлять, как он будет выглядеть?
                        Ответить
                        • Чтобы принять входящее сообщение, нужно владеть доменом. Без этого никак.

                          Если почтовый сервер видит адрес получателя kokoko@yamudak.com, то он спрашивает у DNS для домена yamudak.com запись типа MX. Допустим, там будет запись
                          yamudak.com. 3600 IN MX smtp.yamudak.com.
                          Тогда почтовый сервер приконнектится к tcp-порту № 25 машины smtp.yamudak.com, а дальше отправитель и smtp.yamudak.com будут общаться согласно RFC 2821.

                          smtp.yamudak.com: 220 Привет, я типа почтовый сервер! Я клёвый!
                          Отправитель: EHLO gmail.com
                          smtp.yamudak.com: 250-<тут он сообщит, какой он крутой и какие команды он поддерживает>
                          Отправитель: MAIL FROM:<govnoforum@gmail.com>
                          smtp.yamudak.com: 250 OK
                          Отправитель: RCPT TO:<horse666@yamudak.com>
                          smtp.yamudak.com: 250 OK
                          Отправитель: DATA
                          smtp.yamudak.com: 354 Что ж, начни отправлять письмо, закончи переносом строки, точкой и ещё одним переносом.
                          Отправитель: <тут он отправит письмо со всеми заголовками>
                          smtp.yamudak.com: 250 OK
                          Отправитель: QUIT
                          smtp.yamudak.com: 221 Чмафки, лю тя!
                          < Отправитель покинул чатик >

                          Вот и вся любовь. На айпи отправить е-мейл нельзя.
                          Ответить
                          • Ошибся, а меня никто не поправил. У MX-записи перед доменом, разумеется, будет ещё число, показывающее приоритет записи на случай, если smtp-серверов несколько (имеются резервные). Поэтому пример следует читать так:
                            yamudak.com. 3600 IN MX 10 smtp.yamudak.com.
                            Ответить
                      • > это простейший текстовый протокол
                        Да не, тут stertor прав. Зачем изобретать велосипед, если есть готовая реализация этого протокола?
                        Ответить
                        • неспособность разобраться в smtp и подключение в проект функционала через перетаскивание кнопочки с панели на форму - это крайняя степень пиздеца
                          уверен, что реализовал этот смтп-сервер такой же программист мышкой
                          школьники, займитесь делом, почитайте хотя бы педивикию, раз rfc не можете
                          Ответить
                          • > подключение в проект функционала через перетаскивание кнопочки с панели на форму - это крайная степень пиздеца
                            Ты просто им завидуешь.

                            Да и никто не заставляет кидать этот компонент на форму. Можно подключить модуль через uses и создавать инстанс вручную.
                            Ответить
                          • Зачем велосипедить смтп-сервер (для которого потом придётся ещё и реализовывать многочисленные расширения протокола, не описанные в основном рфц), когда можно установить готовый?

                            P.S. Мне страшно представить велосипедную реализацию STARTTLS компайл-тайм на макросах.
                            Ответить
                            • зачем нужно реализовывать многочисленные расширения протокола, если ему нужен простейший майл-сервер
                              он же не собирается делать промышленный сервер, на дельфи-то
                              Ответить
                            • Лол, ни дай бог криптографию велосипедить.

                              >компайл-тайм на макросах.
                              Это теперь аналог "на скриптах за 5 минут по айпишнику на уровне ядра"?
                              Ответить
                      • Для какого-то злого эксперимента (у нас начальство их любит: скрам, аджайл, опен-спейс...) решили дать моему "коллеге" написать программу для бэкоффиса, чтобы они могли конвертировать шрифты для загрузки в наш редактор (редактор на флеше).
                        Коллега - "Виндовс-программист" (т.е. он умеет только пользоваться программами с графическим интерфейсом, и считает, что Виндовс 8 - самая лучшая во всех отношениях операционная система, если бы он умел читать/писать по-русски, был бы вылитый Стертор). Вобщем, решил он писать эту программу на АИРе.
                        Наш проект собирается Антом, поскольку скрипты для сборки писал я, коллега пришел ко мне:
                        --Слышь, мне тут нужно библиотеку со шрифтами [...].
                        Я ему нашел три опенсорные реализации на Хексе (компилируется во много разных языков, в том числе в исходники С++, флешевый байткод). Объяснил, что Ант ему не нужен, потому-что сам по себе не имеет отношения к перекодировке шрифтов из ТТФ в флешевый формат, что Ант за собой потащит Яву и Флексовый компилятор, все в комплекте - почти гигабайт.

                        В итоге у всех в дизайнеров в оффисе теперь есть по копии Флеск СДК + программа собраная в АИР перетаскиванием компонент мышкой. Коллега поднял свой авторитет среди дизайнеров, бегая с умным видом от компа к компу скачивая им Яву и СДК. Теперь он просто незаменим.
                        Ответить
                        • >"Виндовс-программист" (т.е. он умеет только пользоваться программами с графическим интерфейсом, и считает, что Виндовс 8 - самая лучшая во всех отношениях операционная система, если бы он умел читать/писать по-русски, был бы вылитый Стертор).
                          Что-то такое есть. Порабощенные спермомирком.
                          Ответить
                        • если в качестве примера взять WinHttp - то нахуй не впёрлись
                          алсо половина таких либ написана для однопоточных анскильных питушков, которым всё что нужно - это выполнить 1 запрос в секунду из своего убогого приложения

                          или ты даже не осилил составить или разобрать http заголовок?
                          Ответить
                          • Не осилил и нахуй не нужно - разницу улавливаешь?

                            Когда-то делал закат солнца вручную, потом бросил. Увидишь библиотеку вроде requests - поймешь, какой же ты мудак.
                            Ответить
                            • напишешь сервер, который держит хотя бы 10к клиентов - поговорим
                              requests - судя по примеру прямо на их заглавной странице - обыкновенный однопоточный блокирующий шит
                              читай про event-driven
                              Ответить
                              • Какое это отношение имеет к велосипедостроению? Если тебе нужны асинхронные - они тоже есть.
                                Ответить
                                • тут в качестве рекламы python requests (и любой другой невелосипедной библиотеки) должен был бы быть сервер, который 10к одновременных клиентов обслуживает, скажем, 200 потоками и потребляет, скажем, < 0.5G RAM
                                  Ответить
                                  • > requests
                                    > сервер
                                    WTF? Requests это же всего лишь http клиент.

                                    А асинхронная серверная часть, емнип, есть в twisted. Х.з.че у не со скоростью, питон не особо дружит с перфомансом и потоками..
                                    Ответить
                                    • клиент? ок
                                      > алсо половина таких либ написана для однопоточных анскильных питушков, которым всё что нужно - это выполнить 1 запрос в секунду из своего убогого приложения

                                      вот и вернулись к тому, с чего всё начиналось
                                      Ответить
                                      • > однопоточных анскильных питушков
                                        Более того, этот requests блокирующий.
                                        Ответить
                                        • любая сетевая активность в серьезном приложении должна быть асинхронной
                                          иначе ты даже тупо не сможешь нажать на крестик своего окошка, пока отправил http запрос хуй пойми куда
                                          (к слову, даже в убогом winhttp есть асинхронность, правда неуправляемая по ресурсам)
                                          Ответить
                                          • Не понял, кто сказал, что во время ожидания запроса надо нихуя не делать и не принимать сообщения?
                                            Причём тут потоки?
                                            Ответить
                                            • Странно, что ты не спрашиваешь,при чем тут анскильные петушоки. Хм..
                                              Ответить
                                            • как ты примешь следующее сообщение из очереди сообщений, если ты уже заблокировался в своем единственном потоке на приёме ответа от сервера
                                              другое дело - сигнал
                                              Ответить
                                              • Я не сижу в вечном цикле, ожидая сообщения от сервера, понимаешь? Я сижу в вечном цикле, принимая сообщения от пользователя или от системы, между делом мне может прийти сообщение "тут что-то сервер прислал, позырь".
                                                Зависнуть в процессе обработки сообщения от сервера? Мне кажется, этот вопрос уже не имеет отношения к сетям.
                                                Ответить
                                                • > между делом мне может прийти сообщение "тут что-то сервер прислал, позырь"
                                                  воот, даже до Тараса дошло, что в сетевых вопросах без асинхронности никак
                                                  Ответить
                                              • Я подозреваю, что Тарас предпочитает мультиплексирование и корутины.
                                                Ответить
                                          • > в серьезном приложении
                                            Определи серьезное приложение. 400 потоков - это серьезно? Прекрасно работает на тредах.

                                            >иначе ты даже тупо не сможешь нажать на крестик своего окошка, пока отправил http запрос хуй пойми куда
                                            Чем треды не устраивают?
                                            Ответить
                                            • Измерять серьёзность приложения кол-вом потоков - это что-то новенькое.
                                              Ответить
                                              • Проблемы с блокирующим API проявляются с определенного количества соединений (то есть потоков), roman-kashitsyn
                                                Ответить
                                            • треды это было интересно лет эдак 20 назад (апач "был написан в начале 1995 года")

                                              400 потоков - навскидку должны держать 12к соединений плюс минус трамвайная остановка (зависит от того, насколько интенсивный обмен)

                                              1 поток на 1 соединение - это фуфел, годно только для тех, кто уже ограничен инструментом и не может никак иначе

                                              это, замечу, пока ещё не ввели таймаут этого соединения - и если этим занимается тупоголовый блокирующий программист, то в результате ещё +1 поток на соединение (один ждёт чтения на сокете, второй - ждёт срабатывания таймера, чтобы прибить первый тред)
                                              Ответить
                                              • >1 поток на 1 соединение - это фуфел,
                                                Для сервера.
                                                Ответить
              • Да, действительно. Писечка сереженьки смилостивилась? Раньше вроде никак было.
                Ответить
                • Он может задним числом заблокировать учётку, не привязанную к телефону, если будешь пользоваться гуглоплюсом и прочей ненужной ерундой, под предлогом, что Серёженька сомневается в подлинности анкеты. А если всем подряд не пользоваться, то может и прокатить.
                  Ответить
                  • У меня непривязанный к телефону акк живет уже черти сколько, пользуюсь только почтой. А что, были случаи?
                    Ответить
                    • Случаи были, но должно сильно повезти, чтобы попасть под раздачу.

                      У меня однажды Фейсбук фотографию банковской карточки спросил, но через месяц передумал и разблокировал, не дождавшись моего ответа. Едва ли не все крупные сети время от времени берут пользователей на испуг.
                      Ответить
                  • Алсо 100% было время, когда было нельзя. А щас можно в одноклассниках без телефона?
                    Ответить
                    • Да, они чуть ли не каждый месяц меняют правила...

                      В Одноклассниках и даже во Вконтакте сейчас без телефона нельзя... Но если очень хочется, то можно: http://sms-reg.com/

                      Порядка 10 российских рублей. Деньги можно перевести, например, с анонимного ящика Яндекс-денег, на который в РФ можно анонимно закинуть наличные через терминал экспресс-оплаты. Теоретически нет гарантии, что аккаунт потом не уведут, потому что никому не известно, в чьих руках симка, на которую принимали SMS, но по отзывам злоупотреблений пока не было.
                      Ответить
  • [code]**************************************** ****
    * ВАЖНАЯ ИНФОРМАЦИЯ *
    **************************************** ****


    Никнейм: anonimb84a2f6fd141
    Openid: anonim-backdoor.id.mail.ru
    Пароль от openid: dc604057d2ea

    Никнейм: Horse2
    Openid: horse2-backdoor.id.mail.ru
    Пароль от openid: SG9yc2Uy

    Никнейм: Horse3
    Openid: horse3-backdoor.id.mail.ru
    Пароль от openid: SG9yc2Uz

    Никнейм: Konardo
    Openid: konardo-backdoor.id.mail.ru
    Пароль от openid: S29uYXJkbw==

    ********************************************


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

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8