2015-01-05 6 views
1

Документация AngularJS содержит некоторые рекомендации по защите веб-страницы от уязвимостей JSON и XSRF Attacks (https://docs.angularjs.org/api/ng/service/$http раздел «Вопросы безопасности»).ServiceStack с AngularJS: Защита от уязвимостей JSON и XSRF

Как настроить сериализацию JSON для префикса моего JSON? Каков наилучший способ получить проверяемое значение токена «X-XSRF-TOKEN» и как проверить его для каждого запроса?

ответ

3

Вы можете добавить GlobalResponseFilter префикс вашего JSON с:

this.GlobalResponseFilters.Add((req, res, dto) => 
{ 
    if (req.ResponseContentType.MatchesContentType(MimeTypes.Json) 
     && !(dto is IHttpResult)) 
    { 
     res.Write(")]}',\n"); 
    } 
}); 

, который будет писать рекомендуемый префикс перед сериализованным ответом JSON.

Это защитит от JS Array уязвимости, альтернативный подход будет обернуть ответы массива в DTO, например:

return new Response { Results = Db.Select<Poco>() }; 

Какого бы сериализовать как объект JSON избегает массива уязвимости JS.

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

Любая случайная строка должна сделать хороший токен, например. шестнадцатеричные случайные байты или просто новый Guid.

+0

Что касается рекоммендации XSRF: мне нужно создать файл cookie «XSRF-TOKEN», чтобы он был доступен для Angular. По умолчанию SS принудительно использует cookie «HttpOnly», даже если я создаю файл cookie с «HttpOnly» = false. При установке параметра AllowNonHttpOnlyCookies значение true, Angular может получить доступ к этому файлу cookie и отправляет «X-XSRF-TOKEN» - все отлично. Но теперь также «cookie ss-id» внезапно не «cookie» HttOnly !? Исправьте меня, если я ошибаюсь, но этот ss-id должен быть «HttpOnly» cookie. Нет, JS никогда не сможет возиться с sessionId, я думаю, что это также верно для ss-pid cookie. –

Смежные вопросы