Как cookie HttpOnly работают с запросами Ajax?

Я придумал простое решение - код более понятен. Это один из вопросов динамического программирования.

Код не заботится об ошибках и краях. Его просто образец, чтобы дать идею базовой логики решить проблему.

namespace MaxProfitForSharePrice
{
    class MaxProfitForSharePrice
    {
        private static int findMax(int a, int b)
        {
            return a > b ? a : b;
        }

        private static void GetMaxProfit(int[] sharePrices)
        {
            int minSharePrice = sharePrices[0], maxSharePrice = 0, MaxProft = 0;
            int shareBuyValue = sharePrices[0], shareSellValue = sharePrices[0];

            for (int i = 0; i < sharePrices.Length; i++)
            {
                if (sharePrices[i] < minSharePrice )
                {
                    minSharePrice = sharePrices[i];
                    // if we update the min value of share, we need to reset the Max value as 
                    // we can only do this transaction in-sequence. We need to buy first and then only we can sell.
                    maxSharePrice = 0; 
                }
                else 
                {
                    maxSharePrice = sharePrices[i];
                }

                // We are checking if max and min share value of stock are going to
                // give us better profit compare to the previously stored one, then store those share values.
                if (MaxProft < (maxSharePrice - minSharePrice))
                {
                    shareBuyValue = minSharePrice;
                    shareSellValue = maxSharePrice;
                }

                MaxProft = findMax(MaxProft, maxSharePrice - minSharePrice);
            }

            Console.WriteLine("Buy stock at ${0} and sell at ${1}, maximum profit can be earned ${2}.", shareBuyValue, shareSellValue, MaxProft);
        }

        static void Main(string[] args)
        {
           int[] sampleArray = new int[] { 1, 3, 4, 1, 1, 2, 11 };
           GetMaxProfit(sampleArray);
            Console.ReadLine();
        }
    }
}
191
задан Shawn 9 April 2010 в 02:11
поделиться

9 ответов

Да, cookie только для HTTP были бы хорошо для этой функциональности. Им все еще предоставят запрос XmlHttpRequest к серверу.

В случае Переполнения стека, cookie автоматически обеспечиваются как часть запроса XmlHttpRequest. Я не знаю детали реализации поставщика аутентификации Переполнения стека, но что cookie-данные, вероятно, автоматически используются для проверки идентификационных данных на более низком уровне, чем метод контроллера "голосования".

В более общем плане, cookie не требуются для Ajax. Поддержка XmlHttpRequest (или даже iframe дистанционная работа, на более старых браузерах) является всем, что технически требуется.

Однако, если Вы хотите обеспечить безопасность для Ajax, добавил функциональность, тогда те же правила применяются как с традиционными сайтами. Вам нужен некоторый метод для идентификации пользователя позади каждого запроса, и cookie являются почти всегда средствами с этой целью.

В Вашем примере, я не могу записать в Ваш document.cookie, но я могу все еще украсть Ваш cookie и отправить его на мой домен с помощью объекта XMLHttpRequest.

XmlHttpRequest не выполнит междоменные запросы (для точно видов причин, которых Вы касаетесь).

Вы могли обычно вводить сценарий для отправки cookie в домен с помощью iframe дистанционную работу, или JSONP, но тогда только для HTTP защищает cookie снова, так как это недоступно.

, Если Вы не поставили под угрозу StackOverflow.com на стороне сервера, Вы не будете в состоянии украсть мой cookie.

Редактирование 2: Вопрос 2. Если цель Http-только состоит в том, чтобы предотвратить доступ JavaScript к cookie, и можно ли все еще получить cookie через JavaScript через Объект XmlHttpRequest, какой смысл Http-только?

Рассматривают этот сценарий:

  • я нахожу, что авеню вводит код JavaScript в страницу.
  • Jeff загружает страницу, и мой злонамеренный JavaScript изменяет его cookie для соответствия моему.
  • Jeff отправляет звездный ответ на Ваш вопрос.
  • , поскольку он отправляет его с моими cookie-данными вместо его, ответ станет моими.
  • Вы голосуете за "мой" звездный ответ.
  • Моя реальная учетная запись понимает.

С cookie только для HTTP, второй шаг был бы невозможен, таким образом, победив мою попытку XSS.

Редактирование 4: Извините, я подразумевал, что Вы могли отправить XMLHttpRequest в домен StackOverflow, и затем сохранить результат getAllResponseHeaders () к строке, regex cookie, и затем отправить это на внешний домен. Кажется, что Википедия и ha.ckers соглашаются со мной на этом, но я любил бы быть перевоспитанным...

Это корректно. Вы можете все еще налет сессии тот путь. Это делает значительно тонкий стадо людей, которые могут успешно выполниться даже, что XSS взламывают против Вас все же.

Однако, если Вы возвращаетесь к моему сценарию в качестве примера, Вы видите, где только для HTTP делает , успешно отключает нападения XSS, которые полагаются на изменение (весьма распространенных) cookie клиента.

Это сводится к тому, что a) никакое единственное улучшение не решит весь уязвимости и b) никакая система не будет никогда быть абсолютно безопасной. Только для HTTP полезный инструмент в укреплении против XSS.

Точно так же даже при том, что перекрестное доменное ограничение на XmlHttpRequest не на 100% успешно в предотвращении всего использования XSS, Вы все еще никогда не мечтали бы об удалении ограничения.

62
ответ дан Jeff Atwood 23 November 2019 в 05:35
поделиться

Не обязательно, это зависит, что Вы хотите сделать. Вы могли уточнить немного? Ajax не нужен доступ к cookie для работы, это может выполнить запросы самостоятельно для извлечения информации, запрос страницы, который выполняет вызов Ajax, мог получить доступ к cookie-данным & пасуйте назад это к сценарию выполнения вызова без необходимости JavaScript непосредственно получить доступ к cookie

4
ответ дан Glenn Slaven 23 November 2019 в 05:35
поделиться

Да, они - жизнеспособный вариант для основанного на Ajax сайта. Cookie аутентификации не для управления сценариями, но просто включены браузером на всех Запросах HTTP, сделанных к серверу.

Сценарии не должны волноваться о том, что сеансовые куки говорят - пока Вы аутентифицируетесь, тогда любые запросы к серверу, инициируемому или пользователем или сценарием, будут включать соответствующие cookie. То, что сценарии не могут самостоятельно знать содержание cookie, не имеет значения.

Для любых cookie, которые используются в целях кроме аутентификации, они могут быть установлены без HTTP, только отмечают, если Вы хотите, чтобы сценарий был в состоянии изменить или считать их. Можно привередничать, какие cookie должны быть HTTP только, так например, что-либо нечувствительное как предпочтения UI (порядок сортировки, свернуть левую область, или не) может быть совместно использован в cookie со сценариями.

мне действительно нравится HTTP только cookie - это - одно из тех собственных расширений браузера, которое было действительно отличной идеей.

4
ответ дан thomasrutter 23 November 2019 в 05:35
поделиться

Cookie автоматически обрабатываются браузером при совершении вызова Ajax таким образом, нет никакой потребности в JavaScript для бездельничания с cookie.

1
ответ дан pkchukiss 23 November 2019 в 05:35
поделиться

Поэтому я предполагаю, что JavaScript нужен доступ к Вашим cookie.

Все Запросы HTTP от Вашего браузера передают Вашу информацию о куки для рассматриваемого сайта. JavaScript может и установить и считать cookie. Cookie по определению не требуются для приложений Ajax, но они требуются для большинства веб-приложений поддержать пользовательское состояние.

для формального ответа на Ваш вопрос, как формулируется - "JavaScript нужен доступ к cookie, если Ajax используется?" - поэтому "нет". Думайте о расширенных полях поиска, которые используют запросы Ajax для обеспечения, автопредлагают опции, например. Нет никакой потребности информации о куки в этом случае.

1
ответ дан Polsonby 23 November 2019 в 05:35
поделиться

Как разъяснение - с точки зрения сервера, страница, которую требует запрос Ajax, по существу не отличается от стандартного HTTP, получают запрос, сделанный пользователем, нажимающим на ссылку. Все нормальные свойства запроса: агент пользователя, IP, сессия, cookie, и т.д. передается серверу.

1
ответ дан Glenn Slaven 23 November 2019 в 05:35
поделиться

Нет, страница, что запросы вызова Ajax имеют доступ к cookie также & это - то, какие проверки, зарегистрированы ли Вы.

можно сделать другую аутентификацию с JavaScript, но я не доверял бы ему, я всегда предпочитаю помещать любой вид аутентификации, регистрируясь в бэкенде.

0
ответ дан Glenn Slaven 23 November 2019 в 05:35
поделиться

Да, cookie очень полезны для Ajax.

Помещение аутентификации в URL запроса является плохой практикой. Было сообщение печати на прошлой неделе о получении аутентификационных маркеров в URL от кэша Google.

Нет, нет никакого способа предотвратить нападения. Более старые браузеры все еще предоставляют тривиальный доступ к cookie с помощью JavaScript. Можно обойти http только и т.д. Независимо от того, что Вы придумываете, может обойтись, учитывая достаточное усилие. Прием должен сделать слишком большим усилием стоить.

Если Вы хотите сделать свой сайт более безопасным (нет никакой идеальной безопасности), Вы могли использовать cookie аутентификации, который истекает. Затем если cookie украден, взломщик должен использовать его, прежде чем он истечет. Если они не делают затем, у Вас есть хороший признак существует подозрительное действие по той учетной записи. Чем короче окно времени, тем лучше для безопасности, но большего количества загрузки оно ставит Ваш сервер генерирующие и поддерживающие ключи.

0
ответ дан Jay 23 November 2019 в 05:35
поделиться

Здесь есть кое-что еще.

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

Это ' Странно, что заголовки XMLHTTPresponse предоставляют cookie, технически серверу не нужно возвращать cookie вместе с ответом. Как только он установлен на клиенте, он остается установленным до истечения срока его действия. Хотя существуют схемы, в которых cookie изменяется при каждом запросе, чтобы предотвратить повторное использование. Таким образом, вы можете избежать этого обходного пути, изменив сервер так, чтобы он не предоставлял cookie в ответах XMLHTTP.

В общем, я думаю, что HTTPOnly следует использовать с некоторой осторожностью. Существуют атаки с использованием межсайтовых сценариев, при которых злоумышленник организует для пользователя отправку ajax-подобного запроса, исходящего с другого сайта, с использованием простых почтовых форм, без использования XMLHTTP, и все еще активный файл cookie вашего браузера будет аутентифицировать запрос.

Если вы хотите быть уверены, что запрос AJAX аутентифицирован, сам запрос И заголовки HTTP должны содержать cookie. Например, с помощью скриптов или уникальных скрытых входов. HTTPOnly воспрепятствует этому.

Обычно интересной причиной, по которой нужно использовать HTTPOnly, является предотвращение кражи файлов cookie сторонним контентом, включенным на вашу веб-страницу. Но есть много интересных причин, по которым следует проявлять осторожность при включении стороннего контента и агрессивно фильтровать его.

2
ответ дан 23 November 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: