Вы можете добавить 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.
Что касается рекоммендации 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. –