{"id":1096,"date":"2025-06-12T12:49:20","date_gmt":"2025-06-12T04:49:20","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1096.html"},"modified":"2025-06-12T12:49:20","modified_gmt":"2025-06-12T04:49:20","slug":"symfony%e6%a1%86%e6%9e%b6%e4%b8%ad%e7%9a%84csrf%e6%94%bb%e5%87%bb%ef%bc%9a%e5%ae%9e%e6%88%98%e6%8c%87%e5%8d%97%ef%bc%88%e5%90%ab%e7%a4%ba%e4%be%8b%ef%bc%89","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1096.html","title":{"rendered":"Symfony\u6846\u67b6\u4e2d\u7684CSRF\u653b\u51fb\uff1a\u5b9e\u6218\u6307\u5357\uff08\u542b\u793a\u4f8b\uff09"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#26631;&#39064;&#65306;Symfony&#26694;&#26550;&#20013;&#30340;CSRF&#25915;&#20987;&#65306;&#23454;&#25112;&#25351;&#21335;&#65288;&#21547;&#31034;&#20363;&#65289;<\/p>\n<p>CSRF&#65288;&#36328;&#31449;&#35831;&#27714;&#20266;&#36896;&#65289;&#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#23433;&#20840;&#28431;&#27934;&#65292;&#23427;&#20801;&#35768;&#24694;&#24847;&#29992;&#25143;&#36890;&#36807;&#20266;&#35013;&#25104;&#21512;&#27861;&#29992;&#25143;&#30340;&#35831;&#27714;&#26469;&#25191;&#34892;&#25805;&#20316;&#12290;&#22312;Symfony&#26694;&#26550;&#20013;&#65292;CSRF&#20445;&#25252;&#26426;&#21046;&#21487;&#20197;&#26377;&#25928;&#22320;&#38450;&#27490;&#36825;&#31181;&#25915;&#20987;&#12290;<\/p>\n<h3>&#20160;&#20040;&#26159;CSRF&#65311;<\/h3>\n<p>CSRF&#26159;&#30001;&#20110;&#26381;&#21153;&#22120;&#31471;&#30340;CSRF&#20196;&#29260;&#19982;&#23458;&#25143;&#31471;&#25552;&#20132;&#30340;&#25968;&#25454;&#19981;&#21305;&#37197;&#32780;&#23548;&#33268;&#30340;&#12290;&#24403;&#29992;&#25143;&#35775;&#38382;&#38656;&#35201;&#39564;&#35777;&#36523;&#20221;&#30340;&#39029;&#38754;&#26102;&#65292;&#26381;&#21153;&#22120;&#20250;&#29983;&#25104;&#19968;&#20010;&#21807;&#19968;&#30340;CSRF&#20196;&#29260;&#65292;&#24182;&#23558;&#36825;&#20010;&#20196;&#29260;&#23884;&#20837;&#21040;&#39029;&#38754;&#30340;HTML&#20013;&#12290;&#24403;&#29992;&#25143;&#25552;&#20132;&#34920;&#21333;&#25968;&#25454;&#26102;&#65292;&#26381;&#21153;&#22120;&#20250;&#26816;&#26597;&#25552;&#20132;&#30340;&#25968;&#25454;&#20013;&#26159;&#21542;&#21253;&#21547;&#27491;&#30830;&#30340;CSRF&#20196;&#29260;&#12290;&#22914;&#26524;&#27809;&#26377;&#27491;&#30830;&#21305;&#37197;&#30340;&#20196;&#29260;&#65292;&#37027;&#20040;&#35813;&#35831;&#27714;&#23601;&#34987;&#35748;&#20026;&#26159;&#26080;&#25928;&#30340;&#12290;<\/p>\n<h3>&#22914;&#20309;&#22312;Symfony&#20013;&#21551;&#29992;CSRF&#20445;&#25252;&#65311;<\/h3>\n<ol>\n<li>\n<p><strong>&#23433;&#35013;&#21644;&#37197;&#32622;CSRF&#32452;&#20214;<\/strong>&#65306;\n&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013;&#24182;&#37197;&#32622;Symfony&#30340;CSRF&#32452;&#20214;&#12290;&#20320;&#21487;&#20197;&#20351;&#29992;Composer&#26469;&#23433;&#35013;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require symfony\/csrf<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#22312;&#25511;&#21046;&#22120;&#20013;&#21551;&#29992;CSRF&#20445;&#25252;<\/strong>&#65306;\n&#22312;&#20320;&#30340;&#25511;&#21046;&#22120;&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;<code>isCsrfTokenValid()<\/code>&#26041;&#27861;&#26469;&#26816;&#26597;&#25552;&#20132;&#30340;&#25968;&#25454;&#20013;&#26159;&#21542;&#21253;&#21547;&#26377;&#25928;&#30340;CSRF&#20196;&#29260;&#12290;<\/p>\n<pre><code class=\"language-php\">use SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentSecurityCsrfCsrfToken;\n\nclass MyController extends AbstractController\n{\n   public function submitForm(Request $request)\n   {\n       if ($this-&gt;isCsrfTokenValid('my_csrf_token', $request-&gt;get('_csrf_token'))) {\n           \/\/ &#22788;&#29702;&#34920;&#21333;&#25968;&#25454;\n           $data = $request-&gt;request-&gt;all();\n           \/\/ ...\n       } else {\n           \/\/ CSRF&#20196;&#29260;&#26080;&#25928;&#65292;&#36820;&#22238;&#38169;&#35823;&#20449;&#24687;\n           return $this-&gt;render('error.html.twig');\n       }\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#22312;&#27169;&#26495;&#20013;&#26174;&#31034;CSRF&#20196;&#29260;<\/strong>&#65306;\n&#22312;&#20320;&#30340;&#34920;&#21333;&#20013;&#65292;&#20320;&#38656;&#35201;&#26174;&#31034;&#19968;&#20010;&#38544;&#34255;&#30340;&#36755;&#20837;&#23383;&#27573;&#65292;&#20854;&#21517;&#31216;&#20026;<code>_csrf_token<\/code>&#65292;&#20540;&#20026;CSRF&#20196;&#29260;&#12290;<\/p>\n<pre><code class=\"language-twig\">&lt;form action=\"\/submit-form\" method=\"post\"&gt;\n   {{ csrf_field() }}\n   &lt;!-- &#20854;&#20182;&#34920;&#21333;&#23383;&#27573; --&gt;\n   &lt;button type=\"submit\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;Symfony&#20013;&#21551;&#29992;CSRF&#20445;&#25252;&#21644;&#22312;&#27169;&#26495;&#20013;&#26174;&#31034;CSRF&#20196;&#29260;&#12290;<\/p>\n<h4><code>MyController.php<\/code><\/h4>\n<pre><code class=\"language-php\">use SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentSecurityCsrfCsrfToken;\n\nclass MyController extends AbstractController\n{\n    public function submitForm(Request $request)\n    {\n        if ($this-&gt;isCsrfTokenValid('my_csrf_token', $request-&gt;get('_csrf_token'))) {\n            \/\/ &#22788;&#29702;&#34920;&#21333;&#25968;&#25454;\n            $data = $request-&gt;request-&gt;all();\n            \/\/ ...\n        } else {\n            \/\/ CSRF&#20196;&#29260;&#26080;&#25928;&#65292;&#36820;&#22238;&#38169;&#35823;&#20449;&#24687;\n            return $this-&gt;render('error.html.twig');\n        }\n    }\n}<\/code><\/pre>\n<h4><code>templates\/my_form.html.twig<\/code><\/h4>\n<pre><code class=\"language-twig\">&lt;form action=\"\/submit-form\" method=\"post\"&gt;\n    {{ csrf_field() }}\n    &lt;label for=\"name\"&gt;Name:&lt;\/label&gt;\n    &lt;input type=\"text\" id=\"name\" name=\"name\"&gt;\n    &lt;!-- &#20854;&#20182;&#34920;&#21333;&#23383;&#27573; --&gt;\n    &lt;button type=\"submit\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#22312;Symfony&#26694;&#26550;&#20013;&#25104;&#21151;&#21551;&#29992;CSRF&#20445;&#25252;&#65292;&#24182;&#22312;&#27169;&#26495;&#20013;&#27491;&#30830;&#26174;&#31034;&#21644;&#22788;&#29702;CSRF&#20196;&#29260;&#12290;&#36825;&#26679;&#21487;&#20197;&#26377;&#25928;&#38450;&#27490;CSRF&#25915;&#20987;&#65292;&#25552;&#39640;&#31995;&#32479;&#30340;&#23433;&#20840;&#24615;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#36328;&#31449;&#35831;&#27714;&#20266;&#36896;&#65288;CSRF&#65289;&#26159;&#19968;&#31181;&#23433;&#20840;&#28431;&#27934;&#65292;&#25915;&#20987;&#32773;&#36890;&#36807;&#27450;&#39575;&#29992;&#25143;&#22312;&#24403;&#21069;&#24050;&#35748;&#35777;&#30340;Web&#24212;&#29992;&#19978;&#25191;&#34892;&#19981;&#24076;&#26395;&#30340;&#25805;&#20316;&#12290;&#22312;&#36825;&#31687;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#35752;&#22914;&#20309;&#22788;&#29702;Symfony&#26694;&#26550;&#20013;&#30340;CSRF&#20445;&#25252;&#12290;Symfony&#26159;&#19990;&#30028;&#19978;&#26368;&#21463;&#27426;&#36814;&#30340;PHP&#26694;&#26550;&#20043;&#19968;&#12290;<\/p><p>Symfony &#25552;&#20379;&#20102;&#19968;&#20010;&#26131;&#20110;&#20351;&#29992;&#30340; CSRF &#20196;&#29260;&#26381;&#21153;&#65292;&#20854;&#33258;&#24102;&#21151;&#33021;&#12290;&#35201;&#29702;&#35299;&#22914;&#20309;&#20351;&#29992;&#23427;&#26469;&#20445;&#25252;&#25105;&#20204;&#30340; Symfony &#24212;&#29992;&#31243;&#24207;&#24182;&#25552;&#21319;&#23433;&#20840;&#24615;&#65292;&#25105;&#20204;&#38656;&#35201;&#31995;&#32479;&#22320;&#20102;&#35299; CSRF &#38450;&#25252;&#30340;&#21508;&#20010;&#26041;&#38754;&#12290;<\/p><h2>&#21551;&#29992;CSRF&#20445;&#25252;<\/h2><p>&#39318;&#20808;&#65292;&#30830;&#20445;&#24744;&#30340;Symfony&#24212;&#29992;&#21551;&#29992;&#20102;CSRF&#20445;&#25252;&#21151;&#33021;&#12290;&#40664;&#35748;&#24773;&#20917;&#19979;&#65292;Symfony&#20250;&#20026;&#34920;&#21333;&#25552;&#20132;&#21551;&#29992;CSRF&#20445;&#25252;&#12290;&#36825;&#21487;&#20197;&#36890;&#36807;&#31649;&#29702;&#30028;&#38754;&#36827;&#34892;&#37197;&#32622;&#12290;<code>framework.yaml<\/code>&#37197;&#32622;&#25991;&#20214;&#65306;<\/p><pre><code>framework:\n    csrf_protection:\n        enabled: true\n<\/code><\/pre><p>&#24403;CSRF&#20445;&#25252;&#21551;&#29992;&#26102;&#65292;Symfony&#20250;&#33258;&#21160;&#22312;&#20351;&#29992;Symfony Form Builder&#21019;&#24314;&#30340;&#25152;&#26377;&#34920;&#21333;&#20013;&#28155;&#21152;&#19968;&#20010;&#38544;&#34255;&#30340;CSRF&#20196;&#29260;&#23383;&#27573;&#12290;<\/p><h2>&#24212;&#29992;CSRF&#20196;&#29260;&#12290;<\/h2><p>&#20026;&#20102;&#22312;&#34920;&#21333;&#20013;&#21253;&#21547;CSRF&#20196;&#29260;&#65292;&#35831;&#30830;&#20445;&#24744;&#20351;&#29992;Symfony&#30340;FormBuilder&#21019;&#24314;&#34920;&#21333;&#12290;&#20197;&#19979;&#26159;&#24102;&#26377;CSRF&#20196;&#29260;&#30340;&#22522;&#26412;&#34920;&#21333;&#31034;&#20363;&#65306;<\/p><pre><code>use SymfonyComponentFormExtensionCoreTypeFormType;\nuse SymfonyComponentFormExtensionCoreTypeCsrfTokenType;\n\n$form = $this-&gt;createFormBuilder()\n    -&gt;add('_csrf_token', CsrfTokenType::class)\n    -&gt;getForm();\n\n$form-&gt;handleRequest($request);\n\nif ($form-&gt;isSubmitted() &amp;&amp; $form-&gt;isValid()) {\n    \/\/ ... handle your form submission.\n}\n<\/code><\/pre><p>&#35813;&#20195;&#30721;&#20250;&#22312;&#24744;&#30340;&#34920;&#21333;&#20013;&#28155;&#21152;CSRF&#20196;&#29260;&#65292;&#24182;&#22312;&#25552;&#20132;&#34920;&#21333;&#26102;&#33258;&#21160;&#36827;&#34892;&#39564;&#35777;&#12290;<\/p><h2>Ajax &#21644; CSRF<\/h2><p>&#22914;&#26524;&#24744;&#30340;&#24212;&#29992;&#20351;&#29992;AJAX&#35831;&#27714;&#65292;&#37027;&#20040;&#22312;&#36825;&#20123;&#35831;&#27714;&#20013;&#20063;&#38750;&#24120;&#37325;&#35201;&#30340;&#26159;&#20256;&#36882;CSRF&#20196;&#29260;&#12290;&#22312;Symfony&#25511;&#21046;&#22120;&#20013;&#65292;&#24744;&#21487;&#20197;&#20687;&#36825;&#26679;&#29983;&#25104;&#19968;&#20010;&#20196;&#29260;&#65306;<\/p><pre><code>use SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentHttpFoundationJsonResponse;\nuse SymfonyComponentSecurityCsrfCsrfTokenManagerInterface;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\n\n\/\/ ...\n\nclass SomeController extends AbstractController\n{\n    public function apiAction(Request $request, CsrfTokenManagerInterface $csrfTokenManager)\n    {\n        \/\/ Generate CSRF token\n        $csrfToken = $csrfTokenManager-&gt;getToken('my_action_id')-&gt;getValue();\n\n        \/\/ Respond with CSRF token\n        return new JsonResponse(['csrf_token' =&gt; $csrfToken]);\n    }\n}\n<\/code><\/pre><p>&#19978;&#36848;&#20196;&#29260;&#65288;&#8217;my_action_id&#8217;&#65289;&#38543;&#21518;&#19982;&#24744;&#30340;AJAX&#35831;&#27714;&#19968;&#36215;&#25552;&#20132;&#21040;&#26381;&#21153;&#22120;&#31471;&#20197;&#36827;&#34892;&#39564;&#35777;&#12290;<\/p><h2>&#25163;&#21160;&#39564;&#35777;CSRF&#20196;&#29260;<\/h2><p>&#20197;&#19979;&#26159;&#20351;&#29992;Symfony&#25511;&#21046;&#22120;&#25163;&#21160;&#39564;&#35777;CSRF&#20196;&#29260;&#30340;&#26041;&#24335;&#65306;<\/p><pre><code>use SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentSecurityCoreExceptionInvalidCsrfTokenException;\nuse SymfonyComponentSecurityCsrfCsrfToken;\nuse SymfonyComponentSecurityCsrfCsrfTokenManagerInterface;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\n\n\/\/ ...\n\nclass SomeController extends AbstractController\n{\n    public function someAction(Request $request, CsrfTokenManagerInterface $csrfTokenManager)\n    {\n        $csrfToken = new CsrfToken('my_action_id', $request-&gt;request-&gt;get('_csrf_token'));\n\n        if (!$csrfTokenManager-&gt;isTokenValid($csrfToken)) {\n            throw new InvalidCsrfTokenException('Invalid CSRF token.');\n        }\n\n        \/\/ ... your code for when the CSRF token is valid.\n    }\n}\n<\/code><\/pre><p>&#36825;&#20010;&#20195;&#30721;&#22312;&#39564;&#35777;CSRF&#20196;&#29260;&#26080;&#25928;&#26102;&#20250;&#25243;&#20986;&#24322;&#24120;&#65292;&#20174;&#32780;&#25298;&#32477;&#35831;&#27714;&#12290;<\/p><h2>&#27491;&#22312;&#27979;&#35797;CSRF&#20445;&#25252;&#12290;<\/h2><p>&#27979;&#35797;CSRF&#20445;&#25252;&#26159;&#19968;&#39033;&#24320;&#21457;&#20013;&#30340;&#37325;&#35201;&#37096;&#20998;&#12290;Symfony&#25552;&#20379;&#20102;&#22914;CsrfTokenManager&#36825;&#26679;&#30340;&#24037;&#20855;&#65292;&#24110;&#21161;&#22312;&#27979;&#35797;&#20013;&#27169;&#25311;&#21644;&#39564;&#35777;CSRF&#34892;&#20026;&#65306;<\/p><pre><code>use SymfonyBundleFrameworkBundleTestWebTestCase;\n\n\/\/ ...\n\nclass SomeControllerTest extends WebTestCase\n{\n    public function testCsrfProtection()\n    {\n        $client = static::createClient();\n        $csrfTokenManager = $client-&gt;getContainer()-&gt;get('security.csrf.token_manager');\n        $token = $csrfTokenManager-&gt;getToken('my_action_id')-&gt;getValue();\n\n        $client-&gt;request('POST', '\/path\/to\/your\/form', [\n            '_csrf_token' =&gt; $token,\n            \/\/ other form fields\n        ]);\n\n        $this-&gt;assertTrue($client-&gt;getResponse()-&gt;isSuccessful());\n    }\n}\n<\/code><\/pre><p>&#26368;&#21518;&#65292;&#22312;&#20219;&#20309;&#20851;&#20110;&#23433;&#20840;&#30340;&#25351;&#21335;&#20013;&#65292;&#25552;&#37266;&#35835;&#32773;&#22987;&#32456;&#35201;&#36319;&#19978;Symfony&#21644;PHP&#31038;&#21306;&#20197;&#21450;&#20854;&#20182;&#26368;&#26032;&#23433;&#20840;&#35686;&#25253;&#21644;&#26356;&#26032;&#12290;&#23433;&#20840;&#24615;&#26159;&#19968;&#20010;&#19981;&#26029;&#21464;&#21270;&#30340;&#39046;&#22495;&#65292;&#20170;&#22825;&#30340;&#26368;&#20339;&#23454;&#36341;&#21487;&#33021;&#26126;&#22825;&#23601;&#36807;&#26102;&#20102;&#12290;&#32487;&#32493;&#23398;&#20064;&#12289;&#32487;&#32493;&#32534;&#30721;&#24182;&#20445;&#25345;&#23433;&#20840;&#12290;<\/p><p>&#25105;&#24076;&#26395;&#36825;&#31687;&#25351;&#21335;&#33021;&#20026;&#20320;&#22312;Symfony&#20013;&#30340;CSRF&#20445;&#25252;&#25552;&#20379;&#22362;&#23454;&#30340;&#22522;&#30784;&#65292;&#24182;&#19988;&#35753;&#20320;&#23545;&#36825;&#20123;&#23454;&#36341;&#26356;&#21152;&#33258;&#20449;&#65292;&#33021;&#22815;&#22312;&#26410;&#26469;&#30340;&#39033;&#30446;&#20013;&#23454;&#26045;&#23427;&#20204;&#12290;&#31069;&#20320;&#32534;&#31243;&#24841;&#24555;&#65281;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Symfony &#26694;&#26550;&#20013;&#23454;&#26045; CSRF&#65288;&#36328;&#31449;&#35831;&#27714;&#20266;&#36896;&#65289;&#20445;&#25252;&#26159;&#33267;&#20851;&#37325;&#35201;&#30340;&#65292;&#22240;&#20026;&#23427;&#26377;&#21161;&#20110;&#38450;&#27490;&#24694;&#24847;&#29992;&#25143;&#36890;&#36807;&#20266;&#36896; HTTP &#35831;&#27714;&#26469;&#33719;&#21462;&#25935;&#24863;&#25968;&#25454;&#25110;&#25191;&#34892;&#24694;&#24847;&#25805;&#20316;&#12290;<\/p>\n<h3>&#23454;&#25112;&#25351;&#21335;<\/h3>\n<ol>\n<li>\n<p><strong>&#20102;&#35299;&#20160;&#20040;&#26159; CSRF<\/strong>&#65306;\nCSRF &#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#23433;&#20840;&#28431;&#27934;&#65292;&#23427;&#20801;&#35768;&#25915;&#20987;&#32773;&#21033;&#29992;&#29992;&#25143;&#30340;&#20250;&#35805;&#20196;&#29260;&#65288;&#36890;&#24120;&#26159; cookie&#65289;&#36827;&#34892;&#25915;&#20987;&#12290;<\/p>\n<\/li>\n<li>\n<p><strong>&#37197;&#32622; CSRF &#38450;&#25252;<\/strong>&#65306;\n&#20320;&#21487;&#20197;&#20351;&#29992; <code>Form.csrf_token<\/code> &#23646;&#24615;&#26469;&#21551;&#29992; CSRF &#39564;&#35777;&#12290;&#36825;&#38656;&#35201;&#22312;&#25511;&#21046;&#22120;&#30340; <code>__construct()<\/code> &#26041;&#27861;&#20013;&#35774;&#32622;&#65306;<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentSecurityCoreAuthenticationTokenStorageTokenStorageInterface;\n\npublic function __construct(Request $request, TokenStorageInterface $tokenStorage)\n{\n    parent::__construct($request);\n\n    \/\/ &#21551;&#29992; CSRF &#39564;&#35777;\n    $this-&gt;addCsrfProtection();\n}<\/code><\/pre>\n<ol start=\"3\">\n<li><strong>&#39564;&#35777;&#35831;&#27714;<\/strong>&#65306;\n&#20351;&#29992; <code>$this-&gt;checkCsrfToken()<\/code> &#26041;&#27861;&#26469;&#39564;&#35777;&#35831;&#27714;&#26159;&#21542;&#26377;&#25928;&#12290;&#22914;&#26524;&#39564;&#35777;&#22833;&#36133;&#65292;&#23558;&#25243;&#20986;&#24322;&#24120;&#24182;&#38459;&#27490;&#35775;&#38382;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">if (!$this-&gt;checkCsrfToken()) {\n    throw new Exception('CSRF token is invalid.');\n}<\/code><\/pre>\n<ol start=\"4\">\n<li>\n<p><strong>&#22788;&#29702;&#26410;&#39564;&#35777;&#35831;&#27714;<\/strong>&#65306;\n&#22914;&#26524; CSRF &#39564;&#35777;&#22833;&#36133;&#65292;&#21017;&#24212;&#37325;&#23450;&#21521;&#21040;&#30331;&#24405;&#39029;&#38754;&#65292;&#35201;&#27714;&#29992;&#25143;&#37325;&#26032;&#30331;&#24405;&#20197;&#39564;&#35777;&#20854;&#36523;&#20221;&#12290;<\/p>\n<\/li>\n<li>\n<p><strong>&#26085;&#24535;&#35760;&#24405;<\/strong>&#65306;\n&#23545;&#20110;&#27599;&#20010;&#39564;&#35777;&#23581;&#35797;&#65292;&#24212;&#35760;&#24405;&#21738;&#20123;&#29992;&#25143;&#35797;&#22270;&#36827;&#34892;&#21738;&#20123;&#35831;&#27714;&#12290;&#36825;&#23545;&#20110;&#20998;&#26512;&#21644;&#39044;&#38450;&#26410;&#26469;&#25915;&#20987;&#38750;&#24120;&#26377;&#29992;&#12290;<\/p>\n<\/li>\n<li>\n<p><strong>&#26368;&#20339;&#23454;&#36341;<\/strong>&#65306;<\/p>\n<ul>\n<li>&#22312;&#24212;&#29992;&#20013;&#24191;&#27867;&#37096;&#32626; CSRF &#38450;&#25252;&#12290;<\/li>\n<li>&#21450;&#26102;&#26356;&#26032; Symfony &#29256;&#26412;&#65292;&#30830;&#20445;&#24050;&#30693;&#30340;&#23433;&#20840;&#34917;&#19969;&#34987;&#23433;&#35013;&#12290;<\/li>\n<li>&#23450;&#26399;&#23457;&#26597;&#31995;&#32479;&#26085;&#24535;&#65292;&#20197;&#20415;&#24555;&#36895;&#35782;&#21035;&#21644;&#21709;&#24212;&#20219;&#20309;&#28508;&#22312;&#30340;&#23433;&#20840;&#38382;&#39064;&#12290;<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#19979;&#38754;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992; Symfony &#26500;&#36896;&#22120;&#21019;&#24314;&#19968;&#20010;&#20855;&#26377; CSRF &#39564;&#35777;&#30340;&#25511;&#21046;&#22120;&#65306;<\/p>\n<pre><code class=\"language-php\">use SymfonyComponentRoutingRouteCollection;\nuse SymfonyComponentRoutingRoute;\nuse SymfonyBundleFrameworkBundleControllerController;\n\nclass MyController extends Controller\n{\n    public function indexAction()\n    {\n        return $this-&gt;render('myapp\/index.html.twig', [\n            'csrf_token' =&gt; $this-&gt;generateCsrfToken(),\n        ]);\n    }\n\n    private function generateCsrfToken(): string\n    {\n        \/\/ &#36825;&#37324;&#26159;&#29983;&#25104; CSRF &#31614;&#21517;&#30340;&#26041;&#27861;&#65292;&#26681;&#25454;&#20855;&#20307;&#38656;&#27714;&#23454;&#29616;\n        return sha1(uniqid(time(), true));\n    }\n}\n\n\/\/ &#22312;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#30446;&#24405;&#19979;&#30340; app\/config\/routing.yml &#25991;&#20214;&#20013;&#23450;&#20041;&#36335;&#30001;\nreturn [\n    ...\n    'myapp' =&gt; [\n        ...\n        Route::any('\/index', [MyController::class, 'indexAction']),\n        Route::any('\/protected', [MyController::class, 'protectedAction'])\n    ],\n];<\/code><\/pre>\n<p>&#36825;&#20010;&#31034;&#20363;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;&#19968;&#20010;&#31616;&#21333;&#30340;&#25511;&#21046;&#22120;&#20013;&#21551;&#29992; CSRF &#39564;&#35777;&#65292;&#24182;&#19988;&#36824;&#28436;&#31034;&#20102;&#22914;&#20309;&#22312;&#29983;&#25104; CSRF &#31614;&#21517;&#26102;&#23454;&#29616;&#19968;&#20010;&#31616;&#21333;&#30340;&#26041;&#27861;&#12290;&#24403;&#28982;&#65292;&#23454;&#38469;&#24212;&#29992;&#20013;&#21487;&#33021;&#38656;&#35201;&#26356;&#22797;&#26434;&#30340;&#31614;&#21517;&#26041;&#27861;&#25110;&#20854;&#20182;&#31574;&#30053;&#65292;&#20197;&#28385;&#36275;&#29305;&#23450;&#30340;&#23433;&#20840;&#38656;&#27714;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#26631;&#39064;&#65306;Symfony&#26694;&#26550;&#20013;&#30340;CSRF&#25915;&#20987;&#65306;&#23454;&#25112;&#25351;&#21335;&#65288;&#038;..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1096","my1js","type-my1js","status-publish","hentry","my1js2nav-symfony"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/1096","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=1096"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1096"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1096"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}