2016-07-29 3 views
0

Wir betreiben eine Syfmonfy 3.1.2 Site auf einem Server, auf dem PHP 5.5.9 installiert ist. Alles funktioniert gut, außer, dass wir mit einem Problem beschäftigen, die CSRF-Token zu erstellen:Symfony - Zufallsgenerator für das CSRF-Token erzeugt Fehler

Es gibt keine geeigneten CSPRNG auf dem System installiert ist

Dies ist related zum Random Compat Bündel. Es scheint, dass /dev/urandom nicht verfügbar ist.


Wir wollen noch unsere Formulare mit einer CSRF-Token und sie sogar provide a fallback sichern:

try { 
    $bytes = random_bytes(32); 
} catch (Exception $ex) { 
    $strong = false; 
    $bytes = openssl_random_pseudo_bytes(32, $strong); 
    if (!$strong) { 
     throw $ex; 
    } 
} 

Nun, wie kann ich das umsetzen? Ich möchte weder den Symfony Core noch das Bundle optimieren, um nicht mit jedem zukünftigen Update in Schwierigkeiten zu geraten. Ich habe einfach keine Ahnung, wo ich es anschließen soll.

Antwort

0

Wie here gezeigt, müssen Sie einen Token-Generator geben, wenn CSRF-Schutz konfiguriert:

# app/config/security.yml 

security: 
    # ... 
    firewalls: 
     secured_area: 
      # ... 
      form_login: 
       # ... 
       csrf_token_generator: security.csrf.token_manager # <-here 

Anstelle des Standard-security.csrf.token_manager Service, Ihren eigenen Token-Manager geben.

Ihre benutzerdefinierte tokenManager muss CsrfTokenManagerInterface implementiert:

use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; 

es erklären als Dienst, und dann sollten Sie

Update nach Kommentar

Um die token_manager zu Ihren anderen getan werden Formulare können Sie versuchen, es in den Formularoptionen anzugeben:

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     // csrf options 
     'csrf_protection' => true, 
     'csrf_field_name' => '_token', 
     'csrf_token_id'  => 'task_item', 
     'csrf_token_manager' => 'YourBundle\Path\To\YourCustomCsrfTokenManager' 
     // other ones... 
    )); 
} 

Ich habe nichts in der Dokumentation gefunden, aber mit Blick auf Symfony Quellcode fand ich die csrf_token_manager Option here, sollte es tun, was Sie wollen.

+0

Vielen Dank für Ihre Eingabe. Ich dachte auch, dass ich in diesem Fall meinen eigenen Token-Generator schreiben könnte. Das Beispiel, das Sie gezeigt haben, erklärt, wie Sie dem Anmeldeformular einen Token-Generator hinzufügen. Aber wie stelle ich einen Token-Generator für alle anderen Formulare zur Verfügung? Ich kann keinen Platz in den Konfigurationsdateien finden. – lampshade