Безопасно ли показывать токен защиты CSRF сеанса?

Или, чтобы избежать изменения slowFunc (например, у вас нет доступа к исходному коду, например):

var source = new CancellationTokenSource(); //original code
source.Token.Register(CancelNotification); //original code
source.CancelAfter(TimeSpan.FromSeconds(1)); //original code
var completionSource = new TaskCompletionSource(); //New code
source.Token.Register(() => completionSource.TrySetCanceled()); //New code
var task = Task.Factory.StartNew(() => slowFunc(1, 2), source.Token); //original code

//original code: await task;  
await Task.WhenAny(task, completionSource.Task); //New code

Вы также можете использовать красивые методы расширения из https://github.com/StephenCleary/AsyncEx и выглядит так просто:

await Task.WhenAny(task, source.Token.AsTask());

16
задан dfarrell07 23 July 2013 в 15:47
поделиться

3 ответа

Если Вы знаете, что собираетесь нуждаться в маркере CSRF для запросов Ajax, можно всегда встраивать его в HTML где-нибудь; тогда можно найти его через JavaScript путем пересечения DOM. Таким образом, у Вас все еще будет доступ к маркеру, но Вы не представляете его через API.

Для помещения его иначе: сделайте это через шаблоны Django - не через диспетчера URL. Это намного более безопасно этот путь.

12
ответ дан Sam Hasler 23 July 2013 в 15:47
поделиться

Отмена, что, я был неправ. (См. комментарии.) можно предотвратить использование путем обеспечения, что JSON следует за спецификацией: Всегда удостоверяйтесь, что Вы возвращаете литерал объектов как объект верхнего уровня. (Я не могу гарантировать, что не будет дальнейшего использования. Вообразите доступ обеспечения браузера к неудавшемуся коду в его window.onerror событиях!)

Вы не можете полагаться на правила перекрестных сценариев сайта сохранить ответы Ajax частными. Например, при возврате маркера CSRF как JSON злонамеренный сайт мог переопределять Строку или Конструктора Array и запрашивать ресурс.

bigmattyh корректен: необходимо встроить маркер где-нибудь в разметку. С другой стороны, Вы могли отклонить любые СООБЩЕНИЯ, которые делают , имеют ссылающийся домен, который не делает соответствие. Тот путь, только люди с фанатичными программными брандмауэрами будут уязвимы для CSRF.

1
ответ дан phyzome 23 July 2013 в 15:47
поделиться

ОБНОВЛЕНИЕ : ниже было верно, и должен быть верным, если все браузеры и плагины были правильно реализованы. К сожалению, мы теперь знаем, что они не, и что определенные комбинации плагинов браузера и перенаправлений могут позволить взломщику предоставлять произвольные заголовки по междоменному запросу. К сожалению, это означает, что даже Ajax запрашивает с "X-Requested-With: XMLHttpRequest" заголовок должен теперь быть CSRF-защищен. В результате Django больше не освобождает запросы Ajax от защиты CSRF .

Исходный Ответ

стоит упомянуть, что защита запросов Ajax от CSRF является ненужной, так как браузеры не позволяют запросы Ajax перекрестного сайта. На самом деле промежуточное программное обеспечение Django CSRF теперь автоматически освобождает запросы Ajax от маркера CSRF, сканируя .

Это только допустимо при фактической проверке серверной стороны заголовка X-Requested-With на значение "XMLHttpRequest" (который Django делает), и только освобождение реальных запросов Ajax от сканирования CSRF.

16
ответ дан Carl Meyer 24 July 2013 в 02:47
поделиться
  • 1
    Это качается. Что-либо лучше, чем c-стиль для цикла, но это НАМНОГО лучше. – innaM 21 February 2009 в 01:05
Другие вопросы по тегам:

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