Verbesserung der CSRF-Token-Verwaltung für AJAX in Laravel 9+: Best Practices
P粉242741921
2023-08-08 19:46:23
<p>Im Kontext von Laravel 9+ müssen AJAX-Anfragen CSRF-Tokens offenlegen, um die notwendigen Sicherheitsmaßnahmen sicherzustellen. Allerdings können unterschiedliche Token-Platzierungsmethoden die Eleganz und Organisation Ihres Codes beeinträchtigen. Die beiden wichtigsten Methoden sind wie folgt:<br /><br />Methode 1: Direktes Einfügen des CSRF-Tokens über die Blade-Syntax<br /><br />Bei dieser Methode werden die CSRF-Token-Karten verwendet werden über die Blade-Syntax direkt in JavaScript eingebettet. (Den gleichen Code an mehreren Stellen wiederholen)</p><p><br /></p>
<pre class="brush:js;toolbar:false;">$(document).ready(function() {
$.ajaxSetup({
Überschriften: {
'X-CSRF-TOKEN': "{{ csrf_token() }}"
}
});
});
</pre>
<p>Während dieser Ansatz das Token außerhalb des HTML-Textes hält, erfordert er die Verwendung der Blade-Syntax in der JavaScript-Datei, was die Trennung von Belangen erschwert. <br /><br />Methode 2: CSRF-Token aus Meta-Tag extrahieren<br /><br />Bei dieser Methode wird das CSRF-Token im HTML-Meta-Tag platziert und dann zur Verwendung extrahiert im AJAX-Setup. </p><p><br /></p>
<p><code><meta name="csrf-token" content="{{ csrf_token() }}">
<pre class="brush:js;toolbar:false;">$(document).ready(function() {
$.ajaxSetup({
Überschriften: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
});
</pre>
<p>Obwohl bei diesem Ansatz die Token im HTML-Code offengelegt werden (was sie ohnehin offengelegt würden), vereinfacht er die Verwaltung und Wiederverwendung von JavaScript-Dateien und erleichtert die Trennung von Code und Anliegen. <br /><br />In Anbetracht des oben Gesagten denke ich, dass Ansatz 2 besser ist, da er eleganter ist und eine bessere Trennung der Anliegen ermöglicht. Oder gibt es in Laravel andere Best Practices für die Verwaltung der CSRF-Token-Platzierung bei der Verwendung von AJAX-Anfragen, um ein besseres Gleichgewicht zwischen Sicherheit und Code-Organisation zu gewährleisten? Ich freue mich auf Ihre Erkenntnisse. <br /><br />PS: Ich habe mir z. B. https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html angesehen, aber einiges davon ist für mich unverständlich. </p><p><br /></p>
令牌只对你希望拥有它的用户暴露(这样他们才能将其发送回给你)。
它不会暴露给任何攻击者。(除非他们以某种方式破坏了服务器和浏览器之间的通信,这意味着他们已经获得比成功的CSRF攻击更多的访问权限。)
选择直接的选项。