Мой проект должен выполнить тест безопасности, запрошенный клиентом.
Я использую OWASP ZAP для запуска теста.
, и он выдаст предупреждение cookie No HttpOnly Flag
, и этопроизошел из-за того, что файл cookie X-XSRF TOKEN не установил флаг httponly.
Я провел некоторое исследование и знаю, что этот файл cookie не устанавливал httponly для библиотек JavaScript, таких как axios, для его использования.
но я использую laravel 5.5, и в начальном проекте есть отличный механизм, позволяющий библиотеке javascript получать этот токен без непосредственного использования cookie, с помощью мета-флага:
......
// layout.blade.php
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
......
и в индексе. js:
/**
* Next we will register the CSRF Token as a common header with Axios so that
* all outgoing HTTP requests automatically have it attached. This is just
* a simple convenience so we don't have to attach every token manually.
*/
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
, поэтому все должно работать нормально, даже если для XSRF-TOKEN
s httponly
установлен флаг true.
Я отслеживаю код src и понимаю, что могу изменить толькоодна строка, чтобы заставить это работать. и соменое уже открываю pr на github для решения этого вопроса:
https://github.com/ametad/framework/commit/2241b020ae3001ce5dabc1b7c5ea1514ff7f2e33
но я не стесняюсь изменять исходный код фреймворка, поэтому япопробуйте изменить заголовок cookie через сервер apache (public/.httaccess
)
# public/.httaccess
<ifModule mod_headers.c>
Header always edit Set-Cookie: (.*) "$1, httponly"
Header set X-Content-Type-Options nosniff
Header always append X-Frame-Options SAMEORIGIN
Header set X-XSS-Protection "1; mode=block"
</ifModule>
, но Header always edit Set-Cookie: (.*) "$1, httponly"
у меня не сработало. ниже этой строки все работает, просто set-cookie не работает.
есть идеи, как решить эту проблему?