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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
В России почти 10 лет легально работает сервис по псевдоремонту компьютеров. Его главные жертвы — пенсионеры
За переустановку Windows «мастера» сдирают до 200 тысяч рублей



https://dailystorm.ru/obschestvo/v-rossii-pochti-10-let-legalno-rabotaet-servis-po-psevdoremontu-kompyuterov-ego-glavnye-zhertvy-pensionery?utm_source=lentach&utm_medium=ctr&utm_campaign=lentach

Запостил: ru66oH4uk ru66oH4uk, (Updated )

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

  • Да ты глаза всем открыл! У меня почтовый ящик ломится от этих "компьютерный мастер, живу в вашем доме сделаю быстро выезд бесплатно". Л0х не мамонт - л0х не вымрет.
    Ответить
  • > 200к
    За 200к я новый комп со свежей виндой куплю... нахуй мне мастер.
    Ответить
  • свиньи. евреи и американцы даже на такого не делают, сука чтобу БЕДНЫХ СТАРИКОВ БЛЯДЬ!!!
    Ответить
  • хотя ты пиздабол знатный. у российских пенсионеров таких денег не бывает, только если они нажили бизнес в молодости
    Ответить
    • Им счёт на оплату выставляют, когда сам компьютер находится у них в сервисе. Заранее бы просили - шли бы на три буквы отовсюду
      Ответить
      • Интересно, а со старыми компами потом что делают? Или пенсионеров еще припугивают, чтобы заплатили, а потом великодушно дают скидку? Мне просто тоже надо винду переставить, вот не знаю, к кому обращаться.
        Ответить
          • Да блин, я всех уебков по именам не помню. Я на пост отвечаю, если он нормальный - то ок, если уебанский - стараюсь не.
            Ответить
        • > Мне просто тоже надо винду переставить, вот не знаю, к кому обращаться.

          А к кому обращаться, если в Gentoo надо мир пересобрать?
          Ответить
          • К кому обращаться если я хочу собрать arch linux как виндовс и на сервере?
            Ответить
                • Если у тебя есть пара месяцев свобного времени, то можно всё под себя собрать, угу)
                  Ответить
                    • У множества же дистров - почти все готово, бери и пользуйся, как модно говорят "изкаробки".
                      А в арче ты хуй соси и никто тебе не поможет, кроме man и aur вроде. И не дай бог ты зайдешь на форум (Если сможешь из под чистого арча зайти на форму, конечно другие способы связи никто не отменял) с вопросом, как тебя же пошлют такую сранину на окошки и ты вообще блядь охуел не знать чего то, хули ты сюда лезишь сел на линукс - отдал косарь часов своей безполезной работы, что блядь не веришь в бога линуса значит ты?! Сука пизда тебе, артиллерия гноя из прыщей к бою!

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

                        теперь сижу на готовом
                        Ответить
                          • Приведи пример, когда тебе в работе реально понадобилась оплата.
                            Ответить
                                • Ещё тонкости:
                                  1. С буквой «J» сочетается «I» (латинская «и» заглавная), чтобы получить «JI».
                                  2. С буквой «b» сочетается «l» (латинская «эль» маленькая), чтобы получить «bl».

                                  Как запомнить? Заглавная с заглавной, строчная со строчной, иначе по высоте не совпадут.
                                  Ответить
                                  • > С буквой «J» сочетается «I» (латинская «и» заглавная), чтобы получить «JI».

                                    Какой анскилл )))
                                    Ответить
                  • К тому времени всё обновится и придётся собирать заново. Ахилесс и черепаха.
                    Ответить
          • --Добрый день, вы занимаетесь ремнотном комптютеров?
            --Да
            --У меня на солярке деградировал zfs..
            Ответить
              • настройте мне пожалуйста модельку, чтоб сама настраивала компьютер
                Ответить
              • Переустановил вам виндуос, теперь ничего не деградирует
                С вас 78500 рублей
                Ответить
        • Оспаривать счёт можно только тех организаций, которым есть хоть какое-то дело до клиентов и своей репутации. Эти же пидорасы, очевидно, целиком и полностью мошенническая компания, и бумажками недовольных клиентов они будут только подтираться.

          Или ты имеешь в виду идти в Роспотребнадзор/суд? Так да, так делать нужно (хотя и далеко не факт, что что-то даст).
          Ответить
          • >Роспотребнадзор/суд
            Угу. А как они вообще могут заставить оплачивать их счет?
            Ответить
            • Кто они и кого их? Мошенники обманутых клиентов? Если комп в «сервисе» — просто скажут, что не отдадут, пока счёт не заплатят. Если ремонт на дому, то психологическим давлением (будут давить на совесть, грозить полицией, коллекторами, судами — и далеко не факт, что действительно не наймут каких-нибудь уебанов-коллекторов). Разумеется, грамотный и психологически устойчивый человек легко пошлёт их нахуй, но такие обычно услугами сомнительных ремонт-конторок не пользуются.
              Ответить
              • > не отдадут
                Да и хуй с ним, если новый комп дешевле этого "ремонта"...
                Ответить
              • > Если комп в «сервисе» — просто скажут, что не отдадут, пока счёт не заплатят.
                И у них его никак не вернуть? Вы в 90х до сих пор живете?

                >и далеко не факт, что действительно не наймут каких-нибудь уебанов-коллекторов
                Ебать у вас там сомали.
                Ответить
                • > И у них его никак не вернуть?
                  Ну, очевидно, надо накатать заяву в полицию. Только, во-первых, ебли с этим будет просто овердохуя (вспоминается «Тамина утомила»: детективная история о том, как тня сдала макбук в ремонт плешивой конторке, а потом три года бегала по судам в попытках вернуть, естественно, не починенный ноут и/или деньги), а во-вторых, как я уже написал, это рассчитано на слабые слои населения, подверженные психологическому давлению.

                  > Ебать у вас там сомали.
                  Вообще, это раньше коллекторы борзые были и насрать под дверь могли. Сейчас они уже не те, в основном просто 24/7 хуярят по телефону и методично жертву обрабатывают словесно.
                  Ответить
    • Молодость это сколько? У сегодняшних пенсов молодость пришлась на совок.
      Ответить
  • Кстати, нам листовки прикольные приносят - будто бы от руки написанные. С именем, мобильным телефоном и "Не фирма!". Даже мне, близорукому, с трудом удается полиграфию разглядеть (разве что две листовки сравнить, что они идентичны, курьеры тоже не лохи и сразу по две суют).
    Оно, конечно, понятно, по науке маркетинговой - частному мастеру доверия больше, ну и типа ручная работа, индивидуальный подход. Но тут эффективные менеджеры перемудрили - ребят, что за компьютерный мастер, у которого самого принтера нет? Хотя, может, для ЦА оно и вправду работает.
    А еще видел - подобную рукопись аж на биллборд растянули. Это уже какая-то метаирония.
    Ответить
  • Ещё ебово, когда такие ребята фотку добавляют к рекламе. Не знаю, встречаются ли там реальные фотки мастеров, но видел кого-то из it-шной тусовки (Цукерберга?) и почему-то Камбербетча
    Ответить
  • Товарищи, у меня к вам вопрос, вы когда-нибудь вызывали мастера на дом?
    Ответить
  • Друзья, это очень важно!
    У нас в Groovy есть перегрузка метода в рантайме по типу переменной.
    Это как таблица виртуальных методов, но без ООП.

    Впорос: в каком языке еще так можно?

    def foo(String me) {
    	println "I am string $me"
    }
    
    def foo(int me) {
    	println "Me int $me"
    }
    
    
    foo(System.nanoTime() % 5 ? 'string' : 42)
    foo(System.nanoTime() % 5 ? 'string' : 42)
    foo(System.nanoTime() % 5 ? 'string' : 42)
    foo(System.nanoTime() % 5 ? 'string' : 42)
    Ответить
        • def foo(me):
              if type(me) == str:
                  print("I am string ", me)
              elif type(me) == int:
                  print("Me int", me)
              else:
                  print("Me catch the ship, across the see")
          Ответить
          • Неужели ты не понял, что в моем примере метод выбирается сам, без всяких дуракцих "if type"?
            Ответить
            • Посмотрел, что можно выжать из «Фрипаскаля». У нас есть:
              1. Перегрузка функций, как в крестах.
              2. Type helpers (в других ЯП они называются экстеншон-методами), чтобы можно было писа́ть 42.foo. Хелперы можно использовать вместо перегрузки.
              3. Тип Variant (та самая запись с вариантным полем, с поддержкой проверки варианта в рантайме и с сахаром в компилтайме).

              Вроде всё есть, но когда скрещиваем Variant с перегрузкой или Variant с хелперами, ничего не получается. «Фрипаскаль» изо всех перегрузок выбирает одну (например, ту, которая для целого питуха), и остальные значения варианта пытается кастить в этот тип (и тогда он обламывается, когда нужно скастить строку). То есть диспетчеризация перегрузки работает только в компилтайме, а в рантайме не работает.

              В итоге приходится писа́ть точно такой же код, как у Антифриза отработанного:
              uses Variants;
              procedure foo(me: Variant);
              begin
                case VarType(me) of
                  varDouble: WriteLn('I am floating cockerel ', me);
                  varShortInt: WriteLn('Je suis integer ', me);
                  varString: WriteLn('Soy string ', me);
                else
                  Writeln('Kakoi bagor )))')
                end
              end;
               
              function Kukareku(what: Integer): Variant;
              begin
                  case what of
                  0: Kukareku := 42;
                  1: Kukareku := 3.14;
                  2: Kukareku := 'stroka';
                  end;
              end;
               
               
              begin
                  foo(Kukareku(0));
                  foo(Kukareku(1));
                  foo(Kukareku(2));
               
                  foo(42);
                  foo(3.14);
                  foo('stroka')
              end.


              https://ideone.com/fGpTWM
              Ответить
            • Теперь кресты:
              #include <iostream>
              
              void foo(double me) {
                  std::cout << "I am floating cockerel " << me << std::endl;
              }
              
              void foo(int me) {
                  std::cout << "Je suis integer " << me << std::endl;
              }
              
              void foo(const char * me) {
                  std::cout << "Soy string " << me << std::endl;
              }
              
              template<int what> auto kukareku();
              
              template<> auto kukareku<0>() {return 42;}
              template<> auto kukareku<1>() {return 3.14;}
              template<> auto kukareku<2>() {return "stroka";}
              
              int main() {
                  foo(kukareku<0>());
                  foo(kukareku<1>());
                  foo(kukareku<2>());
              
                  foo(42);
                  foo(3.14);
                  foo("stroka");
              
                  return 0;
              }


              https://ideone.com/njyIVn

              Код работает только с константами. При попытке посчитать kukareku<x>() от переменной не компилируется.

              При попытке же написать одну функцию auto kukareku() со свитч-кейсом внутри обламывается, потому что все ветви свитч-кейса должны вернуть значение одного типа (auto выводится в конкретный тип один раз).
              Ответить
              • Попробовал std::variant:
                typedef std::variant<int, double, const char *> myvariant;
                
                myvariant kukareku(int what) {
                    switch(what) {
                        case 0: return 42;
                        case 1: return 3.14;
                        case 2: return "stroka";
                    }
                }


                Красиво. Но не могу вызвать foo(kukareku(0)). Компилятор не хочет кастить std::variant в int, нужно вручную:
                foo(std::get<int>(kukareku(0)));
                foo(std::get<double>(kukareku(1)));
                foo(std::get<const char *>(kukareku(2)));

                То есть опять же принимать решение на этапе компиляции, а не в рантайме.
                Ответить
                • Можно с помощью метушни и какой-то матери сгенерить хуйню которая в рантайме зовёт функцию с нужным типом. Как std::visit, только без явного перечисления всех веток.
                  Ответить
                  • Спасибо за std::visit:
                    #include <iostream>
                    #include <variant>
                    
                    void foo(double me) {
                        std::cout << "I am floating cockerel " << me << std::endl;
                    }
                    
                    void foo(int me) {
                        std::cout << "Je suis integer " << me << std::endl;
                    }
                    
                    void foo(const char * me) {
                        std::cout << "Soy string " << me << std::endl;
                    }
                    
                    template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
                    template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
                    
                    using myvariant = std::variant<int, double, const char *>;
                    
                    int main() {
                        auto kukareku = [](int what) -> myvariant {
                          switch(what) {
                            case 0: return 42;
                            case 1: return 3.14;
                            case 2: return "stroka";
                          }
                        };
                    
                        auto cocock = overloaded {
                                [](double me) { return foo(me); },
                                [](int me) { return foo(me); },
                                [](const char * me) { return foo(me); },
                        };
                    
                        int x = 0;
                        std::visit(cocock, kukareku(x));
                        x = 1;
                        std::visit(cocock, kukareku(x));
                        x = 2;
                        std::visit(cocock, kukareku(x));
                    
                        return 0;
                    }


                    Шаблон overloaded подсмотрел тут: https://en.cppreference.com/w/cpp/utility/variant/visit (требует C++17).

                    Всё работает с проверкой в рантайме, но мне не понравилась тавтология:
                    auto cocock = overloaded {
                                [](double me) { return foo(me); },
                                [](int me) { return foo(me); },
                                [](const char * me) { return foo(me); },
                        };


                    А с помощью «метушни и какой-то матери» как будет выглядеть?
                    Ответить
                    • Фу, то ли дело "Цэ":
                      #include <stdio.h>
                      #include <stdlib.h>
                      
                      typedef enum {
                      	INT,
                      	STR,
                      } type;
                      
                      typedef struct {
                      	type type;
                      	union {
                      		char *s;
                      		int i;
                      	};
                      } variant_t;
                      
                      #define VARIANT(x) _Generic((x), \
                      	int: ((variant_t){.type = INT, .i = x}), \
                      	char*: ((variant_t){.type = STR, .s = x}) \
                      )
                      
                      void foo_int(int i)
                      {
                      	printf("Integer %d\n", i);
                      }
                      
                      void foo_str(char *s)
                      {
                      	printf("String \"%s\"\n", s);
                      }
                      
                      #define foo(x) (_Generic((x), \
                      	int: foo_int, \
                      	char*: foo_str \
                      )(x))
                      
                      void dynamic_foo(variant_t pitux)
                      {
                      	switch (pitux.type) {
                      		case INT: foo(pitux.i); break;
                      		case STR: foo(pitux.s); break;
                      		default: error("Error!"); break;
                      	}
                      }
                      
                      int main(void)
                      {
                      	for (int i = 0; i < 10; ++i) {
                      		dynamic_foo(rand() & 1 ? VARIANT(42): VARIANT("forty two"));
                      	}
                      	return 0;
                      }
                      https://ideone.com/fuFg1H
                      Ответить
                    • Да хуй знает... Первое что в голову приходит - взять список типов из варианта и раскрыть шаблон с оператором скобки, который зовёт нужную функцию, для каждого из них. Ну и породить от этих классов что-то одно и скормить в std::visit, как у тебя в примере с overload.
                      Ответить
            • Я за «Python».
              from functools import wraps
              from typing import get_type_hints
              from collections import defaultdict
              
              _funcs_table = defaultdict(dict)
              def overload(func):
                  arg_type = tuple(get_type_hints(func).values())[0]
                  _funcs_table[func.__name__][arg_type] = func
                  @wraps(func)
                  def wrapper(arg):
                      return _funcs_table[func.__name__][type(arg)](arg)
                  return wrapper
              
              @overload
              def f(x: int):
                  print(f'f(int): {x}')
              
              @overload
              def f(x: str):
                  print(f'f(str): {x}!')
                  
              @overload
              def f2(y: int):
                  print(f'f2(int): {y}')
              
              @overload
              def f2(y: float):
                  print(f'f2(float): {y}')
              
              f(42)
              f('Hello')
              f2(43)
              f2(43.0003)
              # f(int): 42
              # f(str): Hello!
              # f2(int): 43
              # f2(float): 43.0003

              https://ideone.com/1j7zi6

              Надо только расширить это говно на «*args, **kwargs» и резольвить по кортежу типов всех аргументов.
              Ответить
              • В общем могут только C#, Groovy и опытный шаблонизатор в C++.
                Питон может, но с костылем.

                Остальные хуй сосут
                Ответить
                • В общем-то так может любой язык с динамической типизацией, функциями первого порядка и интроспекцией. Но в Груви это весьма удобно сделано, да.
                  Ответить
                • Раз это можно сделать в C++, то скорее всего это можно сделать и в D, но проверять у нас некому.

                  Вопрос в том: зачем, Холмс?! Если оставлять проверку чисто в рантайме, то это error-prone; если включать указанный @CompileStatic, то почему просто не заюзать генерики или interface/protocol oriented development?
                  Ответить
                • И, кстати, в Obj C ты можешь сделать с точностью до наоборот: отправлять сообщения с конкретным именем всяким разным инстансам и надеяться, что не вылетит Unrecognized selector (или проверять на respondsToSelector). Но это ООП-way, так шо твоё условие сразу не соблюдено
                  Ответить
              • Нарыл забавную фичу из стандартной либы:
                # https://docs.python.org/3/library/functools.html#functools.singledispatch
                >>> from functools import singledispatch
                >>> @singledispatch
                ... def fun(arg, verbose=False):
                ...     if verbose:
                ...         print("Let me just say,", end=" ")
                ...     print(arg)
                >>> @fun.register
                ... def _(arg: int, verbose=False):
                ...     if verbose:
                ...         print("Strength in numbers, eh?", end=" ")
                ...     print(arg)
                ...
                >>> @fun.register
                ... def _(arg: list, verbose=False):
                ...     if verbose:
                ...         print("Enumerate this:")
                ...     for i, elem in enumerate(arg):
                ...         print(i, elem)

                Какой скилл )))
                Ответить
              • ну пиши тогда на qbasic
                один хуй результат тот же
                Ответить
    • Мультиметоды здорового человека?

      А что будет, если передать значение типа, для которого нет сигнатуры? Ошибка в рантайме или при копуляции или шо там в жабомире?
      Ответить
      • Будет ошибка в рантайме.
        foo(true)
        
        Caught: groovy.lang.MissingMethodException: No signature of method: prog.foo() is applicable for argument types: (Boolean) values: [true]
        Possible solutions: foo(int), foo(java.lang.String), run(), run(), any(), find()
        groovy.lang.MissingMethodException: No signature of method: prog.foo() is applicable for argument types: (Boolean) values: [true]
        Possible solutions: foo(int), foo(java.lang.String), run(), run(), any(), find()
        	at prog.run(prog.groovy:10)


        Но! можно сделать @CompileStatic, и тогда воще не скопулируетсмя

        cript1.groovy: 15: [Static type checking] - Cannot find matching method Script1#foo(boolean). Please check if the declared type is correct and if the method exists.
         @ line 15, column 1.
           foo(true)
           ^
        Ответить
        • Если с ошибкой в рантайме, то в том же Шарпе можно через dynamic: сделать одну публичную функцию, которая принимает динамик, и n приватных функций, которые принимают параметры нужных типов. Внутрь публичной поместить вызов приватных (он будет один благодаря перегрузке), работать должно точно так же
          Ответить
          • Действительно, ты прав
            public static void Main(string[] args)
                    {
                        Bar("as");
                    }
            
                    private static void Bar(dynamic foo)
                    {
                        Foo(foo);
                    }
            
                    private static void Foo(Int32 foo)
                    {
                        Console.WriteLine("I am number " + foo);
                    }
            
                    private static void Foo(string foo)
                    {
                        Console.WriteLine("I am string " + foo);
                    }

            Правда, мне пришлось добавить референс на Microsoft.CSharp.
            Это потому, что dynamic специфичен для шарпа?

            Выходит, что этакий куртштюн позволителен только в том случае, когда язык умеет И динамический И статический диспатч как груви и C#.

            Java, Kotlin, Perl, Python, Lua и Ruby так НЕ могут.
            Ответить
            • Насчёт референса не скажу.

              А так да, язык должен уметь в "а хуй знает, что это за тип тут, позже разберёмся", причём именно уметь, а не эмулировать
              Ответить
  • В рашке пеньсии подняли, так что могут себе позволить. Не понимаю хайпа.
    Ответить
  • Кстати, «utm_»-говно из ссылок следовало бы вырезать прямо нативно в браузере. Заебали ненужную хуйню на ссылки намазывать.
    Ответить
      • Вот правда, Referer разве не для этого придуман?
        Ответить
        • Referer в ссылке не отражается, а так ты опубоиковал ссылку, и они знают, откуда ты её взял
          Ответить
          • Кто знает? Рекламная ссылка находится на сайте, можно понять с какого сайта по ней перешли по Referer. Правда я не знаю, наверное она находится в отдельном фрейме, и в Referer будет адрес рекламной платформы, но тогда и в этот адрес можно зашить адрес реального сайта.
            Ответить
            • Дык они хотят знать не с какого сайта перешли, а на каком сайте ты изначально нашёл эту ссылку. Это могут быть 2 разных места если ты её зарепостил. Ну или если ты её в чатике скинул и чел вообще не с сайта перешёл.
              Ответить
              • Типа гиббончик запостил ссылку на говнокоде, и плюс в карму будет не говнокоду, а лентачу? Тогда логично, согласен.
                Ответить
                • Да, именно так.

                  Никогда не спрашивали "откуда вы о нас узнали"?
                  Ответить
              • Именно поэтому я за то, чтобы автоматически заменять эти параметры на utm_source=whooye&utm_medium=peaceda&utm _campaign=g-goorda.
                Ответить
                • Да лучше вообще стирать нахер. И без них ссылки длинные.

                  З.Ы. На самом деле я думаю такой плагин уже есть.
                  Ответить
                  • Ещё есть расширения, чтобы у поисковых систем стирать лишние параметры, оставлять только поисковый запрос (?q= или ?text=).
                    Ответить
                      • Да, поисковики вместо реальной ссылки сейчас в результатах поиска вставляют ссылку на себя же, а ссылка на найденный сайт появляется по событию onclick, чтобы можно было определить, по какому из результатов поиска ты кликнул. А эти расширения пытаются вернуть, как было: без перехватчиков события перехода.
                        Ответить
                          • Х.з., этот ping выглядит как меньшее зло по сравнению с тем говном, которое сейчас творится - utm параша в ссылках, обработчки кликов в рекламных скриптах. Так что если всё это говно выпилят и заменят на ping (который можно отключить) - я только за.
                            Ответить
                            • ЧТО???

                              Блять, POST запросы по клику?

                              POST-сука-шлюха-мразь-запросы по клику на ёбанный a href. Пизде-е-е-ец.

                              Прозреваю такую гору уязвимостей, когда из-под чужой сессии будут редиректить POST на какую-то хуйню.

                              > It will also include headers “Ping-From”, “Ping-To” and a “text/ping” content type.

                              Если POST нихуя не знает про эти новые заголовки, и в принципе игнорит Content-Type. Допустим

                              POST some/link?action=DELETE&id=42
                              Ответить
                              • The ping attribute, if present, gives the URLs of the resources that are interested in being notified if the user follows the hyperlink. The value must be a set of space-separated tokens, each of which must be a valid non-empty URL whose scheme is an HTTP(S) scheme. The value is used by the user agent for hyperlink auditing.

                                Отсюда: https://html.spec.whatwg.org/multipage/links.html#ping

                                И тут ограничения не описаны: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-ping

                                В «XMLHttpRequest» хотя бы запрещены кроссдоменные запросы. А тут, вероятно, можно с твоими куками заставить тебя голосовать на каком-нибудь сайте. Из-за этих мудаков приходится изобретать защиту от CSRF.

                                Авторы видимо считают, что раз чужой сайт не получит ответ, то отправлять запрос безопасно. Это типа как вставить элемент <script>, у которого в src указать ссылку на REST API: ответ ты прочитать не сможешь, но запрос отправится.
                                Ответить
                              • >> It will also include headers “Ping-From”, “Ping-To” and a “text/ping” content type.

                                Значит, на своём сайте придётся игнорировать всех, кто указывает Content-Type: text/ping. А на чужом сайте ничего не сделаешь: атрибут ping, оказывается, поддерживается веб-браузерами давно, но популярные CMS и фреймворки о нём не знают.
                                Ответить
                                • И неужели ни одному олуху из комитета не пришла в голову мысль сделать новый метод «PING».

                                  Но нет, хуйнём POST в вёбе ведь так мало разных дыр.

                                  Уроды.
                                  Ответить
                                  • вообще он есть и называется HEAD. но в мире персональных домашних страниц, как мы знаем, есть только гет и пост.
                                    Ответить
                                    • HEAD аналогичен GETy, но без тела.

                                      А они придумали отправлять запрос с телом.

                                      >ping URL, method is `POST`, body is `PING`
                                      Ответить
                                      • Напомнило костыль «Твиттора»: у них в REST API для удаления твита использовался метод DELETE, но поскольку в первых веб-браузерах с поддержкой AJAX можно было использовать только GET и POST, у них этот метод дублировался методом POST с параметром method=DELETE (или как-то так).
                                        Ответить
                                • >но популярные CMS и фреймворки о нём не знают.

                                  Да о чём говорить.
                                  Многие в 2к20 только-только научились писать код, отличающий GET от POST.

                                  А ведь ещё осталась куча phpшного ($_REQUEST), jspшного ( request.getParameter), aspшного и прочего легаси, которое зачастую вообще игнорит метод.
                                  Ответить
                                  • Во фреймворках сделали для дураков, чтобы можно было не думать о методах и течь, чтобы контроллер откликался хоть на GET, хоть на POST, а в результате эти фреймворки оказались уязвимы к CSRF.
                                    Ответить
                              • Дык блин. Сейчас говноскрипты для аналитики, которые на каждом втором сайте висят, точно так же делают пост на какую-то хуйню при клике по ссылкам. И в них всяко больше простора для уязвимостей чем в этой декларативной хуйне.
                                Ответить
                                • Эти скрипты ещё вызывают тормоза, потому что отслеживают события передвижения мыши, чтобы построить «тепловую карту кликов».
                                  Ответить
                          • >Ну не уебаны ли там в w3c сидят?

                            Именно поэтому я за «Internet Explorer».
                            Ответить
                        • ddg такой хуйнёй пока не занимаются.

                          А хуяндекс и 1e100 — пидарасы.
                          Ответить
                    • Есть ещё для лисички, типа когда ссылка хочет пройти через сервис редиректа (vk.com/away?url=http://govnokod.ru и проч.) слать в пизду и сразу идти по ссылке
                      Ответить
            • Да нет же.

              Я продал тебе рекламное место. Ты разместил у меня ссылку
              http://pethu.ru?source=MAKAKA
              Я потом разместил ее у себя в твиттере и мои друзья ее репостят.

              С моего твиттера (и твиттера моих друзей) к тебе идет траффик, но ты всё равно знаешь, что он идет через меня.
              Твои SMMщики потом читают гугл анал-итикс, и знают, откуда траффик идет, и ты понимаешь, что мне стоит платить за размещение ссылок
              Ответить
            • > можно понять с какого сайта по ней перешли по Referer
              Именно поэтому я за «uMatrix».
              Ответить
  • - Я так раньше никогда не делала. Мне понравилось. А тебее? - сказала она после того, как я влил в неё свой заряд и, уставший, уселся прямо на ковролин на полу кабинета.
    Ответить

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

Семь раз отмерь — один отрежь, guest!

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


    8