• Как указать Access-Control-Allow-Origin в php?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    CORS защищает от запроса не со стороннего сайта (сервера), а со стороннего клиента (браузера).

    С помощью CORS мы даем команду "проверь, что ajax запрос был запущен со страницы, которую мы отправили клиенту", т.к. заголовок origin при ajax запросе будет равен домену, на странице которого находился браузер, когда запрос делал. Этот origin в итоге и проверяется на соответствие разрешенному.

    То есть он защищает от того, чтобы кто-то на своем сайте не разместил javascript код, который запрашивает данные напрямую с вашего сайта и показывает их на том сайте, как будто данные принадлежали не вам, а другому сайту.

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

    Либо это набор букв-цифр (хеш), который ваш же сервер при первом запросе выдает другому серверу позволяя в дальнейшем делать запросы только дублируя выданное вами значение. По сравнению с проверкой IP это дает каждому клиенту свой собственный хеш, тогда как проверка IP может дать неожиданный результат, если люди сидят в компьютерном клубе и 10 человек будут считаться одним.

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

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

    Полная защита может быть так сделана - все запросы логики разрешены только аяксом и стоят корсы, что только с вашего сайта. А все не-ajax и не-GET запросы проверяются на список разрешенных IP адресов. Но даже тут заголовки можно сгенерировать так "как будто это ajax запрос" и все равно пробить.
    Ответ написан
    Комментировать
  • Как работает отправка формы в html?

    @kaka888
    C, C++, Qt, Python Flask, MySQL, Lua
    На сервере надо запустить веб-сервер и написать программу, которая будет принимать запросы.
    Для этого можно использовать один из следующих языков: Python (Flask), PHP, JavaScript (NodeJS), C# и др.
    Ответ написан
    Комментировать
  • Поиск, удаление и замена строки из кортежа в списке, как реализовать?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    from itertools import repeat
    d = {}
    for x in [('a', 'd', 'z', 'x'), ('b', 'e ', 'k', 'l'), ('b', 'e', 'm', 'n'), ('c', 'f', 'g', 'h'), ('c', 'f', 'y', 'w')]:
        d.setdefault(x[:2], {}).update(zip(x, repeat(None)))
    print([list(v.keys()) for v in d.values()])

    Но у вас во втором кортеже пробел около "e" и, строго говоря, ваше решение неверно.
    Либо пробел уберите, либо можно стрипнуть ключи заменив x[:2] на tuple(map(str.strip, x[:2]))
    Тут не использованы множества, чтобы не терять порядок элементов.
    Ответ написан
    Комментировать
  • Несколько .replace Как ускорить работу?

    LazyTalent
    @LazyTalent
    Data Engineer, Freelancer
    >>> 'abcdef'.translate(str.maketrans({'a': '1', 'e': '5'}))
    '1bcd5f'
    Ответ написан
    Комментировать
  • VKbot, Read timed out, как обойти?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    NameError: name ‘requests’ is not defined
    - у вас библиотека requests импортируется в коде?
    Ответ написан
    1 комментарий