1/** 2 * CSRF ãã¼ã¯ã³èªåä»ä¸ï¼çºè¦7ï¼ 3 * 4 * 2026-06 ã»ãã¥ãªãã£ç£æ» çºè¦7 対å¿ã 5 * CSRF Cookie 㯠HttpOnly ã®ãã JavaScript ããèªããªãããã£ã¦ãµã¼ãã 6 * <meta name="csrf-token"> / <meta name="csrf-header"> ã«ãã¼ã¯ã³ã¨ãããåã 7 * åºåãï¼header.phpï¼ãæ¬ã¹ã¯ãªããããããèªãã§ãç¶æ 夿´ãªã¯ã¨ã¹ã 8 * (POST/PUT/PATCH/DELETE) ã« CSRF ãããã¨ãã¦èªåä»ä¸ããã 9 * 10 * å ¨ãã¼ã¸å ±é(footer)ã§ axios ã®ç´å¾ã«èªã¿è¾¼ãã 11 */ 12(function (w, d) { 13 'use strict'; 14 15 function meta(name) { 16 var el = d.querySelector('meta[name="' + name + '"]'); 17 return el ? el.getAttribute('content') : null; 18 } 19 20 var HEADER_NAME = meta('csrf-header') || 'X-CSRF-TOKEN'; 21 22 // ææ°ãã¼ã¯ã³ãè¿ãï¼åä¸ãã¼ã¸å ã§åçæãããå ´åã«åãæ¯å meta ãèªãï¼ 23 function getToken() { 24 return meta('csrf-token'); 25 } 26 27 function isStateChanging(method) { 28 if (!method) return false; 29 var m = String(method).toUpperCase(); 30 return m === 'POST' || m === 'PUT' || m === 'PATCH' || m === 'DELETE'; 31 } 32 33 // --- axiosï¼åå¨ããå ´åï¼ã«ã¤ã³ã¿ã¼ã»ãã¿ã¼ãä»è¾¼ã --- 34 if (w.axios && w.axios.interceptors && w.axios.interceptors.request) { 35 w.axios.interceptors.request.use(function (config) { 36 if (isStateChanging(config.method)) { 37 var t = getToken(); 38 if (t) { 39 config.headers = config.headers || {}; 40 config.headers[HEADER_NAME] = t; 41 } 42 } 43 return config; 44 }); 45 } 46 47 // --- fetch ãã©ãããã¦åããããèªåä»ä¸ï¼åä¸ãªãªã¸ã³ã®ç¶æ 夿´ãªã¯ã¨ã¹ãã®ã¿ï¼ --- 48 if (typeof w.fetch === 'function') { 49 var origFetch = w.fetch.bind(w); 50 w.fetch = function (input, init) { 51 init = init || {}; 52 var method = init.method || (typeof input === 'object' && input && input.method) || 'GET'; 53 if (isStateChanging(method)) { 54 // å¤é¨ãªãªã¸ã³ã«ã¯ä»ä¸ããªãï¼ãã¼ã¯ã³æ¼ãã鲿¢ï¼ 55 var url = (typeof input === 'string') ? input : (input && input.url) || ''; 56 var sameOrigin = !/^https?:\/\//i.test(url) || url.indexOf(w.location.origin) === 0; 57 if (sameOrigin) { 58 var t = getToken(); 59 if (t) { 60 var headers = new Headers(init.headers || (typeof input === 'object' && input && input.headers) || {}); 61 if (!headers.has(HEADER_NAME)) headers.set(HEADER_NAME, t); 62 init.headers = headers; 63 } 64 } 65 } 66 return origFetch(input, init); 67 }; 68 } 69})(window, document);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.